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

2024-03-17

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

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

双方都可以编辑、删除和更新业务对象。双方都可以在本地存储对象,但仅在 iPhone 端启动同步以进行离线查看。所有对象都有一个updated_at和created_at时间戳,并由双方的RDBMS支持(iPhone端的SQLite和网络上的MySQL......再说一次,我认为这并不重要),并且手机确实记录了最后一次a已尝试同步。否则,不会存储其他数据(目前)。

您将使用什么算法来最大程度地减少同步系统之间的网络通信?如果“软删除”不是一个选项,您将如何处理删除?您将添加哪些数据模型更改来促进这一点?


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

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

为了支持删除同步,需要某种形式的软删除,但这可以采用“逻辑删除”记录的形式,其中仅包含已删除行的键。只有在确定所有副本都已处理墓碑后,才能安全删除墓碑,否则落后的副本可能会复活您认为已删除的记录。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在两个不同的系统之间同步对象,最好的方法是什么? 的相关文章

随机推荐