標籤:

現在最成熟的開源nosql是什麼?分別有什麼優缺點?

nosql


Apache三劍客:HBase, Cassandra, CouchDB。HBase的前景最為看好,因為它的開發者眾多並且都是頂尖高手。Cassandra目前有很多否定的聲音。CouchDB的小而精悍,讚譽很多,將要正式發布的CouchBase融合了MemBase和CouchDB,很令人期待。

HBase和Cassandra都是效仿Google的BigTable的基於列的資料庫,它們都是用Java寫的。另外一類似的資料庫是HyperTable,百度用在一些後台分析,因為它是C++寫的,速度比較快。不過HyperTable有點邊緣,不太流行。這些基於列的開源資料庫目前都比Goolge的BigTable差之少一個數量級

CouchDB是一個文檔資料庫。其最大的競爭者是MongoDB。MongoDB和HBase都採用主從伺服器設計。CouchDB的伺服器分布設計和Cassandra類似,Peer to Peer類型的。主從伺服器設計一般能更好的strong consistent,屬於CAP理論中的CP類型。 CouchDB和Cassandra一般認為都是eventual consistent,屬於CAP理論中的AP類型。但其實MongoDB和Cassandra都可以設置成strong consistent或者eventual consistent。

以上所提到的資料庫都支持MapReduce。好像出了HyperTable都支持非主鍵索引。HBase和strong consistent配置的MongoDB都支持最基本的鎖定(HBase單行鎖定,MongoDB單文檔鎖定),因此可以實現transaction,但是實現有點複雜和低效。單就transaction這一點,目前開源NoSQL資料庫沒有做的比較好的。

MongoDB的最大賣點是不需構建非主鍵索引也能執行很多查詢。但是MongoDB的伺服器分布設計實在不能讓人恭維,可以說是NoSQL資料庫中最Ugly的實現。

K-V資料庫比較多,而且上面提到的基於列的資料庫和文檔資料庫其實也都是K-V資料庫。比較流行的純種K-V資料庫有:

  • Memcached: 非常流行,不支持持久化

  • VMWare"s Redis: 很流行,新浪和知乎都在用,CP類型。
  • MemBase: 由很多Memcached的開發者開發,使用sqlite作底層存儲。在社交遊戲中用的比較多, zynga在用,CP類型。
  • Riak, 分散式實現和CouchDB/Cassandra比較像,AP類型。支持MapReduce。
  • Linkin"s Voldemort, 在K-V中少見的eventual consistent ,AP類型。
  • TT, TC

純基於二維座標索引的是Neo4j。但是現在MongoDB和CouchDB都集成這一特性。

目前CouchDB的開發者成立的公司CouchOne收購了MemBase,將其底層sqlite換成CouchDB推出了CouchBase,從而引入MapReduce以支持非主鍵索引。CouchBase暫時還沒有正式發布官方正式版,不過快了。雖然CouchDB是eventual consistent的,但是CouchBase的開發者宣稱CouchBase保持了MemBase的strong consistent特性,具體實現有待以後研究。

如果從成熟的角度來看,比較成熟並且十分流行的的有CouchDB,Memcached,Redis。

HBase和MongonDB和Cassandra都比較新,處於頻繁更新之中。最有前途的是HBase,但是Hadoop/HBase集群的維護常常需要很多專業人員並且需要構建一個比較大的集群才能最大化體現出威力,因此用戶主要是Facebook, yahoo, 百度和阿里巴巴等大公司。

個人比較期待CouchBase。

參考: http://nosql-database.org/, http://en.wikipedia.org/wiki/Nosql


按照成熟度順序推薦,某些沒有提到的基本不推薦,比如Dynamo系列。具體同類之間的優缺點還請自查!!呵呵

KV Cache: reids, memcache

KV Store: tctt, leveldb(lib), raik

Document Store: mongodb, couchdb

分散式: HBase. Mongodb

Graph Store: neo4j

其他:handlersocketmysql


1.TT屬於被邊緣化的不成熟產品,還是別推薦的好.

2.目前成熟的開源nosql產品基本沒有,但不少產品潛力很大,閉源的倒是有一些比較成熟的.

3. 要使用一款nosql產品,一定要深入研究它的源碼.

可以研究下mongodb,redis,

優缺點需要自己靠自己實踐得出結論.今天的缺點可能明天就不是缺點了.


昨天MongoDB上市,恭喜,恭喜~ 給行業帶來了一針興奮劑。再次也順便聊兩句。MongoDB的產品和市場發展可以進入MBA教程,至始至終圍繞開發服務,其易用性和開發友好度都是非常贊的。

每個產品和他的出發點以及種子用戶有關,MongoDB開始階段就是為了開發而存在了,Collection對應Object,serialization是那麼的容易,對於開發迭代非常友好。

問題是其對於資料庫的理解和發展一直都有些問題,ACID,事務,SQL都不支持,分散式能力也不好,MapReduce又是延續了25年的技術,不支持索引。這些都造成MongoDB不受大企業的待見。這從MongoDB的營收和利潤就能看出來。

所以分散式資料庫還是有更大的發展機會。


mongodb: 用的人多, 社區大, 文檔全, 速度快, 有一些大公司在用,比較成熟.

couchdb: erlang開發的,並發性好, apache的產品,值得信賴.

tokyotyrant: 一個字,快.其它的沒什麼可說的.


mongodb不錯,具體可以這裡看看介紹: http://t.cn/z0efauW


http://docs.basho.com/riak/latest/theory/comparisons/couchbase/


我一直都很想說,雖然我覺得mongodb是那些nosql裡面看起來最靠譜的,但是由於他跟別人一樣不支持transaction,害我需要自己在伺服器上寫一堆service來自己實現一致性的事情。分散式程序要保持一致性那實在是不容易啊,結果mongodb最後就淪落為一個簡單的key value storage了。


推薦閱讀:

Redis 在 SNS 類應用中的最佳實踐有哪些?
為什麼 Cassandra 的寫速度比 MySQL 快?
如何評價SequoiaDB巨杉資料庫?
2000年之後資料庫的發展歷史怎樣?
有哪些分散式資料庫書籍或論文比較好?

TAG:NoSQL |