- 大數據挑戰與NoSQL數據庫技術
- 陸嘉恒編著
- 4901字
- 2018-12-28 11:17:09
1.3 大數據的存儲和管理
任何機器都會有物理上的限制:內存容量、硬盤容量、處理器速度等等,我們需要在這些硬件的限制和性能之間做出取舍,比如內存的讀取速度比硬盤快得多,因此內存數據庫比硬盤數據庫性能好,但是內存為2GB的機器不可能將大小為100GB的數據全部放入內存中,也許內存大小為128GB的機器能夠做到,但是數據增加到200GB時就無能為力了。
數據不斷增長造成單機系統性能不斷下降,即使不斷提升硬件配置也難以跟上數據的增長速度。然而,當今主流的計算機硬件比較便宜而且可以擴展,現在購置八臺8內核、128GB內存的機器比購置一臺64內核、TB級別內存的服務器劃算得多,而且還可以增加或減少機器來應對將來的變化。這種分布式架構策略對于海量數據來說是比較適合的,因此,許多海量數據系統選擇將數據放在多個機器中,但也帶來了許多單機系統不曾有的問題。
下面我們介紹大數據存儲和管理發展過程中出現的四類大數據存儲和管理數據庫系統。
1.3.1 并行數據庫
并行數據庫[1]是指那些在無共享的體系結構中進行數據操作的數據庫系統。這些系統大部分采用了關系數據模型并且支持SQL語句查詢,但為了能夠并行執行SQL的查詢操作,系統中采用了兩個關鍵技術:關系表的水平劃分和SQL查詢的分區執行。
水平劃分的主要思想就是根據某種策略將關系表中的元組分布到集群中的不同節點上,這些節點上的表結構是一樣的,這樣就可以對元組并行處理。現有的分區策略有哈希分區、范圍分區、循環分區等。例如,哈希分區策略是將表T中的元組分布到n個節點上,可以使用統一的哈希算法對元組中的某個或某幾個屬性進行哈希,如hash(T.attribute1) mod n,然后根據哈希值將元組放置到不同的節點上。
在分區存儲的表中處理SQL查詢需要使用基于分區的執行策略,如獲取表T中某一數值范圍內的元組,系統首先為整個表T生成總的執行計劃P,然后將P拆分成n個子計劃{P1,…,Pn},子計劃Pi在節點ni上獨立執行,最后每個節點將生成的中間結果發送到某一選定的節點上,該節點對中間結果進行聚集產生最終的結果。
并行數據庫系統的目標是高性能和高可用性,通過多個節點并行執行數據庫任務,提高整個數據庫系統的性能和可用性。最近一些年不斷涌現一些提高系統性能的新技術,如索引、壓縮、實體化視圖、結果緩存、I/O共享等,這些技術都比較成熟且經得起時間的考驗。與一些早期的系統如Teradata必須部署在專有硬件上不同,最近開發的系統如Aster、Vertica等可以部署在普通的商業機器上,這些數據庫系統可以稱得上準云系統。
并行數據庫系統的主要缺點就是沒有較好的彈性,而這種特性對中小型企業和初創企業是有利的。人們在對并行數據庫進行設計和優化的時候認為集群中節點的數量是固定的,若需要對集群進行擴展和收縮,則必須為數據轉移過程制訂周全的計劃。這種數據轉移的代價是昂貴的,并且會導致系統在某段時間內不可訪問,而這種較差的靈活性直接影響到并行數據庫的彈性以及現用現付商業模式的實用性。
并行數據庫的另一個問題就是系統的容錯性較差,過去人們認為節點故障是個特例,并不經常出現,因此系統只提供事務級別的容錯功能,如果在查詢過程中節點發生故障,那么整個查詢都要從頭開始重新執行。這種重啟任務的策略使得并行數據庫難以在擁有數以千個節點的集群上處理較長的查詢,因為在這類集群中節點的故障經常發生。基于這種分析,并行數據庫只適合于資源需求相對固定的應用程序。不管怎樣,并行數據庫的許多設計原則為其他海量數據系統的設計和優化提供了比較好的借鑒。
1.3.2 NoSQL數據管理系統
NoSQL[5]一詞最早出現于1998年,它是Carlo Strozzi開發的一個輕量、開源、不提供SQL功能的關系型數據庫(他認為,由于NoSQL悖離傳統關系數據庫模型,因此,它應該有一個全新的名字,比如“NoREL”或與之類似的名字[6])。
2009年,Last.fm的Johan Oskarsson發起了一次關于分布式開源數據庫的討論[7],來自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系統普遍采用的一些技術有:
● 簡單數據模型。不同于分布式數據庫,大多數NoSQL系統采用更加簡單的數據模型,這種數據模型中,每個記錄擁有唯一的鍵,而且系統只需支持單記錄級別的原子性,不支持外鍵和跨記錄的關系。這種一次操作獲取單個記錄的約束極大地增強了系統的可擴展性,而且數據操作就可以在單臺機器中執行,沒有分布式事務的開銷。
● 元數據和應用數據的分離。NoSQL數據管理系統需要維護兩種數據:元數據和應用數據。元數據是用于系統管理的,如數據分區到集群中節點和副本的映射數據。應用數據就是用戶存儲在系統中的商業數據。系統之所以將這兩類數據分開是因為它們有著不同的一致性要求。若要系統正常運轉,元數據必須是一致且實時的,而應用數據的一致性需求則因應用場合而異。因此,為了達到可擴展性,NoSQL系統在管理兩類數據上采用不同的策略。還有一些NoSQL系統沒有元數據,它們通過其他方式解決數據和節點的映射問題。
● 弱一致性。NoSQL系統通過復制應用數據來達到一致性。這種設計使得更新數據時副本同步的開銷很大,為了減少這種同步開銷,弱一致性模型如最終一致性和時間軸一致性得到廣泛應用。
通過這些技術,NoSQL能夠很好地應對海量數據的挑戰。相對于關系型數據庫,NoSQL數據存儲管理系統的主要優勢有:
● 避免不必要的復雜性。關系型數據庫提供各種各樣的特性和強一致性,但是許多特性只能在某些特定的應用中使用,大部分功能很少被使用。NoSQL系統則提供較少的功能來提高性能。
● 高吞吐量。一些NoSQL數據系統的吞吐量比傳統關系數據管理系統要高很多,如Google使用MapReduce每天可處理20PB存儲在Bigtable中的數據。
● 高水平擴展能力和低端硬件集群。NoSQL數據系統能夠很好地進行水平擴展,與關系型數據庫集群方法不同,這種擴展不需要很大的代價。而基于低端硬件的設計理念為采用NoSQL數據系統的用戶節省了很多硬件上的開銷。
● 避免了昂貴的對象-關系映射。許多NoSQL系統能夠存儲數據對象,這就避免了數據庫中關系模型和程序中對象模型相互轉化的代價。
NoSQL向人們提供了高效便宜的數據管理方案,許多公司不再使用Oracle甚至MySQL,他們借鑒Amzon的Dynamo和Google的Bigtable的主要思想建立自己的海量數據存儲管理系統,一些系統也開始開源,如Facebook將其開發的Cassandra捐給了Apache軟件基金會。
雖然NoSQL數據庫提供了高擴展性和靈活性,但是它也有自己的缺點,主要有:
● 數據模型和查詢語言沒有經過數學驗證。SQL這種基于關系代數和關系演算的查詢結構有著堅實的數學保證,即使一個結構化的查詢本身很復雜,但是它能夠獲取滿足條件的所有數據。由于NoSQL系統都沒有使用SQL,而使用的一些模型還未有完善的數學基礎。這也是NoSQL系統較為混亂的主要原因之一。
● 不支持ACID特性。這為NoSQL帶來優勢的同時也是其缺點,畢竟事務在很多場合下還是需要的,ACID特性使系統在中斷的情況下也能夠保證在線事務能夠準確執行。
● 功能簡單。大多數NoSQL系統提供的功能都比較簡單,這就增加了應用層的負擔。例如如果在應用層實現ACID特性,那么編寫代碼的程序員一定極其痛苦。
● 沒有統一的查詢模型。NoSQL系統一般提供不同查詢模型,這一定程度上增加了開發者的負擔。
1.3.3 NewSQL數據管理系統
人們曾普遍認為傳統數據庫支持ACID和SQL等特性限制了數據庫的擴展和處理海量數據的性能,因此嘗試通過犧牲這些特性來提升對海量數據的存儲管理能力,但是現在一些人則持有不同的觀念,他們認為并不是ACID和支持SQL的特性,而是其他的一些機制如鎖機制、日志機制、緩沖區管理等制約了系統的性能,只要優化這些技術,關系型數據庫系統在處理海量數據時仍能獲得很好的性能。
關系型數據庫處理事務時對性能影響較大、需要優化的因素有:
● 通信。應用程序通過ODBC或JDBC與DBMS進行通信是OLTP事務中的主要開銷。
● 日志。關系型數據庫事務中對數據的修改需要記錄到日志中,而日志則需要不斷寫到硬盤上來保證持久性,這種代價是昂貴的,而且降低了事務的性能。
● 鎖。事務中修改操作需要對數據進行加鎖,這就需要在鎖表中進行寫操作,造成了一定的開銷。
● 閂。關系型數據庫中一些數據結構,如B樹、鎖表、資源表等的共享影響了事務的性能。這些數據結構常常被多線程讀取,所以需要短期鎖即閂。
● 緩沖區管理。關系型數據將數據組織成固定大小的頁,內存中磁盤頁的緩沖管理會造成一定的開銷。
為了解決上面的問題,一些新的數據庫采用部分不同的設計,它取消了耗費資源的緩沖池,在內存中運行整個數據庫。它還擯棄了單線程服務的鎖機制,也通過使用冗余機器來實現復制和故障恢復,取代原有的昂貴的恢復操作。這種可擴展、高性能的SQL數據庫被稱為NewSQL,其中“New”用來表明與傳統關系型數據庫系統的區別,但是NewSQL也是很寬泛的概念。它首先由451集團在一份報告中提出,其主要包括兩類系統:擁有關系型數據庫產品和服務,并將關系模型的好處帶到分布式架構上;或者提高關系數據庫的性能,使之達到不用考慮水平擴展問題的程度。前一類NewSQL包括Clustrix、GenieDB、ScalArc、ScaleBase、NimbusDB,也包括帶有NDB的MySQL集群、Drizzle等。后一類NewSQL包括Tokutek、JustOne DB。還有一些“NewSQL即服務”,包括Amazon的關系數據庫服務、Microsoft的SQL Azure、FathomDB等。
當然,NewSQL和NoSQL也有交叉的地方,例如,RethinkDB可以看作NoSQL數據庫中鍵/值存儲的高速緩存系統,也可以當作NewSQL數據庫中MySQL的存儲引擎。現在許多NewSQL提供商使用自己的數據庫為沒有固定模式的數據提供存儲服務,同時一些NoSQL數據庫開始支持SQL查詢和ACID事務特性。
NewSQL能夠提供SQL數據庫的質量保證,也能提供NoSQL數據庫的可擴展性。VoltDB是NewSQL的實現之一,其開發公司的CTO宣稱,它們的系統使用NewSQL的方法處理事務的速度比傳統數據庫系統快45倍。VoltDB可以擴展到39個機器上,在300個CPU內核中每分鐘處理1600萬事務,其所需的機器數比Hadoop集群要少很多。
隨著NoSQL、NewSQL數據庫陣營的迅速崛起,當今數據庫系統“百花齊放”,現有系統達數百種之多,圖1-1將廣義的數據庫系統進行了分類。

圖1-1 數據庫系統的分類
圖1-1 中將數據庫分為關系型數據庫、非關系型數據庫以及數據庫緩存系統。其中,非關系型數據庫主要指的是NoSQL數據庫,分為:鍵值數據庫、列存數據庫、圖存數據庫以及文檔數據庫四大類。關系型數據庫包含了傳統關系數據庫系統以及NewSQL數據庫。
高容量、高分布式、高復雜性應用程序的需求迫使傳統數據庫不斷擴展自己的容量極限,這些驅動傳統關系型數據庫采用不同的數據管理技術的6個關鍵因素可以概括為“SPRAIN”,即:
● 可擴展性(Scalability)——硬件價格
● 高性能(Performance)——MySQL的性能瓶頸
● 弱一致性(Relaxed consistency)——CAP理論
● 敏捷性(Agility)——持久多樣性
● 復雜性(Intricacy)——海量數據
● 必然性(Necessity)——開源
1.3.4 云數據管理
云數據管理[4]指的是“數據庫即服務”,用戶無須在本機安裝數據庫管理軟件,也不需要搭建自己的數據管理集群,而只需要使用服務提供商提供的數據庫服務。比較著名的服務有Amazon提供的關系型數據庫服務RDS和非關系型數據庫服務SimpleDB。
云數據管理系統的優勢就是可以彈性地分配資源,用戶只需為所使用的資源付費即可。這使得用戶對資源的需求可以動態擴展或縮減。例如,需要對大小為1TB和100 GB的兩個數據集分別進行分析,若在彈性伸縮的模式下,我們可以在云中分配100個節點處理1TB的數據集,然后將集群縮減到10個節點來處理100 GB的數據集。假設數據處理系統是線性擴展的,那么兩個處理任務大約在相同的時間內完成。這樣,彈性伸縮的能力加上現用現付的商業模式會提供較高的性價比。
云數據管理系統的主要優勢有:
● 透明性。用戶無須考慮服務實現所使用的硬件和軟件,利用其提供的接口使用其服務即可。
● 可伸縮性。伸縮性是云系統提供的重要特性,用戶根據自己的需求申請各種資源即可,而且需求還可以動態變化。
● 高性價比。用戶無須購買自己的基礎設施和軟件,節約了硬件費用及軟件版權費用。
云數據管理系統也有不足的地方,如用戶隱私和數據安全問題、服務可靠性問題、服務質量保證問題等等。
- Hands-On Internet of Things with MQTT
- 智能傳感器技術與應用
- Learning Apache Spark 2
- 數據中心建設與管理指南
- Python Data Science Essentials
- PyTorch Deep Learning Hands-On
- 工業機器人應用案例集錦
- 激光選區熔化3D打印技術
- 從零開始學JavaScript
- Web璀璨:Silverlight應用技術完全指南
- EJB JPA數據庫持久層開發實踐詳解
- 分布式Java應用
- 人工智能基礎
- SolarWinds Server & Application Monitor:Deployment and Administration
- 網絡設備規劃、配置與管理大全(Cisco版)