天天看點

大資料管理系統:NoSQL資料庫前世今生

文章講的是<b>大資料管理系統:NoSQL資料庫前世今生</b>,NoSQL一詞最早出現于1998年,它是Carlo Strozzi開發的一個輕量、開源、不提供SQL功能的關系型資料庫(他認為,由于NoSQL悖離傳統關系資料庫模型,是以,它應該有一個全新的名字,比如“NoREL”或與之類似的名字)。

  2009年,Last.fm的Johan Oskarsson發起了一次關于分布式開源資料庫的讨論,來自Rackspace的Eric Evans再次提出了NoSQL的概念,這時的NoSQL主要指非關系型、分布式、不提供ACID的資料庫設計模式。

  2009年在亞特蘭大舉行的“no:sql(east)”讨論會是一個裡程碑,其口号是"select fun, profit from real_world where relational=false;"。是以,對NoSQL最普遍的解釋是“非關系型的”,強調鍵值存儲和文檔資料庫的優點,而不是單純地反對關系型資料庫。

  傳統關系型資料庫在處理資料密集型應用方面顯得力不從心,主要表現在靈活性差、擴充性差、性能差等方面。最近出現的一些存儲系統摒棄了傳統關系型資料庫管理系統的設計思想,轉而采用不同的解決方案來滿足擴充性方面的需求。這些沒有固定資料模式并且可以水準擴充的系統現在統稱為NoSQL(有些人認為稱為NoREL更為合理),這裡的NoSQL指的是“Not Only SQL”,即對關系型SQL資料系統的補充。NoSQL系統普遍采用的一些技術有:

  <b>·簡單資料模型。</b>不同于分布式資料庫,大多數NoSQL系統采用更加簡單的資料模型,這種資料模型中,每個記錄擁有唯一的鍵,而且系統隻需支援單記錄級别的原子性,不支援外鍵和跨記錄的關系。這種一次操作擷取單個記錄的限制極大地增強了系統的可擴充性,而且資料操作就可以在單台機器中執行,沒有分布式事務的開銷。

  <b>·中繼資料和應用資料的分離。</b>NoSQL資料管理系統需要維護兩種資料:中繼資料和應用資料。中繼資料是用于系統管理的,如資料分區到叢集中節點和副本的映射資料。應用資料就是使用者存儲在系統中的商業資料。系統之是以将這兩類資料分開是因為它們有着不同的一緻性要求。若要系統正常運轉,中繼資料必須是一緻且實時的,而應用資料的一緻性需求則因應用場合而異。是以,為了達到可擴充性,NoSQL系統在管理兩類資料上采用不同的政策。還有一些NoSQL系統沒有中繼資料,它們通過其他方式解決資料和節點的映射問題。

  <b>·弱一緻性。</b>NoSQL系統通過複制應用資料來達到一緻性。這種設計使得更新資料時副本同步的開銷很大,為了減少這種同步開銷,弱一緻性模型如最終一緻性和時間軸一緻性得到廣泛應用。

  通過這些技術,NoSQL能夠很好地應對海量資料的挑戰。相對于關系型資料庫,NoSQL資料存儲管理系統的主要優勢有:

  <b>·避免不必要的複雜性。</b>關系型資料庫提供各種各樣的特性和強一緻性,但是許多特性隻能在某些特定的應用中使用,大部分功能很少被使用。NoSQL系統則提供較少的功能來提高性能。

  <b>·高吞吐量。</b>一些NoSQL資料系統的吞吐量比傳統關系資料管理系統要高很多,如Google使用MapReduce每天可處理20PB存儲在Bigtable中的資料。

  <b>·高水準擴充能力和低端硬體叢集。</b>NoSQL資料系統能夠很好地進行水準擴充,與關系型資料庫叢集方法不同,這種擴充不需要很大的代價。而基于低端硬體的設計理念為采用NoSQL資料系統的使用者節省了很多硬體上的開銷。

  <b>·避免了昂貴的對象-關系映射。</b>許多NoSQL系統能夠存儲資料對象,這就避免了資料庫中關系模型和程式中對象模型互相轉化的代價。

  NoSQL向人們提供了高效便宜的資料管理方案,許多公司不再使用Oracle甚至MySQL,他們借鑒Amzon的Dynamo和Google的Bigtable的主要思想建立自己的海量資料存儲管理系統,一些系統也開始開源,如Facebook将其開發的Cassandra捐給了Apache軟體基金會。

  雖然NoSQL資料庫提供了高擴充性和靈活性,但是它也有自己的缺點,主要有:

  <b>·資料模型和查詢語言沒有經過數學驗證。</b>SQL這種基于關系代數和關系演算的查詢結構有着堅實的數學保證,即使一個結構化的查詢本身很複雜,但是它能夠擷取滿足條件的所有資料。由于NoSQL系統都沒有使用SQL,而使用的一些模型還未有完善的數學基礎。這也是NoSQL系統較為混亂的主要原因之一。

  <b>·不支援ACID特性。</b>這為NoSQL帶來優勢的同時也是其缺點,畢竟事務在很多場合下還是需要的,ACID特性使系統在中斷的情況下也能夠保證線上事務能夠準确執行。

  <b>·功能簡單。</b>大多數NoSQL系統提供的功能都比較簡單,這就增加了應用層的負擔。例如如果在應用層實作ACID特性,那麼編寫代碼的程式員一定極其痛苦。

 <b> ·沒有統一的查詢模型。</b>NoSQL系統一般提供不同查詢模型,這一定程度上增加了開發者的負擔。

  <b>作者簡介</b>

  陸嘉恒,中國人民大學副教授,新加坡國立大學博士,美國加利福尼亞大學爾灣分校(University of California, Irvine) 博士後。

作者:陸嘉恒

來源:IT168

原文連結:大資料管理系統:NoSQL資料庫前世今生