Nosql數據庫在面對大數據時代快速增加的數據規模和複雜的數據模型,憑藉易擴展、大數據量、高性能以及靈活的數據模型在數據庫領域站穩腳跟javascript
nosql種類 基本分爲 鍵值存儲數據庫 文檔型數據庫 列存儲數據庫 圖形數據庫 Redis MongoDB Hbase 不太瞭解 詳細總結 Hbase HBase 是Apache Hadoop 中的一個子項目,屬於bigtable 的開源版本,所實現的語言爲Java(故依賴 Java SDK)。HBase 依託於 Hadoop 的 HDFS(分佈式文件系統)做爲最基本存儲基礎單元。java
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的隨機訪問性能node
HBase 優勢 存儲容量大,一個表能夠容納上億行,上百萬列; 可經過版本進行檢索,能搜到所需的歷史版本數據; 負載高時,可經過簡單的添加機器來實現水平切分擴展,跟Hadoop的無縫集成保障了其數據可靠性(HDFS)和海量數據分析的高性能(MapReduce); 在第3點的基礎上可有效避免單點故障的發生。mysql
HBase 缺點 基於Java語言實現及Hadoop架構意味着其API更適用於Java項目; node開發環境下所需依賴項較多、配置麻煩(或不知如何配置,如持久化配置),缺少文檔; 佔用內存很大,且鑑於創建在爲批量分析而優化的HDFS上,致使讀取性能不高; API相比其它NoSql 的相對笨拙redis
HBase 適用場景 bigtable類型的數據存儲; 對數據有版本查詢需求; 應對超大數據量要求擴展簡單的需求。sql
Redis Redis 是一個開源的使用ANSI C語言編寫、支持網絡、可基於內存亦可持久化的日誌型、Key-Value數據庫,並提供多種語言的API。目前由VMware主持開發工做。shell
Redis 特色 所用語言:C/C++ 特色:運行異常快 使用許可: BSD 協議:類 Telnet 有硬盤存儲支持的內存數據庫, 能夠將數據交換到硬盤 Master-slave複製 雖然採用簡單數據或以鍵值索引的哈希表,但也支持複雜操做,例如 ZREVRANGEBYSCORE。 INCR & co (適合計算極限值或統計數據) 支持 sets(同時也支持 union/diff/inter) 支持列表(同時也支持隊列;阻塞式 pop操做) 支持哈希表(帶有多個域的對象) 支持排序 sets(高得分表,適用於範圍查詢) Redis支持事務 支持將數據設置成過時數據(相似快速緩衝區設計) Pub/Sub容許用戶實現消息機制數據庫
Redis 優點 很是豐富的數據結構; Redis提供了事務的功能,能夠保證一串 命令的原子性,中間不會被任何操做打斷; 數據存在內存中,讀寫很是的高速,能夠達到10w/s的頻率。安全
Redis 缺點 Redis3.0後纔出來官方的集羣方案,但仍存在一些架構上的問題; 持久化功能體驗不佳——經過快照方法實現的話,須要每隔一段時間將整個數據庫的數據寫到磁盤上,代價很是高;而aof方法只追蹤變化的數據,相似於mysql的binlog方法,但追加log可能過大,同時全部操做均要從新執行一遍,恢復速度慢; 因爲是內存數據庫,因此,單臺機器,存儲的數據量,跟機器自己的內存大小。雖然redis自己有key過時策略,可是仍是須要提早預估和節約內存。若是內存增加過快,須要按期刪除數據。ruby
Redis 應用場景 最佳應用場景:適用於數據變化快且數據庫大小可碰見(適合內存容量)的應用程序。 例如:微博、數據分析、實時數據蒐集、實時通信等。
MongoDB MongoDB 是一個高性能,開源,無模式的文檔型數據庫,開發語言是C++。它在許多場景下可用於替代統的關係型數據庫或鍵/值存儲方式。
MongoDB特色 所用語言:C++ 特色:保留了SQL一些友好的特性(查詢,索引)。 使用許可: AGPL(發起者: Apache) 協議: Custom, binary( BSON) Master/slave複製(支持自動錯誤恢復,使用 sets 複製) 內建分片機制 支持 javascript表達式查詢 可在服務器端執行任意的 javascript函數 update-in-place支持比CouchDB更好 在數據存儲時採用內存到文件映射 對性能的關注超過對功能的要求 建議最好打開日誌功能(參數 --journal) 在32位操做系統上,數據庫大小限制在約2.5Gb 空數據庫大約佔 192Mb 採用 GridFS存儲大數據或元數據(不是真正的文件系統)
MongoDB優勢: 更高的寫負載,MongoDB擁有更高的插入速度。 處理很大的規模的單表,當數據表太大的時候能夠很容易的分割表。 高可用性,設置M-S不只方便並且很快,MongoDB還能夠快速、安全及自動化的實現節點 (數據中心)故障轉移。 快速的查詢,MongoDB支持二維空間索引,好比管道,所以能夠快速及精確的從指定位置 獲取數據。MongoDB在啓動後會將數據庫中的數據以文件映射的方式加載到內存中。若是內 存資源至關豐富的話,這將極大地提升數據庫的查詢速度。 非結構化數據的爆發增加,增長列在有些狀況下可能鎖定整個數據庫,或者增長負載從而 致使性能降低,因爲MongoDB的弱數據結構模式,添加1個新字段不會對舊錶格有任何影響, 整個過程會很是快速。
MongoDB缺點: 不支持事務。 MongoDB佔用空間過大 。 MongoDB沒有成熟的維護工具。
MongoDB應用場景 適用於實時的插入、更新與查詢的需求,並具有應用程序實時數據存儲所需的複製及高度伸縮性; 很是適合文檔化格式的存儲及查詢; 高伸縮性的場景:MongoDB 很是適合由數十或者數百臺服務器組成的數據庫。 對性能的關注超過對功能的要求。