這兩天簡單學習了一下MongoDB資料庫,屬於NoSQL類型資料庫的一種,先簡單宏觀的看一下NoSQL的相關知識和MongoDB的基礎知識。
NoSQL是Not Only SQL的縮寫,它指的是非關係型資料庫,即有別於Oracle,mysql,sqlserver等常用的關係型資料庫。它是以key-value形式存在,即我們熟悉的JSON資料形式。
發展:NoSQL是隨著互連網Web2.0網站的興起,傳統的關聯式資料庫在應付web2.0網站,特別是超大規模資料量和高並發的SNS類型的web2.0純動態網站已經顯得力不從心,暴露了很多難以克服的問題,而NoSQL也就是為了應付這些問題而出現,並不斷髮展著。最開始是google公司的Bigtable,淘寶資料平台的Tair,視覺中國網站的MongoDB等都代表NoSQL的不斷髮展。
NoSQL發展迅速的原因:隨著互連網的不斷髮展,各種類型的應用程式層出不窮,所以導致在這個雲端運算的時代,對技術提出了更多的需求。雖然關係型資料庫已經在業界的資料存放區方面佔據不可動搖的地位,但是由於其天生的幾個限制,使其難以滿足以上的幾個需求:擴充困難,讀寫慢,成本高,有限的支撐容量。但是NoSQL關注的對資料高並發讀寫和對海量資料的儲存等,與關係型資料庫相比,它們在架構和資料模型方面做了削弱,而在擴充和並發等方面做了增強突出。
特點:非關係型的,分布式的,開源的,水平可擴充的。
優點:擴充簡單,讀寫更加快速,成本更加低廉,靈活的資料模型。
不足:不提供的對SQL的支援,支援的特性不夠豐富,現在的產品相比關係型資料庫不夠成熟。
總而言之NoSQL的出現是緊隨時代的步伐——大資料,雲端運算而誕生,並不斷髮展的,是處在一個成長中的。下邊簡單看一下它的比較成熟的一個產品MongoDB的簡單介紹。
MongoDB 的名稱取自“humongous” (巨大的) 的中間部分,足見mongodb 的宗旨在處理大量資料上面。是一個可擴充、高效能的下一代資料庫,由 C++語言編寫,旨在為web 應用提供可擴充的高效能資料儲存解決方案。
Mongo DB很好的實現了物件導向的思想(OO思想),在Mongo DB中每一條記錄都是一個Document對象。MongoDB最大的優勢在於所有的資料持久操作都無需開發人員手動編寫SQL語句,直接調用方法就可以輕鬆的實現CRUD操作。
好,看一下它有什麼特性,根據這些特性我們可以選擇什麼時候用它:高效能、易部署、易使用,儲存資料非常方便是它的主要特點:
²模式自由,支援動態查詢、完全索引,可輕易查詢文檔中內嵌的對象及數組
²面向文檔儲存,易儲存物件類型的資料, 包括文檔內嵌對象及數組
²高效的資料存放區,支援位元據及大型物件(如照片和視頻)
²支援複製和故障恢複;提供了主-從、主-主模式的資料複製及伺服器之間的資料複製
²自動分區以支援雲層級的伸縮性,支援水平的資料庫叢集,可動態添加額外的伺服器
適用情境:
²適合作為資訊基礎設施的持久化緩衝層
²適合即時的插入,更新與查詢,並具備應用程式即時資料儲存所需的複製及高度伸縮性
²Mongo 的 BSON 資料格式非常適合文檔化格式的儲存及查詢
²適合由數十或數百台伺服器組成的資料庫。因為 Mongo 已經包含了對 MapReduce 引擎的內建支援
不適用情境:
²要求高度事務性的系統
²傳統的商業智慧應用
² 複雜的跨文檔(表)級聯查詢
綜上,我們對NoSQL,MongoDB有了個宏觀的理解,知道NoSQL出現並不斷髮展狀態的原因,MongoDB的使用範圍,長處短處等,這對於我們對此款軟體的認識非常重要,關係到我們技術選擇的一關。就是認識人一樣,我們是從整體容貌開始,然後隨著不斷的深入,在觀察他們細節外貌,行為方式,生活習慣等等,學習一門技術也是這樣,先瞭解他了,然後在開始一點點的學習技術,並隨著使用次數的增多,不斷的加深理解,不斷的升華。