數(shù)據(jù)庫是各種IT系統(tǒng)中最常見的組成部分,從上世紀80年代初以來,在企業(yè)的各種基于數(shù)據(jù)庫的應用系統(tǒng)中,關系型數(shù)據(jù)幾乎一統(tǒng)天下,而進入云計算時代,由于互聯(lián)網(wǎng)應用的興起,關系型數(shù)據(jù)庫受到了以大數(shù)據(jù)處理為主要賣點的NoSQL數(shù)據(jù)庫的強力挑戰(zhàn)。為滿足云計算時代對數(shù)據(jù)處理的要求,特別是對高擴展、讀寫速度、支撐容量以及建設和運營成本方面的要求,關系型數(shù)據(jù)庫自身不斷做出調(diào)整,向分布式數(shù)據(jù)庫演進。
處理非結構化數(shù)據(jù)
在數(shù)據(jù)庫應用中,經(jīng)常會涉及全文文本、圖像、聲音、影視、超媒體等信息類型,這些信息的字段長度可變,并且每個字段的記錄又可以由可重復或不可重復的子字段構成,這就形成了典型的非結構化數(shù)據(jù)。在企業(yè)中非結構化數(shù)據(jù)主要有辦公文檔、披露的信息、Web發(fā)布的頁面,以及工作中一些培訓、宣傳、監(jiān)控用到的多媒體信息等。
如今,非結構化數(shù)據(jù)處理越來越普遍,而非結構化數(shù)據(jù)的處理也成為關系型數(shù)據(jù)庫面臨的一個很大挑戰(zhàn)。一般而言,非結構化數(shù)據(jù)的組織主觀性比較大,缺乏統(tǒng)一的規(guī)則,處理起來難度大,然而,非結構化數(shù)據(jù)越來越普遍,促使各關系型數(shù)據(jù)庫廠商不得不對其產(chǎn)品進行拓展而使其具備管理非結構化數(shù)據(jù)的功能。
目前,主流的關系型數(shù)據(jù)庫,包括Oracle、SQL Server、Sybase、DB2都或多或少對非結構化數(shù)據(jù)類型提供了支持,如SQL Server 2008中引入了文件流fileStream技術,支持非結構化文檔的存儲、查詢和檢索。Oracle數(shù)據(jù)庫則采用大對象BLOB技術存儲非結構化數(shù)據(jù)。面向?qū)ο蟮臄?shù)據(jù)庫中還有一個典型代表是Cache數(shù)據(jù)庫,在非結構數(shù)據(jù)的支持上走得更遠些。
云計算與分布式數(shù)據(jù)庫
數(shù)據(jù)海量、類型復雜、響應速度要求高,這些都對現(xiàn)有數(shù)據(jù)庫構成挑戰(zhàn)。實際上,無論是內(nèi)存數(shù)據(jù)庫還是基于存儲的數(shù)據(jù)庫,當前的這些主流數(shù)據(jù)庫都很難支持面向特大型非結構化數(shù)據(jù)的應用系統(tǒng),而隨著分布式計算、云計算技術的發(fā)展,數(shù)據(jù)庫找到了一種應對辦法,這就是數(shù)據(jù)庫的分布式實現(xiàn)。
分布式數(shù)據(jù)庫是從數(shù)據(jù)庫與服務器組合關系來說的,它由若干個站集合而成,這些站又稱為節(jié)點。分布式數(shù)據(jù)庫系統(tǒng)通常使用較小的計算機系統(tǒng),由多個計算機組成,每臺計算機中都有數(shù)據(jù)的一份完整拷貝或一個分片,計算機通過網(wǎng)絡互相連接,共同組成一個完整的、全局的大型數(shù)據(jù)庫。Oracle的并行數(shù)據(jù)庫RAC就是一種分布式數(shù)據(jù)庫,它的核心技術正是分布式計算。RAC共享了多種資源,采用統(tǒng)一的數(shù)據(jù)庫命名空間和一套共享的存儲。同樣,GreenPlum也是一種分布式數(shù)據(jù)庫,它實現(xiàn)了簡單的共享,共享的內(nèi)容是管理節(jié)點和數(shù)據(jù)庫命名空間。
嚴格說來,分布式數(shù)據(jù)庫并非因云計算環(huán)境而生,但卻很適合云計算環(huán)境下的需求。這是因為云環(huán)境下要求數(shù)據(jù)庫具備很強的橫向擴充能力,這就要求節(jié)點之間盡量減少共享,而采用節(jié)點的分片技術來并行處理是解決辦法之一。
云計算技術的一個重要內(nèi)容是任務的分解和結果的匯總,然后通過后臺的并行計算來完成大規(guī)模的處理。對于具體行業(yè)來說,云計算平臺軟件、虛擬化軟件都不需要自己開發(fā), 但面向特定行業(yè)的大規(guī)模數(shù)據(jù)處理應用軟件沒有通用的產(chǎn)品,需要針對特定的應用需求專門開發(fā),其中會涉及諸如并行算法、索引查詢優(yōu)化技術研究以及系統(tǒng)的設計實現(xiàn)等。例如,提出云計算的Google公司為實現(xiàn)其搜索服務,專門設計了新文件系統(tǒng)(GFS)和存儲庫(Bigtable),采用調(diào)度器(Scheduler)的主從調(diào)度技術將存儲信息和任務分片(Sharing),并采用映射歸約(MapReduce)處理技術,從而實現(xiàn)了對網(wǎng)頁的存儲檢索,最后將一個大型的數(shù)據(jù)庫分成多片,調(diào)度器(Scheduler)負責任務分解,將結果分拆給節(jié)點。每個節(jié)點負責一個數(shù)據(jù)片,負責完成數(shù)據(jù)庫的基本功能(插入、復制、查詢),并把結果傳給上層的調(diào)度器,從而使數(shù)據(jù)處理達到橫向擴展(Scale Out)的能力。
在 RAC中,命名空間是一個邏輯概念,不會導致資源瓶頸。RAC數(shù)據(jù)庫本身是一套基于磁盤的數(shù)據(jù)庫,其服務器節(jié)點的磁盤操作、沒在內(nèi)存緩沖區(qū)的磁盤讀寫操作都需要共享的磁盤來完成,因而統(tǒng)一共享的存儲是RAC的資源瓶頸之一,而RAC的性能瓶頸還會體現(xiàn)為后臺磁盤的I/O瓶頸。Oracle推出的一體機Exadata,其中一個重要的特點是采用并行計算的存儲服務器和閃存,以提高存儲的I/O能力。在其滿配的一體機中,數(shù)據(jù)庫服務器有8臺,存儲服務器為14臺,可見一體機設計中對存儲I/O的偏重。
在GreenPlum體系中,在主機上規(guī)劃查詢項目,并將其分成若干部分在節(jié)點上并行執(zhí)行,所有通信功能都在一個高寬帶網(wǎng)絡互連體系上實現(xiàn)。這種體系下每個節(jié)點都有一個通往本地磁盤的獨立高速通道,因為沒有共享存儲,存儲和節(jié)點都有很強的橫向擴展性能力。
云環(huán)境下的數(shù)據(jù)庫架構設計
基于云計算對靈活性和可擴展性方面的要求,云計算下的數(shù)據(jù)庫可以使用多個分片數(shù)據(jù)庫并行處理,來形成一個超級大數(shù)據(jù)庫,這個數(shù)據(jù)庫共享的組件盡量少,因而不太適合共享存儲。而隨著虛擬化技術的提高,特別是虛擬機的性能損耗符合一定要求時,分片數(shù)據(jù)庫也可以架設在虛擬機上。借組云計算的資源調(diào)度技術,這樣一個可伸縮的并行數(shù)據(jù)庫可以在云計算環(huán)境中形成(參見附圖)。
值得一提的是,云計算的發(fā)展使得數(shù)據(jù)庫的擴展更為簡單可行。其中,云管理平臺負責資源的監(jiān)控、自動調(diào)度,當查詢類并行數(shù)據(jù)庫的性能不足的時候,云管理平臺可以自動為虛擬機(VM)增加資源,或通過增加新的虛擬機(VM) 來增加并行數(shù)據(jù)庫的處理能力;而當系統(tǒng)面臨的壓力減少時可以通過減少分片處理數(shù)據(jù)庫來減少資源需求,或通過減少所在虛擬機(VM)的資源。當然,這就要求查詢類并行數(shù)據(jù)庫的管理主機能感知資源和分片數(shù)據(jù)庫的變化,而重新分配處理任務。
目前,云計算還處于發(fā)展過程之中,但一些云應用已經(jīng)具備大規(guī)模處理能力,針對簡單、同質(zhì)、重復使用的應用(如一種數(shù)據(jù)處理、一個查詢,郵件收發(fā)等標準化的功能),已經(jīng)可以將大量的PC服務器組合,形成一個超級的計算資源來完成指定的任務,如在搜索、地震處理、氣象分析、核爆模擬方面展現(xiàn)巨大的能力,通過相關軟件可以將多服務器整合,形成超級處理資源,其應用軟件設計并行處理能力可以將一個巨大但相似的計算任務分解到不同的處理節(jié)點,在管理節(jié)點的統(tǒng)一調(diào)度下,每個節(jié)點獲得一部分數(shù)據(jù),先獨立處理,然后與管理節(jié)點協(xié)商,并與其他的節(jié)點相互通信,交換少量數(shù)據(jù),最終將一個巨大的計算任務完成。
不過,總體上,數(shù)據(jù)庫在可擴展性這一方面的能力還不是很強,目前,GreenPlum和VoltDB等分布式數(shù)據(jù)庫正在朝這一方向努力,并且已經(jīng)具備了一定的并行能力。相信只要有市場需求,分布式數(shù)據(jù)庫一定會繼續(xù)進步,不過,是否會出現(xiàn)一種真正的云數(shù)據(jù)庫還值得觀察。