我有一个 Core Data 应用程序,最终将成为 iPhone/iPad 通用应用程序。
我想实现云同步,以便运行该应用程序的 iPhone 和 iPad 可以共享数据。我打算使用最近发布的 Dropbox API。有没有人对这样做的最佳方法有任何想法?Dropbox API 允许应用程序将文件存储在云上。我当时的想法是将应用程序的数据库(sqlite)原始存储在云上,然后下载该数据库,但后来我意识到使用这种方法会使合并更改变得非常困难(而不是替换整个数据库)。
任何想法表示赞赏。谢谢。
我有一个 Core Data 应用程序,最终将成为 iPhone/iPad 通用应用程序。
我想实现云同步,以便运行该应用程序的 iPhone 和 iPad 可以共享数据。我打算使用最近发布的 Dropbox API。有没有人对这样做的最佳方法有任何想法?Dropbox API 允许应用程序将文件存储在云上。我当时的想法是将应用程序的数据库(sqlite)原始存储在云上,然后下载该数据库,但后来我意识到使用这种方法会使合并更改变得非常困难(而不是替换整个数据库)。
任何想法表示赞赏。谢谢。
如果你能侥幸成功,最简单的同步方法(到目前为止)是在本地保存三个数据副本:你上次上传的副本(“旧”),本地更改产生的副本(“我的”)以及现在从服务器下载的副本(“他们的”)。
然后,对所有三个文件中的所有记录进行排序,并逐个遍历它们:
请注意,“我的”或“他们的”或“旧的”可能不存在。在这种情况下,上述规则仍然适用;如果您选择的结果是“不存在”,那么您需要删除输出文件中的记录。
最后,将生成的文件上传回服务器,这样它将成为下一个人的“他们的”数据库。然后将新文件复制到本地“旧”和“我的”数据库。
(有比上述更节省空间的算法......但没有更简单的算法了:)现在磁盘空间非常便宜,特别是如果你压缩文件。)
您可能希望使用不同的方法进行同步。您将要处理的数据类型是什么?
我使用轻量级 Rails 后端取得了很大的成功。
您可能会查看GameKit以共享数据。否则,您似乎只需要管理与中间文件服务器的同步。
您可能希望将数据导出为原生 sqlite 格式以外的某种格式。如果我要设计这样的东西,我认为JSON可能是我选择的格式。
我没有看过 Dropbox API,但它们支持上传和下载文件的差异,而不是整个文件,对吧?根据 API 的工作方式,也许让您的应用程序了解它们的“差异”格式并使用它可能会更容易......