NoSQL數據庫對比:MongoDB vs.Cassandra
這不算是一篇PK文章,當然對于任意一個產品,沒有絕對的主場,所以文章內容更多是從各個方面的對比。本文來自boxedice的技術博客,在寫此文時他們已經在Server Density中使用MongoDB兩年多時間了。全文分為兩部分,技術方面和市場運作方面。
技術方面
1.數據結構
MongoDB使用文檔型存儲,其數據結構為與JSON類似的BSON結構,而Cassandra支持的是key-value式存儲,而每個key-value還會保存一個時間戳,這個時間戳實際上起到了版本控制的作用。
2.索引結構
MongoDB的索引幾乎與關系型數據庫完全一樣,其普通索引、聯合索引、唯一索引的意義和實現上都可以參考對MySQL索引的理解。而 Cassandra由于其是一個key-value結構的存儲,如果你要對value進行條件查找,那么就必須建立反向索引,重新建立一個value- key的鍵值對。
3.部署
MongoDB提供了Replica Sets的高可用部署方式,配置好RS的節點后,整個集群會自動選舉出Primary機器供寫入操作,并自動復制數據到其它節點。它還具有故障后自動選舉 新的主機的機制。而Cassandra提供的策略更為靈活,它通過一種對網絡結構可感知的機制,它讓你可以配置數據是備份在本地網絡中的其它節點還是備份 到遠端的數據中心。
#p#
市場動作
1.商業支持
Cassandra和MongoDB都是開源產品,不同的是Cassandra是完全自由地在Apache孵化器中進行發展。而MongoDB是由商業公司10gen在背后支持,絕大部分的MongoDB貢獻者都來自10gen。
2.技術支持
對 MongoDB來說,最好的技術支持肯定來源于10gen,因為MongoDB是他們開發的,所以他們應該最了解。在10gen的網站上,你可以看到相關的支持支持聯系方式。而Cassandra也有一些第三方的機制提供技術支持服務,這些機構基本上都有一些Cassandra的核心開發者在其中,以保證其對Cassandra能有足夠的了解。
3.發展狀態
MongoDB在10gen的帶領下一直穩步而快速地進行著 BUG修復和新功能增加,比如他們會舉行新功能投票來讓你參與MongoDB發展中來。另外值得一提的是10gen對社區的關注熱情很高,對于使用用戶的需求了解非常充分。相對來說Cassandra在這方面就相對混亂一些,與10gen的全職開發工程師不同,Cassandra更多的是自發的開源項目參與者,像Eric Evans這樣的全職開發者非常之少。
4.技術文檔
Cassandra的官方文檔并不太好,相對好一些的是Datastax自己上面的一個版本。但還是缺乏一個完整詳盡的介紹。而MongoDB的文檔相對來說比較完整而成體系。在其官方網站上你就能看到結構明了的文檔了,而且多語言版本也都在跟進翻譯中。
5.社區活動
這方面MongoDB做得非常出色,幾乎可以用技術營銷經典案例來形容。在去年一年,MongoDB相關的會議就舉行了40場。相信在國內的很多朋友還記得在北京舉行的Mongo Beijing。而Cassandra的活動更多的是自發進行的。
6.第三方客戶端
這也是boxedice選擇MongoDB的另一個原因,MongoDB擁有非常廣泛的客戶端支持,幾乎所有流行語言都有其操作客戶端。而且這些客戶端幾乎都是由10gen官方開發并維護的。而Cassandra僅有Java和Python的官方客戶端,剩下的都是一些自發的第三方客戶端。
【編輯推薦】