每個技術或者產品的出現,都有其背景,並不是臆造或者憑空出現的,都是為特定的歷史發展時期解決特定的問題而生。我們來看看橫空出世的MongoDB具體能解決什么問題。
先回顧下NoSQL的概念,NoSQL的常見的解釋一般有兩種,一是不僅僅是SQL(Not Only SQL),二是非關系型(Non-relatonal)。在這里我們理解為非關系型數據庫。非關系型數據庫的種類比較多,主要有MongoDB為代表的文檔存儲型(Document store),Cassandra為代表的列存儲型(Wide column store),Redis為代表的鍵值型(Key-Value store)等,更詳細的信息可以從DB-Engine網站了解。
現在說說MongoDB的情況,MongoDB的名字由來,Humongous Database=MongoDB,中文意思就是巨大無比的數據庫,顧名思義,MongoDB就是為處理大數據而生,以解決海量數據的存儲和高效查詢使用為使命。可以看出,它的使命不是為替代關系型數據庫為目的,而是為對關系型數據庫的補充。
MongoDB的特點:
1、非關系型
既然是非關系型,那就肯定不適用復雜的多文檔(多表)的級聯查詢,如果有這樣的需求,我們還是用關系型數據庫吧,MongoDB不適合。
2、模型自由(Schema-Free)
MongoDB一個數據庫實例可以有多個Collection(集合)(對應關系型數據庫的表Table),一個Collection里有多個Document(對應關系型數據庫的行Row),所謂模型自由,用關系型數據庫的話說,就是表Table的列Column的數量和類型不確定。是不是很意外?確實是這樣的,也就是說在一個Collection里的多個Document,每個Document都可以有任意個屬性,並且每個屬性的類型都可以不一樣。如果我們的程序的數據校驗大部分都依賴於后台數據庫的校驗,用MongoDB肯定會獲得數據錯亂,反過來說,我們可以獲取到巨大的自由,隨時根據需要擴充屬性字段,同時有一個棒棒的后台。
3、副本集和分片集群(Replica Sets and Sharded Clusters)
MongoDB提供副本集和分片集群技術,從先天上支持數據庫的高擴展性和高伸縮性,可以簡單的是使用基於X86的小服務器集群,提供強大的處理能力,而且很容易擴展,目前3.0版本已經支持高達50個副本集。分片集群會讓不停增長的數據始終如一的提供初始的訪問性能,而不會隨着數據的增長,系統的訪問速度越來越慢。