因爲分佈式數據庫克服了集中式數據庫的許多缺點,而且天然地適應於許多單位地理上分散而邏輯上統一的組織結構,所以,20多年以來從理論到實踐都獲得了迅速發展,並取得了決定性成果。程序員
分佈式數據庫結構算法
分佈式數據庫的典型定義是:分佈式數據庫是一個數據集合,這些數據在邏輯上屬於同一個系統,但物理上卻分散在計算機網絡的若干站點上,而且要求網絡的每一個站點具備自治的處理能力,能執行本地的應用。每一個站點的計算機還至少參與一個全局應用的執行。數據庫
所謂全局應用,要求使用通信子系統在幾個站點存取數據。這個定義強調了分佈式數據庫的兩個重要特色:分佈性和邏輯相關性。安全
圖1給出了典型的分佈式數據庫系統(DDBS)的物理結構。其中在不一樣地域的3臺計算機分別控制本地數據庫及各終端用戶T;每臺計算機及其本地數據庫組成了此分佈式數據庫的一個站點,各站點用通信網絡鏈接起來,能夠是局域網或廣域網。網絡
圖1 DDBS的物理結構圖併發
圖2給出了分佈式數據庫的邏輯結構。其中,DDBMS是分佈式數據庫管理系統,用來支持分佈式數據庫的創建和維護。LDBMS是局部數據庫管理系統,也就是一般的集中式數據庫管理系統,用來管理本站的數據。分佈式
圖2 DDBS的邏輯結構優化
DDBS的工做原理計算機網絡
DDBMS是分佈式數據庫系統的核心部分,就其性質可分爲勻質和異質兩種。若每一個站點的LDBMS相同,則是勻質的;若至少有兩個LDBMS不一樣,則是異質的。翻譯
異質DDBMS要在不一樣LDBMS的不一樣數據模型間進行轉換,於是比勻質DDBMS更復雜。通常來講,若從頭開始研製一個DDBS,則選擇勻質較方便,且一般都選用關係模型。這是因爲關係模型易於分佈管理,但若DDBS是創建在已有的若干數據庫之上,則這些數據庫極可能有的是基於關係模型的,有的是基於層次或網絡模型的,即它們是不一樣質的,所以要創建異質的DDBMS。
圖3給出了分佈式數據庫管理系統DDBMS的工做原理的參考模型。
圖3 DDBMS工做原理參考模型
用戶處理器根據外模式和概念模式把用戶命令翻譯成格式更適合於機器的規範化命令,並實施完整性約束,同時它負責將規範化格式的數據轉換成用戶結果格式。
數據處理器根據概念模式和內模式選擇通向物理數據的最優或近乎最優的訪問路徑,用規範化命令翻譯成物理命令,併發執行物理命令,並送回結果。它還負責將物理數據轉換成規範化數據。 這一部分功能一般由LDBMS完成。
全局數據庫控制和通信系統的組成如圖4所示。分解器根據分佈模式負責未來自用戶處理器的規範化命令翻譯成一個分佈執行策略,指明各數據處理器應完成的命令。分佈式執行監測器負責分佈策略的正確執行以及保證分佈環境中事務的原子性。通信子系統負責在網絡的各計算面站點問傳輸命令和數據。局部執行監視器負責監視執行分佈策略中的本地部分。合併器把來自幾個數據處理器的結果組合起來,造成最終結果。
圖4 DDB控制和通信系統的組成
此參考模型支持了DDBMS的4個特性:響應時間快和費用低,結構獨立性,位置獨立性以及併發和重複的獨立性。
各站點計算機的自治程度也是分佈式數據庫系統的一個重要特性。它與分解器和分佈執行監視器所處的位置密切相關。若分解器和分佈式執行監視器處在外部模式以上,這時分佈模式實際只存在於程序員的腦海之中,是一種由程序員來聯繫的系統。若它們處在外部模式如下概念模式以上,則是聯邦式DBMS。若它們處在概念模式如下內部模式以上(如圖3),則稱爲緊耦合的分佈式DBMS。若它們在內模式如下,則是集中式DBMS的體系結構。分解器和分佈式執行監視器所處的位置越往下,站點的自治能力越弱。
DDBMS技術
圖5給出了DDB的參考體系結構。分佈式數據庫設計包括外模式、全局模式、分段模式、分配模式和各站點內模式的定義。
圖5 DDB的參考體系結構
設計應考慮到下述目標:提升處理的本地性以提升響應速度和下降處理成本;提升數據的可用性和可靠性;合理地分佈工做負荷以提升並行處理的能力等。
將關係分段的方法有水平分段(叉分簡單水平分段和誘導水平分段),垂直分段和混合分段。設計分段時應該遵照完整性約束規則,重構性條件規則和不相交性條件規則。
複製副本的方法能夠提升數據的可用性和可靠性以及處理的局部性。但對副本要加以控制,使得對用戶是透明的,即對用戶來講好象只存在一個副本同樣。通常來講,查詢只需對一個副本進行;而更新則要對全部副本進行,這使得更新的算法變得複雜。
目錄管理
分佈式數據庫的目錄中存放了系統爲保證正確而有效地訪問數據而要使用的所有信息。通常應包括各級模式的描述、訪問方法的描述、關於數據庫的統計數據和一致性信息等。系統根據這些信息將用戶查詢轉換爲物理數據庫上的查詢,並進行查詢優化選擇一條最佳的存取路徑,進行事務管理,進行安全性和完整性檢查等。
目錄的管理有多種方式。最基本的3種方式是:集中式目錄,只有一個站點存放目錄;全複製目錄,每一個站點都存放目錄;局部目錄,每一個站點只含有本地數據庫的目錄。能夠把目錄自己做爲一個特殊的系統庫來對待,則對它也有檢索、更新、併發控制等訪問和維護問題。
查詢處理及其優化
這是分佈式數據庫的主要技術問題之一。相應於圖5的DDB參考體系結構,圖6給出了分佈式查詢處理模型。
圖6 分佈式查詢處理模型
分佈式查詢處理負責將用戶查詢轉換爲各站點上的物理查詢,並負責合併各子查詢結果以獲得最後結果。
查詢的效率問題是個關鍵。所以對用戶查詢程序應加以優化,尋找一種使查詢費用最少的執行策略,這個費用等於傳輸費用和局部費用之和。有時局部費用相對於傳輸費用能夠忽略不計,如大型廣域網聯接的系統。但在高速的局域網中,局部費用也必須考慮。
分佈式併發控制技術
事務是一個應用或一個應用的一部分,它是數據庫的一致性單位,即在事務的執行先後數據庫都必須是一致的。分佈事務管理必須保證事務具備原子性、持久性、可串行性和隔離性。在大多數系統中是這樣獲得的,即在現有的本地事務管理程序上面用兩階段託付協議來得到可靠性,用兩階段鎖定來進行併發控制,以及用超時來解決死鎖檢測。
兩階段託付協議確保同一事務的子事務所有託付或所有終止,無論有無發生故障;兩階段託付在不丟失運行記錄信息的狀況下可從任何故障恢復。兩階段鎖定機構要求所有子事務在生長階段得到鎖定而在收縮階段釋放鎖定。用於死鎖檢測的超時機構在那些事務可能因死鎖而等待時簡單地使它們終止。
併發控制是分佈式事務管理的基本任務之一,其目的是保證分佈式數據庫系統中多個事務的併發、高效、正確執行。併發控制用來保證事務的可串行性,即事務的併發執行等價於它們按某種次序的串行執行,從而爲用戶提供了併發透明性。
目前已提出了大量的併發控制方法,最基本的有封鎖方法、時間印方法和樂觀方法等。時間印方法和樂觀方法理論上研究得較多,大多數原型DDBMS和商品化DDBMS採用二段鎖方法。
封鎖法
對於因爲共享而產生的衝突,通常可採用封鎖技術。即在對數據操做以前,先向併發控制機構提出封鎖申請,若是不與其餘事務發生衝突,申請被批准,系統對數據加上鎖標誌;不然令其等待,直至其餘事務釋放對此數據的封鎖。
封鎖方法中的一個重要問題是封鎖粒度的選擇。理想的狀況是隻封鎖與操做有關的數據集,一般稱爲完整性相關域。爲了保持數據完整性,至少應封鎖完整性相關域中的數據,從而使其中任何施加於現有數據集合的操做所影響的數據都置於封鎖之中。封鎖分爲讀鎖和寫鎖,也稱共享鎖和排它鎖。當事務出現衝突操做時,經過加鎖原則及鎖的相容性機制實現。
衝突操做的可串行化調度:當數據共享時,事務並行執行;當數據排它時事務串行執行。使用鎖模型實現併發的最著名的算法是兩段鎖協議。其基本方法是任何事務對數據項操做以前先加鎖。加鎖的方法是,在事務中的所有加鎖操做在第一次解鎖操做前完成。鎖方式中要進行死鎖消除、預防、檢測處理。在集中式數據庫管理系統中經過兩段鎖協議能夠破壞死鎖的造成條件,以保證事務調度的正確性。
可是,在分佈式數據庫管理系統中,要對各自分散而又有共享要求的數據進行集中統一的管理,並用統一的描述使分散在各地的應用數據在用戶看來全局統一在一個數據庫中,這給事務的併發控制提出了更高要求。
在分佈式環境下,若是在分佈式數據庫系統中沒有重複存儲的數據,可使用分佈式鎖技術。其實現方法是,對每一個結點保留一個局部鎖管理器,處理對存儲在本地的數據加鎖和釋放鎖的請求。當分佈式數據庫系統中有多處重複存儲的數據時,可採用集中式鎖技術,即僅有一個鎖管理器,該管理器放在唯一一個結點上,全部的加鎖和釋放鎖的請求都在該結點上處理。此外,在分佈式環境下的鎖方法,還有混合鎖技術、主副本鎖協議等。
封鎖法實現了一種併發控制,能夠知足通常數據庫應用對併發控制的要求,可是也有自身的缺點,那就是開銷大。事務加鎖都有必定的開銷,還會下降事務的併發性。以鎖爲基礎的併發控制算法在實際DDBMS中應用較爲普遍,例如,在Oracle系統中併發控制的實現就是採用鎖方法。
時間印法
所謂時間印法就是在每一個事務啓動運行時,併發控制機制賦予其唯一一個時間印(一般爲事務的啓動時間),以實現多事務的可串行性。後繼事務有較大的時間印,事務的時間印一直保持到事務結束。
此外,每一個數據實體都有時間印,分爲讀時間印和寫時間印。讀時間印即數據上一次被讀出的時間,寫時間印即數據最近被寫入的時間。只有當時間印比數據項上的時間印大或者至關的事務才能執行對數據的操做並在操做完成後置數據項的時間印爲事務和數據項時間印的最大值,不然拒絕令操做重啓。這種方法使事務的並行等價於特定的串行序列,即按時間印遞增的序列,通常不會產生死鎖。
在分佈式環境下,若是可以解決全部事務生成唯一時間印的策略,集中式時間印技術就能夠直接應用於分佈式數據庫管理系統。實際上,在分佈式策略中,每一個結點都使用本地的邏輯計數器或時鐘產生局部的時間印,全局的時間印經過在局部的時間印前加上各結點的標識符來得到,這樣得到的時間印是唯一的,如圖7所示。
圖7 產生唯一時間印的分佈策略
唯一時間印
採用時間印的並行控制算法主要有兩種:基本時間印法和保守時間印法。主要缺點是使事務從新啓動的次數較多。爲解決這個問題,提出保守時間印法,該方法的主要特色是不會拒絕任何操做,從而不會重啓事務。
處理方法是當出現衝突操做時,把年輕的緩衝起來,等待年老的操做執行完成後再執行被緩衝起來的操做。這就須要肯定什麼時候全部的事務操做均已執行完。但這可能引起死鎖的狀況,也可能出現某一場地被阻斷的狀況。事實上,避免死鎖的唯一方法是超時後發送一個空操做。
在分佈式數據庫管理系統中,數據的可用性和可靠性從某種角度看是矛盾的。對於可用性和可靠性要求較高的應用,能夠採用封鎖和時間印相結合的方法,能夠避免錯誤、避免死鎖,必要時要考慮採用容錯和重構技術來提升可靠性。