如果你關註大數據科技動向,你對 NoSQL 一定不陌生,NoSQL 是一個分散式資料庫。在過去時間,數據存儲一直關係型資料庫天下,有著良好的控制併發操作、事務功能。雖然RDBMS很優秀,但是隨著時間的推移就出現了兩個關係資料庫解決不了的問題:快速增長的數據規模和日漸複雜的數據模型。結果,我們看到了 ...
如果你關註大數據科技動向,你對 NoSQL 一定不陌生,NoSQL 是一個分散式資料庫。在過去時間,數據存儲一直關係型資料庫天下,有著良好的控制併發操作、事務功能。雖然RDBMS很優秀,但是隨著時間的推移就出現了兩個關係資料庫解決不了的問題:快速增長的數據規模和日漸複雜的數據模型。結果,我們看到了 NoSQL 資料庫的興起。
一、關係資料庫不足
實際上,從 1979 年 Oracle 發佈了第一個版本,這些資料庫被設計為在單個伺服器上運行,並且越大越好。而且增加這些資料庫容量的唯一方法是升級伺服器處理器、記憶體和存儲,數據存儲代價不斷升高。隨著互聯網的數據呈指數級增長和 Web 應用程式的興起,數據模型日漸複雜,關係資料庫難以支撐,NoSQL 資料庫也由此孕育而生。在 2006 年谷歌發佈了 Bigtable 研究論文,在 2007 年亞馬遜發佈了 Dynamo 研究論文。而這些新的資料庫旨在滿足新一代企業要求:需要敏捷開發並支持任意規模運作。
二、敏捷開發
當今是以體驗為中心的數字經濟,企業如何保持競爭力,那麼必須進行創新。由於這項創新的核心是現代 Web、移動和物聯網應用程式的開發,因此開發人員必須高頻提供應用程式和服務。速度和敏捷性都至關重要,因為這些應用程式的發展速度遠遠超過 ERP 等傳統應用程式。而關係資料庫是卻不能很好滿足於它,因為它們的固定數據模型不能很好地支持敏捷開發。
敏捷開發的核心原則是適應不斷變化的應用程式需求:當需求發生變化時,數據模型也會發生變化,這是關係資料庫的難以剋服的問題,因為關係資料庫的模型是固定的,並預先定義好的。因此,當要更改數據模型,開發人員不得不修改當初設定好的資料庫結構,以適應新的需求。這會減慢或停止開發,不僅因為它是一個手動,耗時的過程,而且還會影響其他應用程式和服務。
相比之下,NoSQL 文檔 資料庫完全完美支持這點,因為它是無模式的,沒有強制定義數據必須建模。相反,它遵循應用程式和服務。使用 NoSQL,數據模型由應用程式模型定義。應用程式和服務將數據建模作為對象。
三、如何支持任意規模運作
為了支持以指數增長的用戶和數據 - 數百到數千到數百萬用戶,以及千兆位元組到數TB的數據操作,應用程式和服務不得不進行擴展以保持性能,並且必須有效地運行。
對於擴展關係資料庫而言,這是一個問題,例如,使用 Oracle ,使用 RAC 技術進行擴展就需要大量組件,昂貴且不完全可靠。因此,有效擴展和按需擴展的能力是一項挑戰。它會變得越來越昂貴,因為必須購買更大更強的伺服器以容納更多用戶和更多數據。此外,如果必須使資料庫離線以執行硬體升級,則可能導致停機。
然而,分散式 NoSQL 資料庫利用廉價硬體進行擴展, 只需添加更多伺服器即可添加更多資源。擴展能力使企業能夠通過以下方式更有效地擴展:
1、不需要為滿足部署而買相對稱的硬體
2、利用較便宜的硬體進行拓展;
3、按需擴展,無需停機。
四、NoSQL 常見存儲方式
NoSQL 常見有三種存儲方式:鍵值存儲、面向文檔的資料庫和麵向列的資料庫。接下來說明這幾種存儲方式以及資料庫代表。
鍵值存儲
代表:Redis、memcached
鍵值存儲是 NoSQL 最常見存儲方式,通過 key-value 形式保存數據,高速訪問數據。而且根據保存時效也分為臨時性、永久性和兩者兼備。
面向文檔的資料庫
代表:MongoDB、CouchDB
面向文檔的資料庫數據結構要求不是很嚴格,不定義表結構而且可以使用複雜的查詢條件
面向列的資料庫
代表:HBase
面向列的資料庫以列為單位進行存儲,這裡的列式存儲其實說的是列族存儲,它將數據表存儲為數據列而非行的形式。列族存儲優勢:快速查詢,易拓展,但功能相對局限。
五、NoSQL 對於事務的支持?
在這裡有一個誤區,由於分散式事務需要分散式協作,所以似乎必須在性能可擴展性和分散式事務支持之間進行權衡。
耶魯大學的一名副教授 Daniel Abadi 認為這個想法是錯的,可拓展的分散式系統也是可以實現事物。他提出了一個新的權衡策略,具體是在公平性、隔離性和吞吐量(FIT)三者之間進行取捨。
換句話說,有兩種方法構建出具備分散式事務吞吐量的可擴展系統:
1、放棄隔離性
當放棄隔離性,一個事物是不會跟其他事物有衝突,就無需等待協作就可以完成了。而且也有一類數據約束可以確保在弱隔離下正確性。
2、放棄公平性
通過設定分散式協作的順序最小化兩者之間的時間重疊,從而減輕二者之間的相互影響,在此公平下找到最合適時間進行協作。
六、小結
構建和運行這些大規模互動式應用程式創建了一組新的技術要求。新的技術架構需要比以往更加靈活,並且需要一種能夠適應前所未有的規模、速度和數據可變性的實時數據管理方法。關係資料庫無法滿足這些新要求,這就使得 NoSQL 逐漸流行起來。