若要了解冲突如何根据分配的优先级值解决,以及如何判断订阅是服务器订阅还是客户端订阅,请考虑以下示例,该示例描述在多次合并同步中对某行的一系列更新。
下面是基本合并复制拓扑中四个站点的初始优先级值(一个发布服务器、两个具有服务器订阅的订阅服务器和一个具有客户端订阅的订阅服务器)。
| 网站 | 类型 | 优先级值 |
|---|---|---|
| A | 发布者 | 100.00 |
| B | 服务器订阅 | 75.00 (已分配) |
| C | 服务器订阅 | 50.00 (已分配) |
| D | 客户订阅 | 0.00 (默认值) |
阶段 1:初始值
最初,站点 A(发布服务器)创建包含 value=“Nebraska”的行的第一个版本,该行将在下次合并同步期间复制到站点 B、C 和 D。 同步后,下面是行的值。
| 网站 | 类型 | 行值 |
|---|---|---|
| A(发布者) | 100.00 | 内布拉斯加州 |
| B (服务器订阅) | 75.00 | 内布拉斯加州 |
| C(服务器订阅) | 50.00 | 内布拉斯加州 |
| D(客户端订阅) | 0.00 | 内布拉斯加州 |
阶段 2:具有服务器订阅的发布者和订阅者都会更新行
站点 A 将行值更新到得克萨斯州,站点 B 会将行值更新到新泽西州。 发生下一次合并同步时,站点 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 更新行(将其更改为北卡罗来纳州),并与发布服务器同步。 这不是冲突,因为 C 已成功地合并了 A 的上次更新(行值=“得克萨斯州”已成功合并)。 然后,假设站点 B 更新了数据行(将其更改为爱达荷州)。
| 网站 | 优先级值 | 行值 |
|---|---|---|
| A (发布者) | 100.00 | 北卡罗来纳 |
| B (服务器订阅) | 75.00 | 爱达荷州 |
| C(服务器订阅) | 50.00 | 北卡罗来纳 |
| D(客户端订阅) | 0.00 | Texas |
当站点 B 与发布服务器同步时,会出现更新冲突。 由于 B 和 C 都是服务器订阅,B 的优先级大于 C,因此站点 B 将赢得冲突。 合并其他两个站点后,B 的值将传播到其他订阅者。
| 网站 | 优先级值 | 行值 |
|---|---|---|
| A(发布者) | 100.00 | 爱达荷州 |
| B (服务器订阅) | 75.00 | 爱达荷州 |
| C(服务器订阅) | 50.00 | 爱达荷州 |
| D(客户端订阅) | 0.00 | 爱达荷州 |
阶段 4:具有服务器和客户端订阅的订阅者都会更新行
假设站点 D 更新了行(将其更改为新墨西哥州),并与发布者进行同步。 然后,假设站点 B 更新了该行(将其更改为 California)。
| 网站 | 优先级值 | 行值 |
|---|---|---|
| A [发布者] | 100.00 | 新墨西哥州 |
| B (服务器订阅) | 75.00 | 加州 |
| C(服务器订阅) | 50.00 | 爱达荷州 |
| D(客户端订阅) | 0.00 | 新墨西哥州 |
当站点 B 与发布服务器同步时,会出现更新冲突。 与前面的示例不同,因为 D 具有客户端订阅,因此它在同步时假定发布服务器(站点 A)的优先级值。 由于 A 的优先级大于 B,B 在冲突中失败;最初输入 D 的值获胜。 (如果订阅者 B 在订阅者 D 之前与 A 同步,则站点 B 将赢得冲突。)赢得冲突的站点 D 依赖于发布者自上次同步站点 D 更新的行版本以来没有进行更改或收到另一个更改。 如果具有服务器订阅的任何其他订阅者或具有客户端订阅的任何其他订阅者首先进行同步,则遵循优先级最高的规则或“先同步到发布者获胜”。)
所有网站同步后的最终值将在此处显示。
| 网站 | 优先级值 | 行值 |
|---|---|---|
| A (发布者) | 100.00 | 新墨西哥州 |
| B (服务器订阅) | 75.00 | 新墨西哥州 |
| C (服务器订阅) | 50.00 | 新墨西哥州 |
| D (客户端订阅) | 0.00 | 新墨西哥州 |
在拓扑中,当服务器和客户端订阅在同一级别混合时,同步顺序和优先级值将决定冲突的结果。 最后一组更新说明了为何必须谨慎行事。 尽管订阅者在三个订阅者中具有最低的优先级值,但它赢得了冲突,因为它首先与发布者同步(因此假定发布者的优先级值为 100.00)。 如果站点 C(优先级值为 50.00 的服务器订阅)进入新墨西哥州而不是站点 D,则站点 B(优先级值为 75.00 的服务器订阅)将赢得冲突,结果将是加州。