分散式資料庫管理系統 - 副本控制



本章探討副本控制,它是維護所有站點資料一致性所必需的。我們將研究副本控制技術以及副本控制所需的演算法。

如前所述,複製是分散式資料庫中用於在不同站點儲存資料表多個副本的技術。在多個站點擁有多個副本的問題在於維護資料一致性的開銷,尤其是在更新操作期間。

為了在所有站點維護相互一致的資料,需要採用副本控制技術。副本控制有兩種方法,即:

  • 同步複製控制
  • 非同步複製控制

同步複製控制

在同步複製方法中,資料庫是同步的,以便所有副本始終具有相同的值。請求資料項的事務將能夠在所有站點訪問相同的值。為了確保這種一致性,更新資料項的事務會擴充套件,以便它在資料項的所有副本中進行更新。通常,為此使用兩階段提交協議。

例如,讓我們考慮一個數據表 PROJECT(PId, PName, PLocation)。我們需要執行一個事務 T1,如果 PLocation 為“Bombay”,則將其更新為“Mumbai”。如果沒有副本,則事務 T1 中的操作將為:

Begin T1: 
   Update PROJECT Set PLocation = 'Mumbai' 
   Where PLocation = 'Bombay'; 
End T1;

如果資料表在站點 A 和站點 B 中有兩個副本,則 T1 需要生成兩個對應於這兩個站點的子事務 T1A 和 T1B。擴充套件的事務 T1 將為:

Begin T1: 
   Begin T1A : 
      Update PROJECT Set PLocation = 'Mumbai' 
      Where PLocation = 'Bombay'; 
   End T1A;  
	
   Begin T2A : 
      Update PROJECT Set PLocation = 'Mumbai'
      Where PLocation = 'Bombay'; 
   End T2A; 
	
End T1;

非同步複製控制

在非同步複製方法中,副本並不總是維護相同的值。一個或多個副本可能儲存過時的值,並且事務可能會看到不同的值。將所有副本更新到當前值的過程稱為同步

一種流行的同步方法是儲存轉發方法。在這種方法中,一個站點被指定為主站點,其他站點為輔助站點。主站點始終包含更新的值。所有事務首先進入主站點。然後將這些事務排隊,以便在輔助站點中應用。只有當事務計劃在輔助站點上執行時,才使用推出方法更新輔助站點。

副本控制演算法

一些副本控制演算法包括:

  • 主從複製控制演算法。
  • 分散式投票演算法。
  • 多數一致演算法。
  • 迴圈令牌演算法。

主從複製控制演算法

有一個主站點和“N”個從站點。主演算法在主站點執行以檢測衝突。從演算法的一個副本在每個從站點執行。整個演算法在以下兩個階段執行:

  • 事務接受/拒絕階段 - 當事務進入從站點的交易監控器時,從站點會向主站點發送請求。主站點檢查是否存在衝突。如果沒有衝突,則主站點向從站點發送“ACK+”訊息,然後從站點開始事務應用階段。否則,主站點向從站點發送“ACK-”訊息,然後從站點拒絕事務。

  • 事務應用階段 - 進入此階段後,事務進入的從站點向所有從站點廣播請求以執行事務。在收到請求後,對等從站點執行事務並在完成後向請求的從站點發送“ACK”。在請求的從站點從其所有對等站點收到“ACK”訊息後,它向主站點發送“DONE”訊息。主站點理解事務已完成並將其從掛起佇列中刪除。

分散式投票演算法

它包含“N”個對等站點,所有這些站點都必須“OK”事務才能開始執行。以下是該演算法的兩個階段:

  • 分散式事務接受階段 - 當事務進入站點的交易管理器時,它會向所有其他站點發送事務請求。在收到請求後,對等站點使用基於優先順序的投票規則解決衝突。如果所有對等站點都“OK”事務,則請求的站點開始應用階段。如果任何對等站點不“OK”事務,則請求的站點拒絕事務。

  • 分散式事務應用階段 - 進入此階段後,事務進入的站點向所有從站點廣播請求以執行事務。在收到請求後,對等從站點執行事務並在完成後向請求的從站點發送“ACK”訊息。在請求的從站點從其所有對等站點收到“ACK”訊息後,它會讓事務管理器知道事務已完成。

多數一致演算法

這是分散式投票演算法的一種變體,其中允許在大多數對等站點“OK”事務時執行事務。它分為三個階段:

  • 投票階段 - 當事務進入站點的交易管理器時,它會向所有其他站點發送事務請求。在收到請求後,對等站點使用投票規則測試衝突並將任何衝突的事務(如果有)儲存在掛起佇列中。然後,它傳送“OK”或“NOT OK”訊息。

  • 事務接受/拒絕階段 - 如果請求的站點收到對事務的大多數“OK”,則它接受事務並向所有站點廣播“ACCEPT”。否則,它向所有站點廣播“REJECT”並拒絕事務。

  • 事務應用階段 - 當對等站點收到“REJECT”訊息時,它會將其事務從其掛起列表中刪除並重新考慮所有延遲的事務。當對等站點收到“ACCEPT”訊息時,它應用事務並拒絕掛起佇列中與此事務衝突的所有延遲事務。它在完成後向請求的從站點發送“ACK”。

迴圈令牌演算法

在這種方法中,系統中的事務使用迴圈令牌序列化並相應地針對資料庫的每個副本執行。因此,所有事務都被接受,即沒有被拒絕。它有兩個階段:

  • 事務序列化階段 - 在此階段,所有事務都安排以序列化順序執行。每個站點中的每個事務都從一個連續序列中分配一個唯一的票證,指示事務的順序。一旦事務被分配了一個票證,它就會被廣播到所有站點。

  • 事務應用階段 - 當站點收到事務及其票證時,它會根據其票證安排事務執行。事務執行完成後,該站點會廣播相應的訊息。當事務在所有站點完成執行時,該事務結束。

廣告