天天看點

MongoDB vs Redis vs HBase

當SQL無法滿足我們的需求或者SQL已經不是必須的或者最佳的選擇時,就可以考慮NoSQL了。

MongoDB是文檔型資料庫,使用bson結構,可以更加靈活的處理嵌套結構的資料,是這三個裡最接近關系型資料庫的,有着非結構化、友善擴充字段、寫性能優于mysql等優點,萬物皆有利弊,MongoDB是記憶體性緩存内容,使其速度飛快;帶來記憶體占用率高,掉電丢資料等問題,加上自身代碼還有很多bug造成不如老牌關系型資料庫穩定,特别是主從等分布式環境下,其設計也帶來諸多問題。

Redis是K-V型資料庫,目标是為了做高效的分布式緩存,資料一般不需要要實時落盤,不适合做存儲和分析。可以認為Redis是一個小而美的資料庫,主要用在key-valu的記憶體緩存,讀寫性能極佳,string, list、set、sorted set(zset)等幾種簡單的結構使其使用很簡單。緩存及使用簡單是Redis的定位,分布式redis的出現,讓redis更加廣泛的使用。

HBase是列式資料庫,BigTable的一種實作方式,目标是高效存儲大量資料,支援列壓縮,行事務,适合Schema-less的資料。定位非結構化的大資料,可伸縮性好,并不是完全高可用,底層依靠Hadoop提供的HDFS,使用時有一整套zookeeper,pig,hive的生态系統。Cassandra可以算是一個競争對手,但是Cassandra去中心化的自适應結構又跟HBase中心化的生态系統完全不同。

存儲類型 解決方案代表 特點
列存儲 Hbase, Cassandra, Hypertable 按列存儲,适應于資料庫壓縮,對一個或幾個字段進行查詢的效率很高
文檔存儲 MongoDB, CouchDB, Riak 保證海量資料存儲的同時,具有良好的查詢性能。用類Json格式進行存儲
key-value存儲 Dynamo, Redis, Tokyo Cabinet, MemcacheDB 具有極高的并發讀寫性能,通過key迅速查到value,但隻能通過可以查詢
圖資料庫 Neo4j, HyperGraphDB 圖形關系的最佳存儲模式
對象資料庫 db4o, Versant 類似面向對象語言的文法操作資料庫,通過對象的方式存儲資料
XML資料庫 Berkerey DB XML, BaseX 高效存儲XML資料,并支援XML的内部查詢文法

繼續閱讀