在当今世界,许多计算机、移动设备或网络服务共享数据或充当集线器,同步变得更加重要.众所周知,同步的解决方案并不是最舒适的解决方案,最好不要同步.
我仍然很好奇您将如何实现同步解决方案来在多个实体之间进行同步.已经有很多不同的方法,比如比较更改的日期字段或散列并使用最新的数据,或者让用户在发生冲突的情况下 Select 他想要使用的.另一种方法是try 自动合并冲突的数据(在我看来,这不是很聪明,因为机器无法猜测用户的意思).
总之,在开始实施同步之前,我们应该回答几个与同步相关的问题:
- 最新的数据是什么?我想要如何代表它呢?
- 如果发生冲突我该怎么办?合并?我是否要提示并询问用户要做什么?
- 当我进入不一致的状态(例如,由于移动网络连接故障而断开连接)时,我该怎么办?
- 当我不想陷入一种不一致的状态时,我该怎么办?
- 如何恢复被中断的当前同步?
- 如何处理数据存储(例如,Web服务上的MySQL数据库、iPhone上的核心数据;以及如何在没有大量粘合代码的情况下合并/同步数据)?
- 我应该如何处理用户在同步期间进行的编辑(它在后台运行,这样UI就不会被阻止)?
- 我如何传播更改以及向哪个方向传播更改(例如,用户在其计算机上创建了一个"foo"条目但没有同步;然后他在路上创建了另一个"foo"条目;当他try 同步两个设备时会发生什么情况)?用户是否会有两个具有不同唯一ID的"foo"条目?用户是否只有一个条目,但是是哪一个条目呢?
- 当我有分层数据时,我应该如何处理同步?自上而下?自下而上?我是以原子方式处理每个条目,还是只查看超级 node ?过度简化和在实现上投入太多时间之间的权衡有多大?
- …
还有很多其他的问题,我希望我能给你们足够的启发.同步是一个相当普遍的问题.一旦找到了一种好的、多功能的同步方法,将其应用到具体的应用程序应该会更容易,而不是从头开始思考.我意识到已经有很多应用程序试图解决(或成功解决)同步问题,但是它们已经相当具体了,通常对同步方法没有给出足够的答案.