以訂閱類型和指派的優先權為基礎之合併衝突解決範例
若要瞭解如何依據指派的優先權值以及訂閱類型 (主訂閱或客訂閱) 解決衝突,可參考以下範例,其中描述在數次合併同步處理期間,某資料列所進行的一系列更新。
以下是在一個基本的合併式複寫拓撲中,四個站台 (一個「發行者」、兩個含主訂閱的「訂閱者」及一個含客訂閱的「訂閱者」) 的初始優先權值。
站台 | 類型 | 優先權值 |
---|---|---|
A |
Publisher |
100.00 |
B |
Server Subscription |
75.00 (指派值) |
C |
Server Subscription |
50.00 (指派值) |
D |
Client Subscription |
0.00 (預設值) |
第一階段:初始值
最開始,站台 A (發行者) 建立包含 value='Nebraska' 的第一版資料列,此資料列在下次合併同步處理時將複寫至站台 B、C 與 D。同步之後,此資料列的值如下。
站台 | 優先權值 | 資料列值 |
---|---|---|
A (發行者) |
100.00 |
Nebraska |
B (主訂閱) |
75.00 |
Nebraska |
C (主訂閱) |
50.00 |
Nebraska |
D (客訂閱) |
0.00 |
Nebraska |
第二階段:發行者與含主訂閱的訂閱者均更新資料列
站台 A 將資料列值更新為 Texas,站台 B 將資料列值更新為 New Jersey。當下次合併同步處理發生時,站台 A 和站台 B 之間會有衝突。站台 A 會在此衝突中獲勝。站台 A 的衝突成功者之值會傳播到站台 B、C 和 D。
站台 | 優先權值 | 資料列值 |
---|---|---|
A (發行者) |
100.00 |
Texas |
B (主訂閱) |
75.00 |
Texas |
C (主訂閱) |
50.00 |
Texas |
D (客訂閱) |
0.00 |
Texas |
第三階段:針對同一資料列進行多項變更
假設站台 C 更新了此資料列 (將其更改為 North Carolina) 並與「發行者」同步。這不構成衝突,因為 C 已經成功地合併 A 的最近更新 (成功合併資料列 value='Texas')。然後假設站台 B 也更新了這個資料列 (將其更改為 Idaho)。
站台 | 優先權值 | 資料列值 |
---|---|---|
A (發行者) |
100.00 |
North Carolina |
B (主訂閱) |
75.00 |
Idaho |
C (主訂閱) |
50.00 |
North Carolina |
D (客訂閱) |
0.00 |
Texas |
當站台 B 與「發行者」同步時,更新衝突就發生了。由於 B 和 C 都是主訂閱,且 B 的優先權高於 C,因此站台 B 在此衝突中獲勝。在其他兩個站台也被合併之後, B 的值會傳播到其他「訂閱者」。
站台 | 優先權值 | 資料列值 |
---|---|---|
A (發行者) |
100.00 |
Idaho |
B (主訂閱) |
75.00 |
Idaho |
C (主訂閱) |
50.00 |
Idaho |
D (客訂閱) |
0.00 |
Idaho |
第四階段:含主訂閱和客訂閱的訂閱者均更新資料列
假設站台 D 更新了資料列 (將其更改為 New Mexico) 並與「發行者」同步。然後假設站台 B 也更新此資料列 (將其更改為 California)。
站台 | 優先權值 | 資料列值 |
---|---|---|
A (發行者) |
100.00 |
New Mexico |
B (主訂閱) |
75.00 |
California |
C (主訂閱) |
50.00 |
Idaho |
D (客訂閱) |
0.00 |
New Mexico |
當站台 B 與「發行者」同步時,更新衝突就發生了。因為 D 具有客訂閱,所以與上一個範例不同,同步處理時它會假設「發行者」(站台 A) 的優先權值。因為 A 的優先權高於 B,因此 B 在衝突中失敗;最初輸入 D 的值獲勝。(如果在訂閱者 D 之前訂閱者 B 已與 A 同步,則站台 B 會在衝突中獲勝。)站台 D 在衝突中獲勝是因為自從在站台 D 更新的資料列之版本最後被同步處理後,「發行者」還未執行變更或還未接收其他變更。如果任何含主訂閱的「訂閱者」或其他任何含客訂閱的「訂閱者」先進行同步處理,則會遵循最高優先權規則或「率先造訪發行者為優先」的規則。
所有站台都同步之後,最終的值如下。
站台 | 優先權值 | 資料列值 |
---|---|---|
A (發行者) |
100.00 |
New Mexico |
B (主訂閱) |
75.00 |
New Mexico |
C (主訂閱) |
50.00 |
New Mexico |
D (客訂閱) |
0.00 |
New Mexico |
當拓撲中混合了相同層級的主客訂閱時,同步處理的順序與優先權值決定了衝突的結果。最後一組更新顯示了為什麼必須謹慎使用。雖然「訂閱者」在三個「訂閱者」中的優先權值最低,但因為它先和「發行者」同步 (因此採用了 100.00 這個「發行者」優先權值),所以在衝突中獲勝。如果是在站台 C (優先權值為 50.00 的主訂閱) 而非在站台 D 已輸入 New Mexico,那麼站台 B (優先權值為 75.00 的主訂閱) 便會在衝突中獲勝,最終的資料列值將是 California。