在两个不同的系统之间同步对象,最好的方法?

我正在使用基于XML的有效负载在iPhone和网站之间同步两个业务对象,并且愿意为最佳例程征求一些想法。

这个问题的本质是相当通用的,我可以看到它适用于需要在Web实体和客户端(桌面,移动电话等)之间同步业务对象的各种不同系统。

可以双方编辑,删除和更新业务对象。 双方都可以在本地存储对象,但同步仅在iPhone端启动,以便断开连接查看。 所有对象都有一个updated_at和created_at时间戳,并且两边都有一个RDBMS支持(iPhone端的SQLite和网络上的MySQL ……再次我不认为这很重要)并且手机确实记录了最后一次尝试同步。 否则,不存储其他数据(此刻)。

您将使用什么算法来最小化系统之间的网络聊天以进行同步? 如果“软删除”不是一个选项,你将如何处理删除? 您会添加哪些数据模型更改以实现此function?

最简单的方法:同步时,传输where updated_at >= @last_sync_at所有记录。 向下:这种方法根本不能容忍时钟偏差。

保持每次更新行时增加的版本号列(以便时钟偏差不会影响同步过程)和最后同步的版本号(以便可以识别可能存在冲突的更改)可能更安全。 为了提高带宽效率,请在发送到每个复制对等体的最后一个版本的每个数据库中保留一个缓存,以便只需要传输已修改的行。 如果这将是星型拓扑,则叶子可以使用简化的模式,其中最后同步的版本存储在每个表中。

为了支持删除同步,需要某种forms的软删除,但是这可以是“逻辑删除”记录的forms,其仅包含已删除行的键。 只有在您确定所有副本都已处理过它们之后,才能安全删除逻辑删除,否则可能会使分散的副本重新生成您认为已删除的记录。

所以我总结一下,你的问题与断开的同步有关。

所以这就是我认为应该发生的事情:

初始同步您可以检索数据以及与之关联的任何信息(行版本,文件校验和等)。 重要的是你存储这些信息并保持原始状态直到下一次成功同步。 应对此数据的COPY进行更改。

跟踪更改如果您正在处理数据库行,我们的想法是,您基本上必须跟踪插入,更新和删除操作。 如果你正在处理像xml这样的文本文件,那么它会稍微复杂一些。 如果多个用户可能同时编辑此文件,那么您必须拥有差异工具,因此可以在更精细的级别(而不是整个文件)中检测到冲突。

检查冲突如果您只是处理数据库行,则很容易检测到冲突。 每当更新行时,你可以有另一列增加(我认为mssql内置不确定mysql)。 因此,如果您拥有的副本的数量与服务器上的副本数量不同,那么您就会发生冲突。 对于文件或字符串,校验和将完成工作。 我想你也可以使用修改日期,但要确保你有一个非常精确和准确的测量,以防止未命中。 例如:假设我检索一个文件,并在检索到文件后立即保存。 可以说时差是1毫秒。 然后我对文件进行了更改,然后我尝试保存它。 如果记录的最后修改时间仅精确到10毫秒,则我检索的文件很可能与您保存的文件具有相同的修改日期,因此程序认为没有冲突并覆盖您的更改。 所以我通常不会使用这种方法只是为了安全起见。 另一方面,在次要修改之后校验和/哈希冲突的可能性几乎为零。

解决冲突现在这是棘手的部分。 如果这是一个自动过程,那么您必须评估情况并决定是否要覆盖更改,丢失更改或再次从服务器检索数据并尝试重做更改。 幸运的是,似乎会有人际互动。 但编码仍然带来很多痛苦。 如果要处理数据库行,则可以检查每个列,并将其与服务器中的数据进行比较,并将其显示给用户。 我们的想法是以非常精细的方式向用户呈现冲突,以免压倒他们。 大多数冲突在许多不同的地方存在非常小的差异,因此一次向用户呈现一个小差异。 所以对于文本文件来说,它几乎相同,但更复杂一百倍。 所以基本上你必须创建或使用差异工具(文本比较是一个完全不同的主题,并且在这里太广泛了),它可以让你知道文件中的小变化以及它们在类似于数据库:插入,删除或编辑文本的位置。 然后以相同的方式向用户呈现。 因此,基本上对于每个小冲突,用户必须选择是否丢弃其更改,覆盖服务器中的更改或在发送到服务器之前执行手动编辑。

因此,如果你做得对,如果有的话,应该给用户一个冲突列表。 这些冲突应该足够精细,以便用户快速决定。 因此,例如,冲突是拼写的变化,用户更容易从单词拼写中进行选择,而不是给用户整个段落并告诉他有变化,他们必须决定做什么然后,用户必须寻找这个小拼写错误。

其他注意事项:数据validation – 请记住,您必须在解决冲突后执行validation,因为数据可能已经更改了文本比较 – 就像我说的,这是一个很大的主题。 所以google吧! 断开同步 – 我认为那里有一些文章。

资料来源: https : //softwareengineering.stackexchange.com/questions/94634/synchronization-web-service-methodologies-or-papers