MongoDB、Hbase、Redis等NoSQL優劣勢、應用場景
MongoDB、Hbase、Redis等NoSQL優劣勢、應用場景
資料來源:http://database.51cto.com/art/201808/582357.htm
NoSQL數據庫在整個數據庫領域的江湖地位已經不言而喻。在大數據時代,雖然RDBMS很優秀,但是面對快速增長的數據規模和日漸復雜的數據模型,RDBMS漸漸力不從心,無法應對很多數據庫處理任務,這時NoSQL憑藉易擴展、大數據量和高性能以及靈活的數據模型成功的在數據庫領域站穩了腳跟。
目前大家基本認同將NoSQL數據庫分為四大類:鍵值存儲數據庫,文檔型數據庫,列存儲數據庫和圖形數據庫,其中每一種類型的數據庫都能夠解決關係型數據不能解決的問題。在實際應用中,NoSQL數據庫的分類界限其實沒有那麼明顯,往往會是多種類型的組合體。
MongoDB
MongoDB 是一個高性能,開源,無模式的文檔型數據庫,開發語言是C++。它在許多場景下可用於替代統的關係型數據庫或鍵/值存儲方式。
1.MongoDB特點
●所用語言:C++
●特點:保留了SQL一些友好的特性(查詢,索引)。
●使用許可: AGPL(發起者: Apache)
●協議: Custom, binary( BSON)
●Master/slave複製(支持自動錯誤恢復,使用sets 複製)
●內建分片機制
●支持javascript表達式查詢
●可在服務器端執行任意的javascript函數
●update-in-place支持比CouchDB更好
●在數據存儲時採用內存到文件映射
●對性能的關注超過對功能的要求
●建議最好打開日誌功能(參數–journal)
●在32位操作系統上,數據庫大小限制在約2.5Gb
●空數據庫大約佔192Mb
●採用GridFS存儲大數據或元數據(不是真正的文件系統)
2.MongoDB優點:
1)更高的寫負載,MongoDB擁有更高的插入速度。
2)處理很大的規模的單表,當數據表太大的時候可以很容易的分割表。
3)高可用性,設置MS不僅方便而且很快,MongoDB還可以快速、安全及自動化的實現節點(數據中心)故障轉移。
4)快速的查詢,MongoDB支持二維空間索引,比如管道,因此可以快速及精確的從指定位置獲取數據。MongoDB在啟動後會將數據庫中的數據以文件映射的方式加載到內存中。如果內存資源相當豐富的話,這將極大地提高數據庫的查詢速度。
5)非結構化數據的爆發增長,增加列在有些情況下可能鎖定整個數據庫,或者增加負載從而導致性能下降,由於MongoDB的弱數據結構模式,添加1個新字段不會對舊表格有任何影響, 整個過程會非常快速。
3.MongoDB缺點:
1)不支持事務。
2)MongoDB佔用空間過大。
3)MongoDB沒有成熟的維護工具。
4.MongoDB應用場景
1.)適用於實時的插入、更新與查詢的需求,並具備應用程序實時數據存儲所需的複制及高度伸縮性;
2) 非常適合文檔化格式的存儲及查詢;
3.)高伸縮性的場景:MongoDB 非常適合由數十或者數百台服務器組成的數據庫。
4.)對性能的關注超過對功能的要求。
——
HBase
HBase 是Apache Hadoop 中的一個子項目,屬於bigtable 的開源版本,所實現的語言為Java(故依賴Java SDK)。HBase 依託於Hadoop 的HDFS(分佈式文件系統)作為最基本存儲基礎單元。
1.HBase 特點:
●所用語言: Java
●特點:支持數十億行X上百萬列
●使用許可: Apache
●協議:HTTP/REST (支持Thrift,見編註4)
●在BigTable之後建模
●採用分佈式架構Map/reduce
●對實時查詢進行優化
●高性能Thrift網關
●通過在server端掃描及過濾實現對查詢操作預判
●支持XML, Protobuf, 和binary的HTTP
●Cascading, hive, and pig source and sink modules
●基於Jruby(JIRB)的shell
●對配置改變和較小的升級都會重新回滾
●不會出現單點故障
●堪比MySQL的隨機訪問性能
3. HBase 優點
1) 存儲容量大,一個表可以容納上億行,上百萬列;
2)可通過版本進行檢索,能搜到所需的歷史版本數據;
3)負載高時,可通過簡單的添加機器來實現水平切分擴展,跟Hadoop的無縫集成保障了其數據可靠性(HDFS)和海量數據分析的高性能(MapReduce);
4)在第3點的基礎上可有效避免單點故障的發生。
4.HBase 缺點
1. 基於Java語言實現及Hadoop架構意味著其API更適用於Java項目;
2. node開發環境下所需依賴項較多、配置麻煩(或不知如何配置,如持久化配置),缺乏文檔;
3. 佔用內存很大,且鑑於建立在為批量分析而優化的HDFS上,導致讀取性能不高;
4. API相比其它NoSql 的相對笨拙。
5.HBase 適用場景
1)bigtable類型的數據存儲;
2)對數據有版本查詢需求;
3)應對超大數據量要求擴展簡單的需求。
——
Redis
Redis 是一個開源的使用ANSI C語言編寫、支持網絡、可基於內存亦可持久化的日誌型、Key-Value數據庫,並提供多種語言的API。目前由VMware主持開發工作。
1.Redis 特點:
●所用語言:C/C++
●特點:運行異常快
●使用許可: BSD
●協議:類Telnet
●有硬盤存儲支持的內存數據庫,
●但自2.0版本以後可以將數據交換到硬盤(注意, 2.4以後版本不支持該特性!)
●Master-slave複製(見編註3)
●雖然採用簡單數據或以鍵值索引的哈希表,但也支持複雜操作,例如ZREVRANGEBYSCORE。
●INCR & co (適合計算極限值或統計數據)
●支持sets(同時也支持union/diff/inter)
●支持列表(同時也支持隊列;阻塞式pop操作)
●支持哈希表(帶有多個域的對象)
●支持排序sets(高得分錶,適用於範圍查詢)
●Redis支持事務
●支持將數據設置成過期數據(類似快速緩衝區設計)
●Pub/Sub允許用戶實現消息機制
2. Redis 優勢
1)非常豐富的數據結構;
2)Redis提供了事務的功能,可以保證一串命令的原子性,中間不會被任何操作打斷;
3)數據存在內存中,讀寫非常的高速,可以達到10w/s的頻率。
3.Redis 缺點
1) Redis3.0後才出來官方的集群方案,但仍存在一些架構上的問題;
2)持久化功能體驗不佳——通過快照方法實現的話,需要每隔一段時間將整個數據庫的數據寫到磁盤上,代價非常高;而aof方法只追踪變化的數據,類似於mysql的binlog方法,但追加log可能過大,同時所有操作均要重新執行一遍,恢復速度慢;
3)由於是內存數據庫,所以,單台機器,存儲的數據量,跟機器本身的內存大小。雖然redis本身有key過期策略,但是還是需要提前預估和節約內存。如果內存增長過快,需要定期刪除數據。
4.Redis 應用場景:
最佳應用場景:適用於數據變化快且數據庫大小可遇見(適合內存容量)的應用程序。
例如:微博、數據分析、實時數據蒐集、實時通訊等。