MongoDB、ElasitcSearch、redis、HBase是現今最火的四款NoSQL數據庫產品。在實際的開發中,這四種數據庫有什么區別?我到底該選哪個?想必這是很多互聯網開發都遇到過的難題。下面就給大家總結下這四種數據庫產品的特點和應用場景,希望能夠幫助你更深刻的理解這四種數據庫的特點,好幫助你作出正確的數據庫選擇。
一、Redis

Redis的優點:
- 讀寫性能優異;
- 支持數據持久化,支持AOF和RDB兩種持久化方式;
- 支持主從復制,主機會自動將數據同步到從機,可以進行讀寫分;
- 數據結構豐富:除了支持string類型的value外還支持string、hash、set、sortedset、list等數據結構。
Redis的局限性:
- Redis只能使用單線程,性能受限于CPU性能,故單實例CPU最高才可能達到5-6wQPS每秒(取決于數據結構,數據大小以及服務器硬件性能,日常環境中QPS高峰大約在1-2w左右)。
- 支持簡單的事務需求,但業界使用場景很少,并不成熟,既是優點也是缺點。
- Redis在String類型上會消耗較多內存,可以使用dict(hash表)壓縮存儲以降低內存耗用。
二、MongoDB

MongoDB的優點:
- 無模式;
- 查詢與索引方式靈活,是最像SQL的Nosql;
- 支持復制集、主備、互為主備、自動分片等特性。
Mongodb的缺點:
- 在集群分片中的數據分布不均勻;
- 單機可靠性比較差;
- 大數據量持續插入,寫入性能有較大波動;
- 磁盤空間占用比較大。
三、HBase

HBase 優點:
- 存儲容量大,一個表可以容納上億行,上百萬列;
- 可通過版本進行檢索,能搜到所需的歷史版本數據;
- 負載高時,可通過簡單的添加機器來實現水平切分擴展,跟Hadoop的無縫集成保障了其數據可靠性(HDFS)和海量數據分析的高性能(MapReduce分布式計算系統);
- 可有效避免單點故障的發生。
HBase 缺點:
- 基于JAVA語言實現及Hadoop架構意味著其API更適用于Java項目;
- node開發環境下所需依賴項較多、配置麻煩(或不知如何配置,如持久化配置),缺乏文檔;
- 占用內存很大,且鑒于建立在為批量分析而優化的HDFS上,導致讀取性能不高;
- API相比其它 NoSql 的相對笨拙。
四、ElasticSearch

ElasticSearch的優點:
- 橫向可擴展性: 作為大型分布式集群,很容易就能擴展新的服務器到ES集群中;也可運行在單機上作為輕量級搜索引擎使用。
- 更豐富的功能:與傳統關系型數據庫相比,ES提供了全文檢索、同義詞處理、相關度排名、復雜數據分析、海量數據的近實時處理等功能。
- 分片機制提供更好地分布性: 同一個索引被分為多個分片(Shard),利用分而治之的思想提升處理效率。
- 高可用: 提供副本(Replica)機制,一個分片可以設置多個副本,即使在某些服務器宕機后,集群仍能正常工作。
- 開箱即用: 提供簡單易用的 API,服務的搭建、部署和使用都很容易操作。
ElasticSearch 的缺點:
- 最明顯的就是字段類型無法修改、在需要添加新數據與新字段的時候,如果elasticSearch進行搜索是可能需要重新修改格式。之前的數據需要重新同步,對數據的管理有很多困難。
- 寫入性能較低和高硬件資源消耗
總結:
MongoDB、ElasticSearch、Redis、HBase,以上四種數據庫是當今NoSQL中最火爆的幾款,掌握了它們,你基本就能HOLD住互聯網開發中的絕大多數數據存儲需求。這里還想強調的一點是,如同買衣服一樣,沒有最好的數據庫,只有最適合你的應用場景的數據庫,因此選用一款數據庫前一定要想清楚自己的應用場景是否合適。再給大家總結下這些數據庫的適用場景:
- 如果你對數據的讀寫要求極高,并且你的數據規模不大,也不需要長期存儲,選redis;
- 如果你的數據規模較大,對數據的讀性能要求很高,數據表的結構需要經常變,有時還需要做一些聚合查詢,選MongoDB;
- 如果你需要構造一個搜索引擎或者你想搞一個看著高大上的數據可視化平臺,并且你的數據有一定的分析價值或者你的老板是土豪,選ElasticSearch;
- 如果你需要存儲海量數據,連你自己都不知道你的數據規模將來會增長多么大,比如大型電商(京東、天貓)的歷史訂單,每天都產生千萬級量,那么就選HBase。
四種NOSQL對比圖如下所示:
