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