談談你對NoSQL的理解
1.什么是NoSQL?
NoSQL呢常見的解釋有Non-Relational SQL或者Not Only SQL,不過Not Only SQL被更多人接受,一般泛指非關系型數據庫。它和關系型數據庫不同的是,不保證關系數據的ACID特性。
隨著互聯網的發展,NoSQL數據庫的產生就是為了解決超大規模和高并發系統中多重數據種類帶來的挑戰,特別是大數據應用的難題。目前具有代表性的NoSQL數據庫有Redis、HBase、ES、MongoDB等等。
NoSQL非常適合以下幾個場景:
- 數據模型比較簡單;
- 需要靈活性更強的數據庫;
- 對數據庫性能要求較高;
- 不需要高度的數據一致性;
- 對于給定Key,比較容易映射復雜值的環境。
2.NoSQL分類
通常來說,現在主流的NoSQL數據庫可以分為四大類:K-V鍵值數據庫、列存儲數據庫、文檔數據庫和圖形數據庫。
首先來看,K-V鍵值數據庫,主要應用于內容緩存、處理大量數據的高負載訪問,也可以用于記錄系統日志。比較有代表性的產品有Redis、Memcached等等。
其次是,列存儲數據庫,主要應用于布式數據的儲存與管理,分布式可擴展性強,比較有代表性的產品有HBase、HadoopDB、BigTable等等。
然后就是,文檔數據庫,主要應用于管理半結構化數據或者面向文檔的數據,比較有代表性的產品有MongoDB,ES等等,當然,ES不僅僅只是數據庫,它還是一個分布式搜索引擎,是基于Lucene來開發的,現在已經發展成為一個自有生態Elastic Stack。
最后就是,圖形數據庫,主要應用于復雜、互連接但又低結構化的圖結構場合,可以用來構建數據關系圖譜,Neo4J、InfoGrid、GraphDB等等。
下面我把四種分類的NoSQL數據庫整理成了一個表格,并總結了它們的優缺點。
3、主流NoSQL對比
對于NoSQL數據庫對互聯網開發的重要性就不多說了,在互聯網分布式開發場景中,我認為掌握Redis、HBase、Elastic、MongoDB就能滿足絕大部分需求。
如果對數據的讀寫要求極高,并且數據規模不大,也不需要長期存儲,那就選Redis;
如果數據規模較大,對數據的讀性能要求很高,數據表的結構需要經常變,有時還需要做一些聚合查詢,那就選MongoDB;
如果要構造一個搜索引擎或者要完成一個高大上的數據可視化平臺,并且數據本身也具有分析價值,就選ES;
如果你要存儲海量數據,而且還不能預估數據規模將來會增長多么大,那么選HBase。
這里我也整理了一種表格,大家可以保存一下:
最后,再給大家來個更加形象的對比:
Redis就相當于開戰斗機,MongoDB就相當于坐高鐵,HBase就相當于航母,ES那就是帝國鐵騎,山地裝甲機器人。