當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的内部查詢文法 |