iPad/iPhone应用程序之间的云同步

问题描述:

我有一个核心数据应用程序,最终成为iPhone/iPad通用应用程序。iPad/iPhone应用程序之间的云同步

我想实现云同步,使得iPhone和iPad的都运行该应用程序可以共享数据。我打算使用recently released Dropbox API。有没有人有关于这样做的最佳方式的任何想法? Dropbox API允许应用程序在云上存储文件。我在想的是在云上原始存储应用程序的数据库(sqlite),然后下载该数据库,但后来我意识到使用该方法会使合并更改(而不是替换整个数据库)变得非常困难。

任何想法表示赞赏。谢谢。

如果你能摆脱它,做同步(迄今为止)最简单的方法是有本地数据的副本:您上次上传(“旧”)的复印件,由局部变化所产生的副本(“雷”)及复印件现在从服务器(“他们”)下载。

然后,排序都在所有三个文件的记录,并穿行逐一:

  • 如果老雷==,使用他们的
  • 否则,如果老==他们的,用我的
  • 否则你有冲突;做一些关于它的事情(例如,总是使用我的,也就是“最后作家获胜”)

请注意,“我的”或“他们的”或“旧的”可能不存在。上述规则在这种情况下仍然适用;如果您选择的结果是“不存在”,那么您将希望删除输出文件中的记录。

最后,上传生成的文件返回到服务器,这样它会为未来的家伙了“他们”的数据库。然后将新文件复制到本地“旧”和“我的”数据库。

(有更多的空间,高效的算法比上面......但目前还没有任何容易的人:)和磁盘空间是相当便宜的今天,特别是如果你把文件压缩。)

+0

有没有什么收获? – Yoo 2011-01-23 06:32:18

+0

总是有一个问题:) – apenwarr 2011-02-03 10:55:11

你可能会考虑GameKit共享数据。否则,你似乎只需要管理与中间文件服务器的同步。

+0

我正在考虑该选项,但在两个Core Data数据库之间合并更改最简单的方法是什么? – indragie 2010-06-02 23:54:15

+0

iPhone不支持OS X提供的同步服务(http://developer.apple。com/iphone/library/technotes/tn2009/tn2152.html#SECSYNCING),所以你需要编写自己的例程。考虑在记录中添加时间戳,并允许用户决定同步如何进行的策略(例如,将最新的时间戳记录发送到所有其他设备)。 – 2010-06-03 10:37:12

您可能想要使用不同的方法进行同步。你将要处理的是什么类型的数据?

我已经使用轻量级轨道后端很成功。

+0

只是一些简单的模型对象(基本上由NSStrings,NSArrays等组成) – indragie 2010-06-02 23:57:12

+2

如果您对rails感到满意,请查看ObjectiveResource项目。 – 2010-06-03 00:27:17

+0

我很遗憾,我只有一个赞成弗兰克施密特的评论。 – corprew 2010-06-09 21:34:25

您可能想要将数据导出为本地sqlite格式以外的格式。如果我正在设计这样的东西,我认为JSON可能是我的选择格式。

我没有看过Dropbox的API,但他们支持上传和下载文件的差异,而不是整个文件,对不对?根据API是如何工作的,也许有你的应用程序了解他们的“差异”的格式,并与可能是更容易的工作...

+0

将数据转换为JSON不会成为问题。我还有的问题是如何有效地合并两个库之间的更改。 – indragie 2010-06-03 00:06:11

+0

不幸的是,同步通常是一个难题。如果你想在两个方向上同步,你需要为每条记录保留一些修改计数,并在合并时采用“最新”版本。真正的挑战来自合理的处理冲突。 – 2010-06-03 16:44:20

+0

这就是我所想的,我需要找出解决冲突的方法。我想到的一个特定场景是,如果设备A有一条记录,但后来被删除,设备B有该记录但未被删除,我不希望设备A在同步时获取该记录。很难 – indragie 2010-06-05 17:34:21