云數據庫研究
云計算與云數據庫背景
云計算(cloud computing)是 IT 技術發展的最新趨勢,正受到業界和學術界的廣泛關注。云計算是在分布式處理、并行處理和網格計算等技術的基礎上發展起來的,是一種新興的共享基礎架構的方法。它可以自我維護和管理龐大的虛擬計算資源(包括計算服務器、存儲服務器、寬帶資源等等),從而提供各種 IT 服務。用戶在使用云計算提供的服務時按需付費,這不僅降低了使用門檻,也極大地節省了開銷。
隨著云計算技術的不斷升溫,它對各個技術領域的影響開始顯現,其中比較典型的包括數據庫領域。截止到 2011 年 6 月,傳統的數據庫廠商,比如 Oracle、Teradata、IBM、Microsoft 等,都已經推出了基于云計算環境的相關數據庫產品。原來沒有從事數據庫產品開發的知名大公司,比如 Amazon 和 Google 等,也發布了 SimpleDB 和 BigTable 等產品。
云數據庫概述
云數據庫是在 SaaS(software-as-a-service:軟件即服務)成為應用趨勢的大背景下發展起來的云計算技術,它極大地增強了數據庫的存儲能力,消除了人員、硬件、軟件的重復配置,讓軟、硬件升級變得更加容易,同時也虛擬化了許多后端功能。云數據庫具有高可擴展性、高可用性、采用多租形式和支持資源有效分發等特點。
如圖 1 1 1 所示,在云數據庫應用中,客戶端不需要了解云數據庫的底層細節,所有的底層硬件都已經被虛擬化,對客戶端而言是透明的。它就像在使用一個運行在單一服務器上的數據庫一樣,非常方便、容易,同時又可以獲得理論上近乎無限的存儲和處理能力。
圖 1????云數據庫應用示意圖
云數據庫與傳統分布式數據庫
分布式數據庫是計算機網絡環境中各場地或節點上的數據庫的邏輯集合。邏輯上它們屬于同一系統,而物理上它們分散在用計算機網絡連接的多個節點,并統一由一個分布式數據庫管理系統管理。
分布式數據庫已經存在很多年,它可以用來管理大量的分布存儲的數據,并且通常采用非共享的體系架構。云數據庫和傳統的分布式數據庫具有相似之處,比如,都把數據存放到不同的節點上。但是,分布式數據庫在可擴展性方面是無法與云數據庫相比的。由于需要考慮數據同步和分區失敗等開銷,前者隨著節點的增加會導致性能快速下降。而后者則具有很好的可擴展性,因為后者在設計時就已經避免了許多會影響到可擴展性的因素,比如采用更加簡單的數據模型、對元數據和應用數據進行分離以及放松對一致性的要求等等。另外,在使用方式上,云數據庫也不同于傳統的分布式數據庫。云數據庫通常采用多租戶模式,即多個租戶共用一個實例,租戶的數據既有隔離又有共享,從而解決數據存儲的問題,同時也降低了用戶使用數據庫的成本。
云數據庫產品
云數據庫供應商主要分為 3 類:
- 傳統的數據庫廠商:Teradata,Oracle,IBM DB2 和 Microsoft SQL Server
- 涉足數據庫市場的云供應商:Amazon,Google 和 Yahoo
- 新興小公司:Vertica,LongJump 和 EnterpriseDB
常見的云數據庫產品如表 1 1 1 所示。
企業 | 產品 |
Amazon | Dynamo, SimpleDB, RDS |
BigTable, FusionTable | |
Microsoft | Microsoft SQL Server Data Services 或 SQL Azure |
Oracle | Oracle Cloud |
Yahoo! | PNUTS |
Vertica | Analysis Database v3.0 for the Cloud |
EnerprieseDB | Postgres Plus in the Cloud |
開源項目 | Hbase, Hypertable |
其它 | EnerpriseDB,FathomDB, ScaleDB, Objectivity/DB, M/DB:X |
表 1????云數據庫產品
Amazon 是云數據庫市場的先行者。Amazon 除了提供著名的 S3 存儲服務和 EC2 計算服務以外,還提供基于云的數據庫服務Dynamo。Dynamo 采用“鍵/值”存儲,其所存儲的數據是非結構化數據,不識別任何結構化數據,需要用戶自己完成對值的解析。Dynamo 系統中的鍵(key)不是以字符串的方式進行存儲,而是采用 mds_key(通過 md5 算法轉換后得到)的方式進行存儲,因此,它只能根據 key 去訪問,不支持查詢。SimpleDB 是 Amazon 公司開發的一個可供查詢的分布數據存儲系統,它是 Dynamo “鍵/值”存儲的補充和豐富。顧名思義,SimpleDB 的目的是作為一個簡單的數據庫來使用,它的存儲元素(屬性和值)是由一個 id 字段來確定行的位置。
Google BigTable 是一種滿足弱一致性要求的大規模數據庫系統。Google 設計 BigTable 的目的,是為了處理 Google 內部大量的格式化及半格式化數據。目前,許多 Google 應用都是建立在 BigTable 上的,比如 Web 索引、Google Earth、Google Finance、Google Maps 和 Search History。BigTable 是構建在其他幾個 Google 基礎設施之上的:首先,BigTable 使用了分布式 Google 文件系統 GFS(Google file system)來存儲日志和數據文件;其次,BigTable 依賴一個高可用的、持久性的分布式鎖服務 Chubby;再次,BigTable 依賴一個簇管理系統來調度作業、在共享機器上調度資源、處理機器失敗和監督機器狀態。
云數據庫領域的研究問題
對于學術界而言,要想在云數據庫中提供類似于現有 DBMS 的豐富功能,比如查詢、索引和事務處理,仍然有許多亟待解決的問題。云數據庫領域中的研究問題主要包括:云數據庫中數據模型設計、編程模型、服務器體系架構設計、事務一致性、基于云數據庫的容災和 SLA(service level agreement)監控、云數據的訪問控制和授權管理、云應用數據訪問體系的調優、云數據生命周期管理、云數據庫與本地數據庫的協同和聯邦設計、測試基準等。
云數據庫的設計可以采用不同的數據模型,不同的數據模型可以滿足不用應用類型的需求,主要包括:鍵/值模型和關系模型。
BigTable 和它的同類開源產品 HBase,提供了一個不同于以往的簡單的、動態的、非關系型的數據模型。BigTable 采用了鍵/值數據模型。在 BigTable 中,包括行列以及相應的時間戳在內的所有數據都存放在表格的單元里。BigTable 的內容按照行來劃分,多個行組成一個小表(Tablet),保存到某一個服務器節點中。這就意味著,每個 Tablet 包含了位于某個區間內的所有數據。對于 BigTable 而言,一個數據簇中存儲了許多表,其中每個表都是一個 Tablet 集合。在最初階段,每個表只包含 1 個 Tablet。隨著表的增長,它會被自動分解成許多 Tablet,每個 Tablet 默認尺寸大約是 100MB ~ 200MB。BigTable 使用一個類似于 B+ 樹的 3 層架構來存儲 Tablet 位置信息。由于 BigTable 采用了鍵/值數據模型,因此不存在表間的聯接操作,這也使得數據分區操作相對簡單,只需要根據鍵的區間來劃分即可。
微軟的 SQL Azure 云數據庫采用了關系模型,它的數據分區方式和 BigTable 有些不同。關系型云數據庫的數據模型涉及行組和表組等相關概。一個表是一個邏輯關系,它包含一個分區鍵,用來對表進行分區。具有相同分區鍵的多個表的集合稱為表組。在表組中,具有相同分區鍵值的多個行的集合稱為行組。一個行組中包含的行總是被分配到同一個數據節點上。每個表組會包含多個行組,這些行組會被分配到不同的數據節點上。一個數據分區包含了多個行組.因此,每個數據節點都存儲了位于某個分區鍵值區間內的所有行。
圖 2 2 2 所示為云數據庫的數據訪問方法。當客戶端請求數據時,它首先向管理器請求一份分區映射圖,管理器向客戶端發送分區映射圖;客戶端收到以后,在圖中進行搜尋,根據鍵值找到自己所需數據的存儲位置;然后,客戶端到指定的數據節點請求數據;最后,由該數據節點把數據返回給客戶端。實際上,為了改進性能,同時也為了避免管理器的性能瓶頸,通常會在客戶端緩存常用的分區映射圖。這樣,客戶端在很多情況下不必與管理器交互就可以直接訪問相應的數據節點。
圖 2????云數據庫中的數據訪問方法
云數據庫的安全性也是影響其普及與應用的關鍵因素。云數據庫雖然提供了對海量數據的存儲,但同時也對數據的保密性和訪問控制等安全問題提出了新的挑戰:一方面,一些敏感的數據,比如企業財務數據、醫療機構的病例檔案、政府機構的文件等,必須經過加密才能放到云數據庫中;另一方面,針對眾多的用戶,必須設置不同的訪問控制級別,保證不同層次的用戶只能授權訪問限定范圍內的數據。
云數據管理的新數據模型
傳統關系型數據庫系統在處理超大規模數據的存儲 、高并發的數據訪問、半結構化和非結構化數據存儲等新型應用時已經出現瓶頸。而關系數據模型用關系表示實體及實體之間的聯系,以關系代數為基礎,數據獨立性強,并且其非過程化的數據存取方式大大降低了數據庫編程的難度。非關系數據模型有更好的可擴展性,很好地解決了多機并行處理的瓶頸,存儲容量也不再受限,并且能更好地存儲各種復雜的數據類型,查詢效率也更高。
基于以上的考慮,可以從數據的具體特性出發,結合關系數據模型與非關系數據模型,建立一種新的云數據模型,用新模型中的關系部分處理復雜的事務需求,非關系部分處理復雜的海量數據需求,具體來說就是對數據實體的切分。在傳統的關系數據模型中,實體根據范式要求而被劃分為不同的關系模式;然而在新模型中,可以根據實體的屬性類型對實體再次進行劃分,劃分后的一個實體型由很多子實體組成,并且每個子實體要么屬于關系型,要么屬于非關系型,各個子實體的物理儲存介質都是 shared-nothing 結構。此外,新模型在數據管理的對外接口上,保持已有的關系接口不變,新的功能封裝在已有的關系接口中。在處理新的復雜的數據類型時,首先在實體模式的定義中標記數據的對應屬性(用 Blob 做約束),然后系統模型就會自動轉換到對應的處理模塊,例如當用戶處理事務性較弱的大批量數據操作時,系統就會進行自動轉換。新模型數據實體有低耦合、高內聚的特性,因此有很好的可擴展性;并且不限于存儲基本的數據類型,做到了與結構化數據的關系模型的平滑過渡,有很好的可用性。圖 3 3 3 說明了一個實體型的劃分。
圖 3????實體劃分
由于新模型要同時管理了小字段的結構化數據和大字段的非結構化數據,并且擴展了數據庫管理系統中垂直分片的技術,所以總體上表現為層次結構的數據模型。新數據模型與傳統的層次模型主要有以下幾方面的不同:
- 整個數據實體只有兩層,關系層和非關系層
- 關系層和非關系層均由表結構表示數據
- 關系表中的一個數據項和非關系表中的一個數據項是一一對應的
- 關系表和非關系表是 n:1 的關系,并且組成倒立的樹形結構
- 關系層和非關系層的劃分都是針對同一個實體型的數據,屬于同一實體型的橫向分層,不同與傳統的不同實體型之間的縱向分層
- 由于橫向分層的原因,在處理實體間的無論一對多,還是多對多都很方便,不需要建立冗余結點和虛擬結點,均封裝在系統的關系層中,克服了縱向分層結構的弱點
在非關系層中,只有數據表存儲了實際的大字段數據,包括其 key 及 value。其他都是索引表,二層索引表 Tablet 保存了數據表 Tablet 的地址信息以及其它元數據信息,二層索引表 Tablet 中每行記錄對應一個數據表 Tablet。根索引表 Tablet 保存了二層索引表 Tablet 的地址信息以及其他元數據信息,根索引表 Tablet 中每條記錄對應一個二層索引表 Tablet。數據尋址時,涉及到分散的多臺服務器的磁盤查詢,為了降低磁盤讀取次數,差用變形的 B+ 結構存儲索引表和數據表,每個結點即為一個 Tablet。變形 B+ 樹的很多操作與 3 階 B+ 樹一致,與傳統 B+ 樹有以下幾點不同:
- 簡化了第一-層根索引結點和第二層索引結點的操作,根索引結點不分裂,永遠只有一個
- 數據結點的合并和分裂不由B十樹的最小度數或者階數決定,而是根據可自定義的結點大小與其文件大小而定
- 無論數據插入還是刪除,都在數據結點進行,樹永遠都由兩層索引結點和一層數據結點組成
- 索引結點(包括根索引結點)的子樹個數等于索引結點的記錄項數目,不由 B+ 樹的最小度數或者階數決定
- 索引結點的記錄項數目等于可自定義的節點大小除以每行記錄大小
通過與 HBase 作對比,對大字段的數據進行連續寫入和讀取,作者得出了如圖 4 4 4 試驗結果。
圖 4????數據寫入(左)與數據讀取(右)對比
可以看出新模型與 HBase 相比,在大字段數據寫入時,效率相當。因為新模型的 Blob 數據寫入語法語義較簡單,與 HBase 相似,都是 key-value 操作,而 Blob 數據索引在關系層的寫人數據量與 Blob 本身相比較小。系統每寫入 1MB 的數據(一行)大概是 0.36 秒,吞吐量為 23Mb/s,當寫入 10000 行時,數據量達到 30GB,在寫入過程中會發生很多次的 tablet 的拆分與合并。在大字段數據讀取時,效率稍低。因為系統首先會分析查詢條件,而且有相當一部分 Blob 數據的復雜查詢都會涉及到關系層中索引的操作。系統每讀取 1MB 的數據(一行)大概是 0.1 秒,吞吐量為 80Mb/s。
從數據庫到云計算:亞馬遜的大數據
云計算有 SaaS、 PaaS、laaS 三層,亞馬遜著力的是 IaaS 的底層建設。亞馬遜云計算解決方案和網絡服務部高級經理在接受媒體采訪時表示,在網絡互聯的需求之上,直接就是亞馬遜的最底層的IT基礎架構 AWS,包括計算、存儲、內容分發等;在 AWS 基礎上,用戶才可以構建自己的應用層,這些應用層包括構建數據庫、應用服務器;最上層是應用軟件。亞馬遜已經不是一個云服務提供商,而是云基礎設施供應商。
亞馬遜的 IaaS 以彈性計算云 EC2、存儲云 S3 為主。分析師和投資者目前主要通過 AWS 提供的 S3 服務中存儲的數據量來了解 AWS 的發展情況,S3 主要銷售基于云計算系統的存儲空間。亞馬遜的數據顯示,2011 年亞馬遜云服務 S3 的對象量翻了 3 番,增加了 5000 億對象,相當于每個季度增加 1250 億對象。據美國調查公司 451 Group 的報告,AWS 已經占據了美國 59% 的基礎設施及服務(IaaS)市場份額,領先優勢相當明顯。
AWS 提供的另一個主要服務為 EC2,該服務提供基于云計算系統的額外計算能力。根據云計算專家蓋伊·羅森的調查,2011 年 1 月,全球排名前 50 萬的網站中有 3674 家網站使用該服務,較去年同期增長了近 50%。這使得亞馬遜超過 Rackspace Hosting,成為全球最大的云計算服務提供商。