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