iphone - 与 iPhone 和 Web 服务双向同步

标签 iphone database web-services synchronization

是的,我知道有几个问题与与 iPhone 和 Web DB 同步有关,但没有一个对我有帮助。 我也做了很多谷歌搜索,但我很少找到有关双向同步的信息。也许我只是使用了错误的关键字。


我现在正在构建一个应用程序,我想到了为我的应用程序和 Web 服务添加双同步。 我的第一个想法是,这会简单得离谱,但事实证明根本就没有那么容易。 我发现了几个问题和一些解决方案,但我想听听你们这些灵魂是否会产生其他问题,或者这些解决方案是好是坏。

我的应用程序的想法是帮助我同步我的笔记,我将在旅途中使用我的 iPhone 以及在工作或家中使用 Web 应用程序。 这两端应该始终同步,因为我不知道在任何时候我将使用哪种设备(iPhone 或计算机)来记录、编辑或只是阅读我的笔记。

我两边都有:

对于我的 Web 服务(和 Web 应用程序),我将使用 Rails,我认为在数据库端使用 mysql。 在 iPhone 上,我将使用带有 Objective-C 包装器 (FMDB) 的 SQLite 数据库。 两者都将通过 JSON 交换数据(在 iPhone 端使用 JSON 框架)。

到目前为止我的想法:

  1. 两边的主键必须是唯一的

    作为主键,我将使用 UUID。我认为这对双方来说都是一个独特的解决方案,并且不会产生任何重复(至少我希望如此)。

  2. 修改数据变化

    每个更改都将保存为带有 SHA1 key 的修订版,我将从 date + note data 创建该 key 。 修订对象还包括如下信息:

    • 日期
    • 哪个笔记对象属于这个修订版
    • 在哪个设备上进行更改?
    • 发生了什么变化? (实际上我不确定是否包含此信息)

到目前为止,我的“解决方案”是我将跟踪历史表上的每一次修改(创建、更新、删除),两边都有修订。 在 iPhone 端,我将首先从 Web DB 更新我的历史表,然后将我的更改提交到 Web DB。 这应该有效,对吧?

这对我来说听起来还不错,但我的问题是如何处理冲突?我不想用如何处理冲突的消息来打扰用户。

我的问题综述:

  1. 我的“解决方案”是好是坏?我应该改变什么才能让它变得更好?
  2. 我如何处理更改冲突以使用户不会注意到它们?
  3. 你有任何我可以阅读的关于双向同步的资源吗?

编辑:

谢谢大家的回答。我现在知道我不是唯一遇到这个“问题”的人,并且没有适用于所有应用程序的简单且适合的解决方案。我假设到目前为止我的想法或解决方案做得很好,我会尝试提出同步规则。

到目前为止,我的想法是:我会尽可能简单地开发它,并将它用于我自己的需要。解决我在使用和同步时发现的问题。之后我会邀请我的 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/

相关文章:

ios - 如何在 UNNotificationRequest 中设置重复间隔和触发日期

mysql - 避免交叉连接

android - 无法读取数据库android

php - 安装名为 RIPS 的 PHP 漏洞扫描器

java - SOAP Web 服务上的 XACML 应用程序

iphone - CoreData 对象更新问题

iphone - 如何在 xcode 中更新我的 UILabel

mysql - MySql数据库转换为Postgres数据库时没有自动增量

php - 使用 PHP 调用涉及枚举的 Web 服务 (SOAP)

应用程序中使用 iPhone 相机进行扫描(如红色激光)