是的,我知道有几个问题与与 iPhone 和 Web DB 同步有关,但没有一个对我有帮助。 我也做了很多谷歌搜索,但我很少找到有关双向同步的信息。也许我只是使用了错误的关键字。
我现在正在构建一个应用程序,我想到了为我的应用程序和 Web 服务添加双同步。 我的第一个想法是,这会简单得离谱,但事实证明根本就没有那么容易。 我发现了几个问题和一些解决方案,但我想听听你们这些灵魂是否会产生其他问题,或者这些解决方案是好是坏。
我的应用程序的想法是帮助我同步我的笔记,我将在旅途中使用我的 iPhone 以及在工作或家中使用 Web 应用程序。 这两端应该始终同步,因为我不知道在任何时候我将使用哪种设备(iPhone 或计算机)来记录、编辑或只是阅读我的笔记。
我两边都有:
对于我的 Web 服务(和 Web 应用程序),我将使用 Rails,我认为在数据库端使用 mysql。 在 iPhone 上,我将使用带有 Objective-C 包装器 (FMDB) 的 SQLite 数据库。 两者都将通过 JSON 交换数据(在 iPhone 端使用 JSON 框架)。
到目前为止我的想法:
两边的主键必须是唯一的
作为主键,我将使用
UUID
。我认为这对双方来说都是一个独特的解决方案,并且不会产生任何重复(至少我希望如此)。修改数据变化
每个更改都将保存为带有
SHA1
key 的修订版,我将从date + note data
创建该 key 。 修订对象还包括如下信息:- 日期
- 哪个笔记对象属于这个修订版
- 在哪个设备上进行更改?
- 发生了什么变化? (实际上我不确定是否包含此信息)
到目前为止,我的“解决方案”是我将跟踪历史表上的每一次修改(创建、更新、删除),两边都有修订。 在 iPhone 端,我将首先从 Web DB 更新我的历史表,然后将我的更改提交到 Web DB。 这应该有效,对吧?
这对我来说听起来还不错,但我的问题是如何处理冲突?我不想用如何处理冲突的消息来打扰用户。
我的问题综述:
- 我的“解决方案”是好是坏?我应该改变什么才能让它变得更好?
- 我如何处理更改冲突以使用户不会注意到它们?
- 你有任何我可以阅读的关于双向同步的资源吗?
编辑:
谢谢大家的回答。我现在知道我不是唯一遇到这个“问题”的人,并且没有适用于所有应用程序的简单且适合的解决方案。我假设到目前为止我的想法或解决方案做得很好,我会尝试提出同步规则。
到目前为止,我的想法是:我会尽可能简单地开发它,并将它用于我自己的需要。解决我在使用和同步时发现的问题。之后我会邀请我的 friend 们测试并解决他们遇到的问题。 我认为通过这种方式我可以想出将我的数据与 Web 同步的现实世界规则,因为我可以看到人们实际在做什么以及问题出在哪里。
你怎么看?
最佳答案
“这取决于。”
每个人都喜欢他们答案中的那句话。
双向同步从根本上归结为解决冲突。并且只有您作为应用程序设计者才能提出解决冲突的规则。
没有冲突,同步很容易。
单向同步很“简单”,因为它就像双向同步一样,只是冲突规则总是偏向一方。 “让这个看起来像那样。”简单规则。
细粒度双向同步并不难,您只需要记录所做的特定更改以及完成时间,然后在同步时,您从每一方获取更改日志,将它们合并到一个日志,然后将该日志应用到每一方,从他们最后一次同步开始。
我所说的具体更改并不是指“记录已更改”,因为它太粗略了。相反,您想知道记录的“lastName”已更改。它在 01/01/2011 12:23:45 更改。
当 A 方说 lastName 在 01/01/2011 12:22:45 更改为“Johnson”,B 方说 lastName 在 01/01/2011 12:22:46 更改为“Smith”,然后是“Smith”是正确答案,因为它是最新的。
等等,你看到那里发生了什么吗?我只是凭空得出一条规则。 “最新胜利”。也许这对您不起作用,也许您有不同的规则。 “这取决于”。
所以,真的,这一切都归结为规则。您可以根据需要将其设置为细粒度。总会有冲突。这就是规则的用途。
因此您需要确定哪些适合您的应用。
关于iphone - 与 iPhone 和 Web 服务双向同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4562506/