摘要:針對(duì)關(guān)系數(shù)據(jù)庫在處理海量的視頻、音頻、圖像及復(fù)雜數(shù)據(jù)類型時(shí)所暴露的缺陷, 該文對(duì)基于架構(gòu)的關(guān)系數(shù)據(jù)庫和以Bigtable為代表的云端數(shù)據(jù)庫進(jìn)行比較分析,表明了云端數(shù)據(jù)庫在處理海量數(shù)據(jù)及復(fù)雜數(shù)據(jù)時(shí)要比關(guān)系數(shù)據(jù)庫更占優(yōu)勢。隨著云端數(shù)據(jù)庫技術(shù)的發(fā)展,云端數(shù)據(jù)庫將會(huì)取代關(guān)系數(shù)據(jù)庫成為數(shù)據(jù)庫的主流。
關(guān)鍵詞:關(guān)系數(shù)據(jù)庫;云端數(shù)據(jù)庫;Bigtable;時(shí)間戳
中圖分類號(hào):TP399文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2009)25-7090-03
Comparison and Analysis for Relational Database and Cloud Database Based on Architecture
ZHANG Zhen-yong, WEN Jing-hua
(Guizhou College of Finance and Economics, Guiyang 550004,China)
Abstract: Aiming at the shortcoming that relational database processes a large number of video,audio,images and complex data types, this thesis compared and analyzed relational database and Bigtable representing cloud database and based on architecture. The results showed that cloud database was more advantageous than relational database in precessing a great mass of data and complex data types. With the development of the cloud database technology,cloud database will be superseding the relational database as the mainstream of the database.
Key words: ralational database; cloud database; bigtable; timestamp
關(guān)系數(shù)據(jù)庫從1970年發(fā)展至今,雖功能日趨完善,但對(duì)數(shù)據(jù)類型的處理大多采用數(shù)字、字符等基本數(shù)據(jù)類型,對(duì)多媒體信息的處理只是停留在簡單的二進(jìn)制代碼文件的存儲(chǔ)。隨著信息技術(shù)的發(fā)展,互聯(lián)網(wǎng)上數(shù)據(jù)量高速增長,非結(jié)構(gòu)化數(shù)據(jù)的應(yīng)用日趨擴(kuò)大,再加上用戶應(yīng)用需求的提高、硬件技術(shù)的發(fā)展和Web2.0提供的多彩的多媒體交流方式,用戶對(duì)多媒體處理的要求從簡單的存儲(chǔ)上升為識(shí)別、檢索和深入加工等高級(jí)應(yīng)用。關(guān)系數(shù)據(jù)庫在處理這類數(shù)據(jù)時(shí),逐漸暴露出了一些缺陷。
如何來高效處理占數(shù)據(jù)總量70%的聲音、圖像和視頻等復(fù)雜數(shù)據(jù)類型是目前互聯(lián)網(wǎng)界亟待解決的問題。正是在這種狀態(tài)下,云端數(shù)據(jù)庫便應(yīng)運(yùn)而生并開始發(fā)展起來。目前云端數(shù)據(jù)庫技術(shù)在云計(jì)算中的應(yīng)用有Google的Bigtable系統(tǒng)[1]、Amazon公司的Dynamo系統(tǒng)、Hadoop的一個(gè)子項(xiàng)目Hbase、微軟的Live Mesh系統(tǒng)等等。無論是Bigtable還是Hbase都是采用通用的云端數(shù)據(jù)庫架構(gòu),只是核心技術(shù)不同。所以本文就以Google的Bigtable架構(gòu)為代表與傳統(tǒng)的關(guān)系數(shù)據(jù)庫架構(gòu)進(jìn)行比較和分析。
1關(guān)系數(shù)據(jù)庫
1.1關(guān)系數(shù)據(jù)庫概念及特點(diǎn)
關(guān)系數(shù)據(jù)庫在一個(gè)給定的應(yīng)用領(lǐng)域中,所有實(shí)體及實(shí)體之間聯(lián)系的關(guān)系的集合。它是建立在集合代數(shù)基礎(chǔ)上,應(yīng)用數(shù)學(xué)方法來處理數(shù)據(jù)庫中的數(shù)據(jù),現(xiàn)實(shí)世界中的各種實(shí)體以及實(shí)體之間的各種聯(lián)系均用關(guān)系模型來表示,也就是說關(guān)系數(shù)據(jù)庫是建立在關(guān)系模型基礎(chǔ)上的數(shù)據(jù)庫[2]。
關(guān)系數(shù)據(jù)庫具有數(shù)據(jù)結(jié)構(gòu)化、最低冗余度、較高的程序與數(shù)據(jù)獨(dú)立性、易于擴(kuò)充、易于編制應(yīng)用程序等優(yōu)點(diǎn),目前較大的應(yīng)用軟件系統(tǒng)都是建立在結(jié)構(gòu)化數(shù)據(jù)庫設(shè)計(jì)之上的。
1.2關(guān)系數(shù)據(jù)庫系統(tǒng)的架構(gòu)
關(guān)系數(shù)據(jù)庫的架構(gòu)包括六個(gè)部分[3]:
1) 查詢語言接口
查詢語言接口通過使用SQL語言對(duì)數(shù)據(jù)庫進(jìn)行特設(shè)查詢數(shù)據(jù)。
2)交互式查詢工具
交互式查詢工具是用于訪問,修改以及更新一個(gè)或多個(gè)關(guān)聯(lián)的數(shù)據(jù)表,并以視圖的方式返回給用戶。
3) 核心軟件
該核心軟件用于控制查詢處理,存取數(shù)據(jù)路徑,用戶訪問管理,存儲(chǔ)管理,索引,交易處理和讀取/更新信息。
4) 公用機(jī)制
公用機(jī)制主要用于輸入/輸出/備份調(diào)整工具及參數(shù)/報(bào)告撰寫。
5) 存儲(chǔ)機(jī)制
存儲(chǔ)機(jī)制主要進(jìn)行數(shù)據(jù)庫寫入,歸檔,用戶管理器,服務(wù)器管理,重做日志文件。
6) 數(shù)據(jù)庫
數(shù)據(jù)庫的特點(diǎn)是以數(shù)據(jù)文件的方式對(duì)數(shù)據(jù)對(duì)象進(jìn)行物理存儲(chǔ),包含了系統(tǒng)目錄即數(shù)據(jù)目錄,一個(gè)或多個(gè)數(shù)據(jù)文件以結(jié)構(gòu)化形式存儲(chǔ)組成集合即二維表,并將不同數(shù)據(jù)集通過主鍵和外鍵進(jìn)行關(guān)聯(lián)。
關(guān)系數(shù)據(jù)庫的架構(gòu)如圖1所示。
1.3關(guān)系數(shù)據(jù)庫的缺陷
通過對(duì)關(guān)系數(shù)據(jù)庫架構(gòu)的分析,可以發(fā)現(xiàn)關(guān)系數(shù)據(jù)庫的一些不足,概括如下四點(diǎn):
1) 數(shù)據(jù)類型表達(dá)能力差
因?yàn)殛P(guān)系數(shù)據(jù)庫所處理的是結(jié)構(gòu)化的數(shù)據(jù),所以關(guān)系數(shù)據(jù)庫缺乏直接構(gòu)造與現(xiàn)代軟件應(yīng)用有關(guān)的信息的類型表達(dá)能力。隨著信息技術(shù)的飛速發(fā)展,圖像、視頻、音頻以及文檔等非結(jié)構(gòu)化的數(shù)據(jù)已被應(yīng)用到人們的日常生活當(dāng)中,利用關(guān)系數(shù)據(jù)庫來處理這些非結(jié)構(gòu)化的數(shù)據(jù)已經(jīng)顯得有點(diǎn)力不從心了。因此目前大多數(shù)RDBMS產(chǎn)品所采用的簡單類型在重構(gòu)復(fù)雜數(shù)據(jù)的過程中將會(huì)出現(xiàn)性能問題;數(shù)據(jù)庫設(shè)計(jì)過程中的額外復(fù)雜性;RDBMS產(chǎn)品和編程語言在數(shù)據(jù)類型方面的不協(xié)調(diào),需要通過較復(fù)雜的程序化進(jìn)行數(shù)據(jù)類型之間的轉(zhuǎn)換來達(dá)到數(shù)據(jù)類型的一致性。
對(duì)于工程應(yīng)用來說,關(guān)系數(shù)據(jù)庫不能支持復(fù)雜數(shù)據(jù)類型的典型結(jié)果就是需要額外地分解數(shù)據(jù)結(jié)構(gòu)工作,這些被分解的結(jié)構(gòu)不能直接表示應(yīng)用數(shù)據(jù),且從基本成分重構(gòu)時(shí)也非常繁瑣和費(fèi)時(shí)間。
2) 復(fù)雜查詢功能比較差
在關(guān)系數(shù)據(jù)庫中,利用SQL語言進(jìn)行查詢數(shù)據(jù)。雖然SQL語言為數(shù)據(jù)查詢提供了很好的定義方法,但是當(dāng)用于復(fù)雜信息的查詢時(shí)可能會(huì)非常繁瑣。這是由于在工程應(yīng)用時(shí)規(guī)范化的過程通常會(huì)產(chǎn)生大量的簡單表,從而降低數(shù)據(jù)的冗余度。那么在這種環(huán)境下由存取信息產(chǎn)生的查詢必須處理大量的表和復(fù)雜主鍵和外鍵之間的聯(lián)系以及連接運(yùn)算,會(huì)影響系統(tǒng)的查詢效率。
3) 支持長事務(wù)能力差
由于RDBMS記錄鎖機(jī)制的顆粒度限制,對(duì)于支持多種記錄類型的大段數(shù)據(jù)的登記和檢查來說,簡單的記錄級(jí)的鎖機(jī)制是不夠的,但基于鍵值關(guān)系的較復(fù)雜的鎖機(jī)制來說卻很難推廣也難以實(shí)現(xiàn)。
4) 環(huán)境應(yīng)變能力差
在要求系統(tǒng)改變的環(huán)境下,關(guān)系數(shù)據(jù)庫從一種系統(tǒng)移植到另一個(gè)系統(tǒng)上的成本高且修改困難。再加上,關(guān)系數(shù)據(jù)庫和編程語言所提供的數(shù)據(jù)類型的不一致,使得從一個(gè)環(huán)境轉(zhuǎn)換到另一個(gè)環(huán)境時(shí)需要多至30%的附加代碼。
正是由于關(guān)系數(shù)據(jù)庫的這些缺陷,才推動(dòng)了數(shù)據(jù)庫技術(shù)的發(fā)展,產(chǎn)生了云端數(shù)據(jù)庫技術(shù),進(jìn)而彌補(bǔ)了關(guān)系數(shù)據(jù)庫的不足。
2 云端數(shù)據(jù)庫
2.1 Bigtable的介紹
Google在 2004 年初就開始研發(fā)了BigTable,到了2005年大概有100個(gè)左右的服務(wù)使用BigTable。BigTable 讓Google在提供新服務(wù)時(shí)的運(yùn)行成本降低,最大限度地利用了計(jì)算能力。
Bigtable是一個(gè)大型,容錯(cuò),自我管理的分布式存儲(chǔ)系統(tǒng),并用于管理分布在成千上萬臺(tái)服務(wù)器上的結(jié)構(gòu)化數(shù)據(jù)[4]。它是建立在GFS分布式文件系統(tǒng)[5]、Scheduler分布式集群調(diào)度、Lock Service分布式的鎖服務(wù)[6]和 MapReduce編程模式[7]基礎(chǔ)之上的系統(tǒng)。
2.2 Bigtable的架構(gòu)
1) Bigtable的數(shù)據(jù)模型
一個(gè)Bigtable(大表)是一個(gè)稀疏的,分布的,持續(xù)的以及多維的排序的數(shù)據(jù)映射。這個(gè)映射由行主鍵,列主鍵和時(shí)間戳進(jìn)行索引[4]。每一項(xiàng)值在映射中是一系列不被解釋的字節(jié)元組即(row:string,column:string,timestamp:int64)→string。
在Bigtable的數(shù)據(jù)模型中,所有的數(shù)據(jù)都存放在表格單元中,每一行表示一個(gè)事物的數(shù)據(jù)內(nèi)容,其所在列表示這個(gè)事物的唯一標(biāo)志,其所對(duì)應(yīng)的時(shí)間戳表示這個(gè)事物在某個(gè)時(shí)間上的狀態(tài)即具體的數(shù)據(jù)內(nèi)容。關(guān)系數(shù)據(jù)庫只能反映當(dāng)前時(shí)間上事物所處的狀態(tài),而Bigtable不僅能顯示事物當(dāng)前所處的狀態(tài),而且還可以記錄某個(gè)事物的過去某個(gè)時(shí)間所處狀態(tài)。Bigtable的數(shù)據(jù)模型如圖2所示。
2) Bigtable的架構(gòu)
與目前的關(guān)系數(shù)據(jù)庫類似,BigTable也是客戶端和服務(wù)器端的聯(lián)合設(shè)計(jì),使得性能能夠最大程度地符合應(yīng)用的需求。
BigTable系統(tǒng)依賴于集群系統(tǒng)的底層結(jié)構(gòu),一個(gè)是 Google的分布式文件系統(tǒng)(GFS),一個(gè)是分布式的集群任務(wù)調(diào)度(scheduler),還有一個(gè)分布式的鎖服務(wù)(Lock Service)。BigTable使用Lock Service來保存根數(shù)據(jù)表格的指針,即客戶端用戶可以首先從Lock Service鎖服務(wù)器中獲得根表的位置,進(jìn)而對(duì)數(shù)據(jù)進(jìn)行訪問。BigTable使用一臺(tái)服務(wù)器作為主服務(wù)器,用來保存和操作元數(shù)據(jù)。主服務(wù)器除了管理元數(shù)據(jù)之外,還負(fù)責(zé)對(duì)tablet服務(wù)器(即一般意義上的數(shù)據(jù)服務(wù)器)進(jìn)行遠(yuǎn)程管理與負(fù)載調(diào)配。客戶端通過編程接口與主服務(wù)器進(jìn)行元數(shù)據(jù)通信,與tablet服務(wù)器進(jìn)行數(shù)據(jù)通信[8]。
Bigtable的架構(gòu)由Bigtable master、Bigtable tablet servers和Bigtable client library三部分組成,如圖3所示。
Bigtable master存儲(chǔ)了許多由大量的tablets組成的表。主要負(fù)責(zé)指派tablet到tablet的各個(gè)服務(wù)器上,并檢測tablet服務(wù)器的增減和服務(wù)程序裝載滿與否,進(jìn)行實(shí)時(shí)的分配任務(wù),使tablet服務(wù)器負(fù)載均衡并回收GFS文件系統(tǒng)中的垃圾文件。此外,它還處理模式更改,如表和列簇的創(chuàng)建。
每一個(gè)tablet服務(wù)器用于管理一部分tablets,通常有10-1000個(gè)tablet和處理客戶端用戶的讀/寫請(qǐng)求。tablet是由大表以行為單位分隔而成的。每個(gè)tablet保存了連續(xù)的行,然后別分配到各個(gè)tablet服務(wù)器上。
Bigtable client library是客戶端用戶和Bigtable服務(wù)器通信的接口。用戶通過Bigtable client library接口來讀數(shù)據(jù)和寫數(shù)據(jù)等操作。
3 關(guān)系數(shù)據(jù)庫與云端數(shù)據(jù)庫的比較
3.1 兩者架構(gòu)的區(qū)別
關(guān)系數(shù)據(jù)庫架構(gòu)與云端數(shù)據(jù)庫中的Bigtable架構(gòu)主要區(qū)別如表1所示。
3.2 基于架構(gòu)的比較分析
通過對(duì)關(guān)系數(shù)據(jù)庫架構(gòu)和云端數(shù)據(jù)庫中的Bigtable架構(gòu)的分析,可以從以下幾個(gè)方面對(duì)兩者進(jìn)行比較:
1) 數(shù)據(jù)模型
在關(guān)系數(shù)據(jù)庫中創(chuàng)建的表是一張二維表包括行和列,使用簡單的數(shù)據(jù)類型對(duì)結(jié)構(gòu)化的數(shù)據(jù)進(jìn)行存儲(chǔ)。但對(duì)于非結(jié)構(gòu)化的數(shù)據(jù)的存儲(chǔ),因?yàn)殛P(guān)系數(shù)據(jù)庫要保持?jǐn)?shù)據(jù)冗余度低這一優(yōu)點(diǎn),所以關(guān)系數(shù)據(jù)庫的設(shè)計(jì)會(huì)比較復(fù)雜且困難。而Bigtable創(chuàng)建的類似于二維表,但事實(shí)上不是二維表,它是由行主鍵、列主鍵、時(shí)間戳三個(gè)域組成的多維map。雖然Bigtable存儲(chǔ)數(shù)據(jù)的冗余度比較高,但是Bigtable比關(guān)系數(shù)據(jù)庫的二維表多了一個(gè)域——時(shí)間戳域,時(shí)間戳域可以記錄事物的不同時(shí)間時(shí)的狀態(tài)。另外Bigtable是以一條記錄為原子對(duì)數(shù)據(jù)進(jìn)行操作的,所以Bigtable不僅可以對(duì)事物的當(dāng)前狀態(tài)進(jìn)行更新,還可以對(duì)事物的過去狀態(tài)進(jìn)行查詢。在這一點(diǎn)上,關(guān)系數(shù)據(jù)庫是不支持歷史查詢的。
2) 數(shù)據(jù)的存取方式
在關(guān)系數(shù)據(jù)庫中用戶對(duì)數(shù)據(jù)進(jìn)行查詢、添加、修改及刪除等的操作是使用SQL語言。對(duì)于處理海量及復(fù)雜數(shù)據(jù)時(shí),使用SQL語言對(duì)多個(gè)關(guān)聯(lián)表進(jìn)行操作就可能會(huì)顯得非常繁瑣。Bigtable并非支持SQL語言的數(shù)據(jù)庫,而是以map 函數(shù)方式的,以列導(dǎo)向的數(shù)據(jù)庫。Bigtable對(duì)數(shù)據(jù)的存取是以一行記錄為原子進(jìn)行的,不必關(guān)聯(lián)其他的表,那么數(shù)據(jù)存取的速率要比關(guān)系數(shù)據(jù)庫要高。
3) 數(shù)據(jù)遷移能力
關(guān)系數(shù)據(jù)庫提供了一些簡單的數(shù)據(jù)類型,在環(huán)境發(fā)生變化比如應(yīng)用平臺(tái)或者是編程語言所提供的數(shù)據(jù)類型與關(guān)系數(shù)據(jù)庫所提供的不一致時(shí),那么數(shù)據(jù)之間的轉(zhuǎn)化過程將會(huì)相當(dāng)復(fù)雜而且還會(huì)增加成本。而Bigtable所提供的數(shù)據(jù)類型只有字符串類型,所有數(shù)據(jù)都是以字符串的形式進(jìn)行處理,因此Bigtable在進(jìn)行數(shù)據(jù)遷移時(shí)相比關(guān)系數(shù)據(jù)庫要容易并且成本也要比關(guān)系數(shù)據(jù)庫要低得多。
4) 支持事務(wù)
關(guān)系數(shù)據(jù)庫為了保持?jǐn)?shù)據(jù)的完整性和一致性,提供了事務(wù)處理功能。關(guān)系數(shù)據(jù)庫在處理簡單事務(wù)方面,顯現(xiàn)出了關(guān)系數(shù)據(jù)庫的優(yōu)勢。但是在處理繁瑣的事務(wù)方面,比如執(zhí)行了n條SQL語句來對(duì)多個(gè)關(guān)聯(lián)的數(shù)據(jù)表進(jìn)行處理,執(zhí)行效率就會(huì)顯得比較低。目前,Bigtable還不支持事務(wù)處理功能,但是Google已經(jīng)考慮到了該功能,一旦Bigtable支持了多行數(shù)據(jù)的事務(wù)支持,執(zhí)行效率將會(huì)大大提高。
總之,云端數(shù)據(jù)庫在處理非結(jié)構(gòu)化數(shù)據(jù)時(shí)要比關(guān)系數(shù)據(jù)庫的效率高,更適宜在多節(jié)點(diǎn)的服務(wù)器集群上工作,比關(guān)系數(shù)據(jù)庫更適應(yīng)環(huán)境的變化,最大的優(yōu)點(diǎn)是使用成本比關(guān)系數(shù)據(jù)庫要低得多。
4 結(jié)束語
本文通過對(duì)關(guān)系數(shù)據(jù)庫架構(gòu)和云端數(shù)據(jù)庫架構(gòu)的比較分析,可以得出云端數(shù)據(jù)庫在許多方面要比關(guān)系數(shù)據(jù)庫占優(yōu)勢,也就是說云端數(shù)據(jù)庫技術(shù)具有很大的發(fā)展前景。雖然云端數(shù)據(jù)庫技術(shù)還不夠成熟,再加上各大關(guān)系數(shù)據(jù)庫供應(yīng)商對(duì)關(guān)系數(shù)據(jù)庫技術(shù)的不斷改進(jìn)以及對(duì)查詢算法進(jìn)行優(yōu)化,但是隨著云端數(shù)據(jù)庫技術(shù)的不斷成熟,將會(huì)得到廣泛的應(yīng)用,進(jìn)而逐步會(huì)取代關(guān)系數(shù)據(jù)庫成為數(shù)據(jù)庫中的主流。
參考文獻(xiàn):
[1] Chang F,Dean J,Ghemawat S,Hsieh WC,Wallach DA,Burrows M,Chandra T,F(xiàn)ikes A,Gruber RE.Bigtable:A distributed storage system for structured data.In:Proc.of the 7th USENIX Symp.on Operating Systems Design and Implementation.Berkeley:USENIX Association,2006:205-218.
[2] 瞿裕忠 胡偉 鄭東棟 仲新宇. 關(guān)系數(shù)據(jù)庫模式和本體間映射的研究綜述[J].計(jì)算機(jī)研究與發(fā)展,2008,45(2):300-309.
[3] Fay Chang,Jeffrey Dean,Sanjay Ghemawat,Wilson C.Hsieh,Deborah A.Wallach Mike Burrows, Tushar Chandra, Andrew Fikes,Robert E.Gruber.Bigtable: A Distributed Storage System for Structured Data,OSDI,2006:1-5.
[4] Ghemawat S,Gobioff H,Leung ST.The Google file system.In:Proc.of the 19th ACM Symp.on Operating Systems Principles.New York:ACM Press,2003.29-43.
[5] Dean J,Ghemawat S.MapReduce:Simplified data processing on large clusters.In:
Proc.of the 6th Symp.on Operating System Design and Implementation.Berkeley:USENIX Association,2004.137-150.
[6] 陳康,鄭緯民.云計(jì)算:系統(tǒng)實(shí)例與研究現(xiàn)狀[J]. Journal of Software,2009,20(5):1337-1348.