新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 软件开发 > 数据库 > Sybase教程 > 正文:MobiLink开发资源集之同步数据冲突处理

MobiLink开发资源集之同步数据冲突处理

新客网 XKER.COM 2007-08-03 来源: Sybase 收藏本文

步骤清单

 

要解决冲突问题,我们应首先理解何谓冲突。

 

在向统一数据库中上载行时可能会发生冲突。如果两个用户修改不同远程数据库中相同的行,则当这两行中的第二个到达 MobiLink 同步服务器时将出现冲突。在冲突发生时,您应定义一个过程以计算正确值,或至少使用日志文件记录冲突。

 

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

 

冲突与错误是两个不同的概念。冲突处理是应用程序应该包含的一部分。

 

只有在更新行的过程中才会检测到冲突。尝试更新自上一次同步后已更新或删除的行将会导致冲突。缺省情况下:

 

*如果在尝试插入一行时发现此行已经插入,则会导致错误。

 

*如果在尝试删除一行时发现此行已经删除,则此尝试删除的操作将被忽略。

 

这些是为方便操作而定义的内置行为。如果需要不同的行为,可以使用一个或多个上载事件自行实现。

 

我们在demo的前半部分展示了有冲突而未解决的情况。当两个不同的客户端分别将相同的数据进行不同更改后,再在不同时间上载,后上载的数据成了最终结果。这可能是我们不想要的情况。我们需要对冲突进行一定的检测、然后再根据我们的用户规则进行处理。

 

在 MobiLink 客户端向 MobiLink 同步服务器发送一个更新后的行时,发送的数据中不仅包含该行的新值(后映像),而且还将包含旧行值的副本(前映像)。如果前映像与统一数据库中的当前值不匹配,表示检测到了冲突。

 

 

检测冲突的方法有两种:

*定义一个 upload_fetch 脚本。

 

*定义一个 upload_update 脚本,该脚本在 WHERE 子句中包含所有非主键列。

 

如果为同一个表定义这两个脚本,则只使用 upload_fetch 脚本。

 

仅当使用 upload_fetch 脚本或适当的 upload_update 脚本时,MobiLink 同步服务器才检测冲突。如果提供了 upload_fetch 脚本,MobiLink 同步服务器会将上载的前映像与 upload_fetch 脚本返回的包含相同主键值的行值进行比较。如果存在前映像中的值与当前统一数据库中的值不匹配的情况,则表示 MobiLink 同步服务器检测到了冲突。

共3页: 上一页 [1] [2] [3] 下一页
收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
阅读排行
随机推荐
实用信息推荐