以訂閱類型和指派的優先權為基礎之合併衝突解決範例

若要瞭解如何依據指派的優先權值以及訂閱類型 (主訂閱或客訂閱) 解決衝突,可參考以下範例,其中描述在數次合併同步處理期間,某資料列所進行的一系列更新。

以下是在一個基本的合併式複寫拓撲中,四個站台 (一個「發行者」、兩個含主訂閱的「訂閱者」及一個含客訂閱的「訂閱者」) 的初始優先權值。

站台

類型

優先權值

A

Publisher

100.00

B

Server Subscription

75.00 (指派值)

C

Server Subscription

50.00 (指派值)

D

Client Subscription

0.00 (預設值)

第 1 階段:初始值

最開始,站台 A (發行者) 建立包含 value='Nebraska' 的第一版資料列,此資料列在下次合併同步處理時將複寫至站台 B、C 與 D。同步之後,此資料列的值如下。

站台

優先權值

資料列值

A (發行者)

100.00

Nebraska

B (主訂閱)

75.00

Nebraska

C (主訂閱)

50.00

Nebraska

D (客訂閱)

0.00

Nebraska

第 2 階段:發行者與含主訂閱的訂閱者均更新資料列

站台 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

第 3 階段:針對同一資料列進行多項變更

假設站台 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

第 4 階段:含主訂閱和客訂閱的訂閱者均更新資料列

假設站台 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。