MongoDB、Hbase、Redis等NoSQL優劣勢、應用場景
NoSQL的四大種類
NoSQL資料庫在整個資料庫領域的江湖地位已經不言而喻。在大資料時代,雖然RDBMS很優秀,但是面對快速增長的資料規模和日漸複雜的資料模型,RDBMS漸漸力不從心,無法應對很多資料庫處理任務,這時NoSQL憑藉易擴充套件、大資料量和高效能以及靈活的資料模型成功的在資料庫領域站穩了腳跟。
目前大家基本認同將NoSQL資料庫分為四大類:鍵值儲存資料庫,文件型資料庫,列儲存資料庫和圖形資料庫,其中每一種型別的資料庫都能夠解決關係型資料不能解決的問題。在實際應用中,NoSQL資料庫的分類界限其實沒有那麼明顯,往往會是多種型別的組合體。
主流nosql的詳解:MongoDB、Hbase、Redis
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)高可用性,設定M-S不僅方便而且很快,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 應用場景:
最佳應用場景:適用於資料變化快且資料庫大小可遇見(適合記憶體容量)的應用程式。
例如:微博、資料分析、實時資料蒐集、實時通訊等。
參考
相關文章
- Redis的應用場景及優缺點Redis
- 什麼場景應該用MongoDB ?MongoDB
- Redis 應用場景彙總Redis
- Redis常見應用場景Redis
- Hbase和Hive的特點,和應用場景Hive
- 單體應用、SOA、微服務,優劣勢都有哪些?微服務
- Redis詳解以及Redis的應用場景Redis
- Redis系列之(二)——應用場景Redis
- redis應用場景及例項Redis
- redis持久化rdb和aof之間的優勢劣勢Redis持久化
- 人臉識別技術的優勢和主要應用場景
- Kubernetes的優勢、適應場景及其特點
- redis實用場景Redis
- Redis最常見的5種應用場景Redis
- Redis應用場景及快取問題Redis快取
- redis資料型別及應用場景Redis資料型別
- 面向NLP場景應用的智慧輔助建模(五)特色與優勢
- Nosql——Redis配置與優化SQLRedis優化
- 建立索引的優劣勢索引
- java、.net、php等語言開發商城系統優劣勢JavaPHP
- Redis的資料結構及應用場景Redis資料結構
- Redis五種資料型別應用場景Redis資料型別
- Redis中7種集合型別應用場景Redis型別
- Redis的資料結構與應用場景Redis資料結構
- Nosql 資料庫 MemCache、Redis、MongoDB 的區別SQL資料庫RedisMongoDB
- 美顏SDK有哪些優勢?可以應用到哪些場景?
- NoSQL之Redis的配置優化SQLRedis優化
- 雲審計與大資料審計:區別、優勢與應用場景大資料
- redis的場景應用多角度簡單分析Redis
- 【觸想智慧】工控一體機在船舶航運上應用的優勢和應用場景分析
- Node.js 優缺點以及應用場景Node.js
- 區塊鏈Dapp的劣勢和優勢區塊鏈APP
- JVM面試問題系列:7種JVM垃圾收集器特點,優劣勢、及使用場景!JVM面試
- 高頻寫入redis場景優化Redis優化
- 雲原生資料庫 TDSQL-C 產品概述、產品優勢、應用場景資料庫SQL
- 走進智慧邊緣小站IES,從其應用場景瞭解產品優勢
- 3.4 應用場景
- DDD應用場景