【发布时间】:2010-01-19 09:12:52
【问题描述】:
在当今许多计算机、移动设备或网络服务共享数据或充当集线器的世界中,同步变得更加重要。众所周知,同步解决方案并不是最舒服的解决方案,最好不要同步。
我仍然很好奇您将如何实施同步解决方案以在多个实体之间进行同步。已经有很多不同的方法,例如比较更改的日期字段或哈希并使用最新数据或让用户选择他想在发生冲突时使用的内容。另一种方法是尝试自动合并有冲突的数据(我认为这不太聪明,因为机器无法猜测用户的意思)。
无论如何,在开始实施同步之前,我们应该回答几个与同步相关的问题:
- 最新数据是什么?我想如何表示它?
- 如果发生冲突,我该怎么办?合并?我是否提示并询问用户该怎么做?
- 当我进入不一致的状态(例如,由于移动网络连接不稳定而断开连接)时,我该怎么办?
- 当我不想进入不一致的状态时,我该怎么做?
- 如何恢复当前被中断的同步?
- 如何处理数据存储(例如 Web 服务上的 MySQL 数据库、iPhone 上的 Core Data;以及如何在没有大量粘合代码的情况下合并/同步数据)?
- 我应该如何处理同步期间发生的用户编辑(在后台运行,因此 UI 不会被阻止)?
- 我如何以及在哪个方向传播更改(例如,用户在他的计算机上创建了一个“Foo”条目但不同步;然后他在旅途中创建另一个“Foo”条目;当他尝试同步两个设备)?用户会有两个具有不同唯一 ID 的“Foo”条目吗?用户是否只有一个条目,但是是哪一个?
- 当我有分层数据时,我应该如何处理同步?自顶向下?自下而上?我是原子处理每个条目还是只查看一个超级节点?过于简单化和投入太多时间来实施之间的权衡有多大?
- …
还有很多其他问题,我希望我能给你足够的启发。同步是一个相当普遍的问题。一旦找到了一种好的、通用的同步方法,应该更容易将其应用到具体的应用程序中,而不是从头开始思考。我意识到已经有很多应用程序尝试解决(或成功解决)同步问题,但它们已经相当具体,一般来说并没有为同步方法提供足够的答案。
【问题讨论】:
标签: database algorithm mobile synchronization