簡介
分散式資料庫是指利用高速計算機網路將物理上分散的多個數據存儲單元連線起來組成一個邏輯上統一的資料庫。分散式資料庫的基本思想是將原來集中式資料庫中的數據分散存儲到多個通過網路連線的數據存儲節點上,以獲取更大的存儲容量和更高的並發訪問量。近年來,隨著數據量的高速增長,分散式資料庫技術也得到了快速的發展,傳統的關係型資料庫開始從集中式模型向分散式架構發展,基於關係型的分散式資料庫在保留了傳統資料庫的數據模型和基本特徵下,從集中式存儲走向分散式存儲,從集中式計算走向分散式計算。
另一方面,隨著數據量越來越大,關係型資料庫開始暴露出一些難以克服的缺點,以NoSQL 為代表的非關係型資料庫,其高可擴展性、高並發性等優勢出現了快速發展,一時間市場上出現了大量的key-value 存儲系統、文檔型資料庫等NoSQL 資料庫產品。NoSQL 類型資料庫正日漸成為大數據時代下分散式資料庫領域的主力。
這種組織資料庫的方法克服了物理中心資料庫組織的弱點。
首先,降低了數據傳送代價,因為大多數的對資料庫的訪問操作都是針對局部資料庫的,而不是對其他位置的資料庫訪問;
其次,系統的可靠性提高了很多,因為當網路出現故障時,仍然允許對局部資料庫的操作,而且一個位置的故障不影響其他位置的處理工作,只有當訪問出現故障位置的數據時,在某種程度上才受影響;
第三,便於系統的擴充,增加一個新的局部資料庫,或在某個位置擴充一台適當的小型計算機,都很容易實現。然而有些功能要付出更高的代價。例如,為了調配在幾個位置上的活動,事務管理的性能比在中心資料庫時花費更高,而且甚至抵消許多其他的優點。
分散式軟體系統(Distributed Software Systems)是支持分散式處理的軟體系統,是在由通信網路互聯的多處理機體系結構上執行任務的系統。它包括分散式作業系統、分散式程式設計語言及其編譯(解釋)系統、分散式檔案系統和分散式資料庫系統等。
分散式作業系統負責管理分散式處理系統資源和控制分散式程式運行。它和集中式作業系統的區別在於資源管理、進程通信和系統結構等方面。 分散式程式設計語言用於編寫運行於分散式計算機系統上的分散式程式。一個分散式程式由若干個可以獨立執行的程式模組組成,它們分布於一個分散式處理系統的多台計算機上被同時執行。它與集中式的程式設計語言相比有三個特點:分布性、通信性和穩健性。 分散式檔案系統具有執行遠程檔案存取的能力,並以透明方式對分布在網路上的檔案進行管理和存取。 分散式資料庫系統由分布於多個計算機結點上的若干個資料庫系統組成,它提供有效的存取手段來操縱這些結點上的子資料庫。分散式資料庫在使用上可視為一個完整的資料庫,而實際上它是分布在地理分散的各個結點上。當然,分布在各個結點上的子資料庫在邏輯上是相關的。
Hadoop的分散式檔案系統HDFS,作為開源的分散式平台,為目前流行的很多分散式資料庫提供了支持,譬如HBase等。Yonghong的分散式檔案系統ZFS,為分散式數據集市Z-DataMart提供了底層平台。
主要特點
·
大數據時代,面對海量數據量的井噴式增長和不斷增長的用戶需求,分散式資料庫必須具有如下特徵,才能應對不斷增長的海量數據。
● 高可擴展性:分散式資料庫必須具有高可擴展性,能夠動態地增添存儲節點以實現存儲容量的線性擴展。
● 高並發性:分散式資料庫必須及時回響大規模用戶的讀/寫請求,能對海量數據進行隨機讀/寫。
● 高可用性:分散式資料庫必須提供容錯機制,能夠實現對數據的冗餘備份,保證數據和服務的高度可靠性。
分散式資料庫相對傳統集中式資料庫的優點
大數據時代,面對日益增長的海量數據,傳統的集中式資料庫的弊端日益顯現,分散式資料庫相對傳統的集中式資料庫有如下優點。
● 更高的數據訪問速度:分散式資料庫為了保證數據的高可靠性,往往採用備份的策略實現容錯,所以,在讀取數據的時候,客戶端可以並發地從多個
備份伺服器同時讀取,從而提高了數據訪問速度。
● 更強的可擴展性:分散式資料庫可以通過增添存儲節點來實現存儲容量的線性擴展,而集中式資料庫的可擴展性十分有限。
● 更高的並發訪問量:分散式資料庫由於採用多台主機組成存儲集群,所以相對集中式資料庫,它可以提供更高的用戶並發訪問量。
體系結構
根據我國制定的《分散式資料庫系統標準》,分散式資料庫系統抽象為4層的結構模式。這種結構模式得到了國內外的支持和認同。
4層模式劃分為全局外層、全局概念層、局部概念層和局部內層,在各層間還有相應的層間映射。這種4層模式適用於同構型分散式資料庫系統,也適用於異構型分散式資料庫系統。
數據分片
類型:
(1)水平分片:按一定的條件把全局關係的所有元組劃分成若干不相交的子集,每個子集為關係的一個片段。
(2)垂直分片:把一個全局關係的屬性集分成若干子集,並在這些子集上作投影運算,每個投影稱為垂直分片。
(3)導出分片:又稱為導出水平分片,即水平分片的條件不是本關係屬性的條件,而是其他關係屬性的條件。
(4)混合分片:以上三種方法的混合。可以先水平分片再垂直分片,或先垂直分片再水平分片,或其他形式,但他們的結果是不相同的。
條件:
(1)完備性條件:必須把全局關係的所有數據映射到片段中,決不允許有屬於全局關係的數據卻不屬於它的任何一個片段。
(2)可重構條件:必須保證能夠由同一個全局關係的各個片段來重建該全局關係。對於水平分片可用並操作重構全局關係;對於垂直分片可用聯接操作重構全局關係。
(3)不相交條件:要求一個全局關係被分割後所得的各個數據片段互不重疊(對垂直分片的主鍵除外)。
數據分配方式
(1)集中式:所有數據片段都安排在同一個場地上。
(2)分割式:所有數據只有一份,它被分割成若干邏輯片段,每個邏輯片段被指派在一個特定的場地上。
(3)全複製式:數據在每個場地重複存儲。也就是每個場地上都有一個完整的數據副本。
(4)混合式:這是一種介乎於分割式和全複製式之間的分配方式。
目前分散式資料庫分配的設計,越來越多的採用尋找最優解的算法,比如遺傳算法、退火機制等
查詢最佳化
指在執行分散式查詢時選擇查詢執行計畫的方法和關係運算符的實現算法。根據系統環境的不同,查詢最佳化所使用的算法也有所不同,通常分為遠程廣域網環境和高速區域網路環境,其區別主要在網路的頻寬。對於一元運算符可以採用集中式資料庫中的查詢最佳化方法。而對於二元運算符,由於涉及場地間的數據傳輸,因此必須考慮通信代價。分散式查詢中常見的連線運算執行策略包括:
(1)半連線方法:利用半連線運算的轉換方法R∞S=(RµS)∞S。假設場地1和場地2上分別有關係R和關係S,首先在S上執行連線屬性上的投影並將結果傳輸至場地1,在場地1上執行關係R與投影的連線操作,再將結果傳輸至場地2與關係S執行連線操作。這種方法能夠降低執行連線運算時的網路通信代價,主要適用於頻寬較低的遠程廣域網路。
(2)枚舉法方法:指枚舉關係運算符的物理執行計畫,通過對比執行計畫的代價選擇執行算法的方法。其中,連線運算符的物理執行計畫包括嵌套循環方法、哈希連線法和歸併連線法。枚舉法主要適用於以磁碟IO代價為主的高速區域網路環境。
典型套用
最典型套用的銀行領域為例:
將分散的資料庫從邏輯上聯繫在一起,可以大大提高數據的管理效率。這就是總行和支行之間的關係:總行與全國各地的支行之間既有各自需要處理的數據,又有需要交換的數據。
將數據分散存儲在各地的資料庫中,可提高故障發生時的數據安全性。一旦上海支行的資料庫出現故障,比如停機、損壞,也是僅僅限於上海支行,總行、廣州等其他地區的支行資料庫的數據都不會受到影響。
分散式架構具備良好的擴展性。比如建立一個新的海外支行時,只要將新建的資料庫加入到原有的分散式資料庫架構中就可以,以最小的代價在不影響原有支行、總行的情況下完成資料庫的擴展。
以冗餘方式進行數據的備份,以備在系統崩潰、數據丟失的情況下仍有備份數據可以進行恢復。