我正在使用基于XML的有效负载在iPhone和网站之间同步两个业务对象,并且愿意为最佳例程征求一些想法.
这个问题的本质是相当通用的,我可以看到它适用于需要在Web实体和客户端(桌面,移动电话等)之间同步业务对象的各种不同系统.
可以双方编辑,删除和更新业务对象.双方都可以在本地存储对象,但同步仅在iPhone端启动,以便断开连接查看.所有对象都有一个updated_at和created_at时间戳,并且两边都有一个RDBMS支持(iPhone端的SQLite和网络上的MySQL ......再次我认为这不重要)并且手机确实记录了最后一次尝试同步.否则,不存储其他数据(此刻).
您将使用什么算法来最小化系统之间的网络聊天以进行同步?如果"软删除"不是一个选项,你将如何处理删除?您会添加哪些数据模型更改以设置此功能?
最简单的方法:同步时,传输所有记录where updated_at >= @last_sync_at
.向下:这种方法根本不能容忍时钟偏差.
保持每次更新行时增加的版本号列(以便时钟偏差不会影响您的同步过程)和最后同步的版本号(以便可以识别可能存在冲突的更改)可能更安全.为了提高带宽效率,请在发送到每个复制对等体的最后一个版本的每个数据库中保留一个缓存,以便只需要传输已修改的行.如果这将是星型拓扑,则叶子可以使用简化的模式,其中最后同步的版本存储在每个表中.
为了支持删除同步,需要某种形式的软删除,但是这可以是"逻辑删除"记录的形式,其仅包含已删除行的键.只有在确定所有副本都已处理过墓碑后,才能安全删除逻辑删除,否则可能会使分散的副本重新生成您认为已删除的记录.