NoSQL數據庫在整個數據庫領域的江湖地位已經不言而喻。在大數據時代,雖然RDBMS很優秀,可是面對快速增加的數據規模和日漸複雜的數據模型,RDBMS漸漸力不從心,沒法應對不少數據庫處理任務,這時NoSQL憑藉易擴展、大數據量和高性能以及靈活的數據模型成功的在數據庫領域站穩了腳跟。javascript
目前你們基本認同將NoSQL數據庫分爲四大類:鍵值存儲數據庫,文檔型數據庫,列存儲數據庫和圖形數據庫,其中每一種類型的數據庫都可以解決關係型數據不能解決的問題。在實際應用中,NoSQL數據庫的分類界限其實沒有那麼明顯,每每會是多種類型的組合體。java
主流nosql的詳解:MongoDB、Hbase、Redisnode
MongoDB 是一個高性能,開源,無模式的文檔型數據庫,開發語言是C++。它在許多場景下可用於替代統的關係型數據庫或鍵/值存儲方式。mysql
1)更高的寫負載,MongoDB擁有更高的插入速度。程序員
2)處理很大的規模的單表,當數據表太大的時候能夠很容易的分割表。面試
3)高可用性,設置M-S不只方便並且很快,MongoDB還能夠快速、安全及自動化的實現節點 (數據中心)故障轉移。redis
4)快速的查詢,MongoDB支持二維空間索引,好比管道,所以能夠快速及精確的從指定位置 獲取數據。MongoDB在啓動後會將數據庫中的數據以文件映射的方式加載到內存中。若是內 存資源至關豐富的話,這將極大地提升數據庫的查詢速度。sql
5)非結構化數據的爆發增加,增長列在有些狀況下可能鎖定整個數據庫,或者增長負載從而 致使性能降低,因爲MongoDB的弱數據結構模式,添加1個新字段不會對舊錶格有任何影響, 整個過程會很是快速。shell
1)不支持事務。數據庫
2)MongoDB佔用空間過大 。
3)MongoDB沒有成熟的維護工具。
4.MongoDB應用場景
1.)適用於實時的插入、更新與查詢的需求,並具有應用程序實時數據存儲所需的複製及高度伸縮性;
2) 很是適合文檔化格式的存儲及查詢;
3.)高伸縮性的場景:MongoDB 很是適合由數十或者數百臺服務器組成的數據庫。
4.)對性能的關注超過對功能的要求。
HBase 是 Apache Hadoop 中的一個子項目,屬於 bigtable 的開源版本,所實現的語言爲Java(故依賴 Java SDK)。HBase 依託於 Hadoop 的 HDFS(分佈式文件系統)做爲最基本存儲基礎單元。
1.HBase 特色:
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 是一個開源的使用ANSI C語言編寫、支持網絡、可基於內存亦可持久化的日誌型、Key-Value數據庫,並提供多種語言的API。目前由VMware主持開發工做。
1.Redis 特色:
2. Redis 優點
1)很是豐富的數據結構;
2.)Redis提供了事務的功能,能夠保證一串 命令的原子性,中間不會被任何操做打斷;
3.)數據存在內存中,讀寫很是的高速,能夠達到10w/s的頻率。
3.Redis 缺點
1) Redis3.0後纔出來官方的集羣方案,但仍存在一些架構上的問題;
2.)持久化功能體驗不佳——經過快照方法實現的話,須要每隔一段時間將整個數據庫的數據寫到磁盤上,代價很是高;而aof方法只追蹤變化的數據,相似於mysql的binlog方法,但追加log可能過大,同時全部操做均要從新執行一遍,恢復速度慢;
3)因爲是內存數據庫,因此,單臺機器,存儲的數據量,跟機器自己的內存大小。雖然redis自己有key過時策略,可是仍是須要提早預估和節約內存。若是內存增加過快,須要按期刪除數據。
4.Redis 應用場景:
最佳應用場景:適用於數據變化快且數據庫大小可碰見(適合內存容量)的應用程序。
例如:微博、數據分析、實時數據蒐集、實時通信等。