為什么需要選用NoSQL?
關(guān)系型數(shù)據(jù)庫已經(jīng)成為計(jì)算機(jī)文化的一部分,因其很多優(yōu)點(diǎn):
獲取持久化數(shù)據(jù)
可以將數(shù)據(jù)持久化到磁盤,并且很容易訪問到其中一小塊數(shù)據(jù)。
并發(fā)
關(guān)系型數(shù)據(jù)庫中有“事務(wù)”的概念,有效保障了多個程序訪問同一份數(shù)據(jù)時的一致性,事務(wù)的ACID(原子性、一致性、隔離性、持久性)特性相信大家都了熟于心了。
集成
不同開發(fā)團(tuán)隊(duì),不同平臺,不同語言的應(yīng)用程序可以共享同一份數(shù)據(jù)
標(biāo)準(zhǔn)的關(guān)系模型
之所以能夠很方便地達(dá)到上述目的,是因?yàn)樘峁┝私鯓?biāo)準(zhǔn)的、統(tǒng)一的關(guān)系模型
但是兩個原因使得關(guān)系型數(shù)據(jù)庫顯得力不從心:
阻抗失諧
內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)和關(guān)系模型相差甚遠(yuǎn),這就是所謂的“阻抗失諧(impedance mismatch)”。像“嵌套記錄”、“列表”等內(nèi)存結(jié)構(gòu)需要先轉(zhuǎn)換為“關(guān)系”和“元組”才能進(jìn)行存儲。
蜂擁而來的集群
隨著網(wǎng)絡(luò)規(guī)模急劇增加,硬件計(jì)算資源“橫向拓展”已經(jīng)成為必然,集群已經(jīng)成為趨勢,然而關(guān)系型數(shù)據(jù)庫并不是設(shè)計(jì)給集群用的,要么采用“共享磁盤子系統(tǒng)”來支撐集群上的文件系統(tǒng)(磁盤會成為瓶頸),要么按照邏輯對數(shù)據(jù)庫進(jìn)行分片,這樣雖然能夠?qū)⒇?fù)載分散到多個服務(wù)器,但是應(yīng)用程序必須控制所有分片,而且事務(wù)、一致性等無法跨越分片進(jìn)行。
至此,NoSQL誕生。
- 為集群而生
基本上可以認(rèn)為NoSQL是為集群而生的(少數(shù)的如圖數(shù)據(jù)庫不是這樣),當(dāng)待處理的數(shù)據(jù)量很大,或者以較快速度增長,同時對數(shù)據(jù)訪問效率要求很高,考慮NoSQL。
- 阻抗失諧
記住在集群上處理“大數(shù)據(jù)”并不是NoSQL***的原因,阻抗失諧也是另一大關(guān)鍵因素,NoSQL數(shù)據(jù)庫中沒有傳統(tǒng)關(guān)系型數(shù)據(jù)庫中的“模式”的概念,無需事先定義好數(shù)據(jù)存儲模型,可以隨意添加字段,非常適合于處理不規(guī)則數(shù)據(jù)和自定義字段,當(dāng)希望以更加方便友好的數(shù)據(jù)交互方式來提高應(yīng)用程序開發(fā)效率時,考慮NoSQL。