Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » MobiLink - 服务器管理 » 使用 MobiLink 服务器技术 » 同步技术 » 冲突处理

 

关于冲突

小心

切勿更新同步表中的主键。更新主键会导致主键的目标落空,因为主键是标识不同数据库(远程和统一数据库)中相同行的唯一方式并且是检测冲突的唯一方式。

冲突与错误是两个不同的概念。在冲突发生时,您应定义一个过程以计算正确值,或至少使用日志文件记录冲突。冲突处理是设计合理的应用程序中不可缺少的一部分。

在同步过程的下载阶段,远程数据库中不会出现冲突。如果下载的行中包含一个新的主键,则该行的值将插入到新的一行。如果该主键与一个现有行的主键相匹配,则会更新该行中的值。

示例

User1 开始时的库存为十件,卖出三件后将 Remote1 库存值更新为七件。User2 卖出 4 件并将 Remote2 库存更新为 6。Remote1 同步时,同步数据库将被更新为 7。Remote2 同步时,由于库存值不再是 10,因此会检测到冲突。若要以编程方式解决这一冲突,需要三个行值:

  1. 统一数据库中的当前值。

  2. Remote2 上载的新行值。

  3. Remote2 在上一次同步期间获取的旧行值。

在这种情况下,业务逻辑可使用以下方法来计算新的库存值并解决冲突:

current consolidated - (old remote - new remote)
-> 7 - (10-6) = 3

有关如何处理冲突的其它示例,请参见: