Bil*_*ing 12 sqlite iphone ios icloud
我有一个iPhone(iOS)应用程序,可以将数据保存在每个设备上的本地SQLite数据库中.该应用程序用于管理孩子的虚拟银行帐户,以跟踪他们的津贴,支出,储蓄等(KidsBank和KidsBank Free).我收到了很多父母的请求,要求父母之间甚至他们孩子的iOS设备之间提供同步功能.
我已经考虑了几个选项,但是所有这些选项都很乏味且非常重要,因为这基本上需要数据库复制或新架构.理想情况下,任何设备上的任何事务都应该出现(同步)到系列中的所有设备(尽可能立即).
理想情况下,我希望同步是自动和手动
选项包括(1)使用iCloud(2)使用设备之间的直接网络连接(wifi)(3)使用服务器端数据库和Web服务(JSON/RESTFul)
(1)iCloud PRO:iCloud提供分布式文件同步CON:需要iOS 5,SQLite数据库文件无法通过iCloud同步,经典数据库复制(和非平凡)
使用iCloud是一个很好的考虑因素.设备可以将自定义事务日志写入iCloud文件,其中每个设备都有一个文件,该文件由唯一的设备ID标识.全局唯一ID(GID)和最后更改时间戳将添加到每个表中.所有参与的设备都会将唯一的设备ID写入iCloud中的单独文件.在应用程序启动或更改日志文件时,在特定设备上运行的应用程序将通过iCloud从文件加载所有事务,但不加载在自己设备上生成的事务.加载事务的最后一个参与设备将从文件中删除该事务.如果设备不是最后一个参与设备,它只需在交易上签名并允许文件通过iCloud进行同步.可能有更好的算法,但基本思路是相同的 - 使用iCloud来推动变更日志.
(2)直接wifi连接将允许两个设备手动进行同步.PRO:管理同步过程并不复杂CON:用户必须选择在wifi上连接时从他们的应用程序同步
(3)移动整个数据库或管理服务器上的事务.专业版:不再需要同步CON:网络驱动应用的典型问题.需要重写数据库服务层(目前在SQL中)才能使用远程Web服务.运行服务器的成本(我会使用AWS).
任何人都可以提供一些在多个设备之间同步SQLite的经验吗?我倾向于使用iCloud来推动事务日志.我正在努力降低成本和复杂性.
迁移到 iCloud 可能是最好的解决方案,因为它是由 Apple 证明和制定的。您无需太担心 iOS 5 的要求,因为根据大多数统计数据,超过 90% 的人都使用它。iOS 5 可免费升级到。然后,您可以将旧版本重命名为 Lite,并继续而不同步。
同步可能是您所做的最困难的事情之一。
我提出的一个解决方案是对数据库的所有更改都会留下一个日志,其中包含时间戳、唯一 ID 和其他一些内容,以确保事务完全匿名且完全唯一。我制作了一个非常简单的 Web 服务,有两个操作,您可以向其中添加事务,因此每当用户使用 wifi 时我都会同步,因此我推送所有更改,从服务器接收结果,然后删除事务记录已同步。
另一个操作是获取记录、发送上次同步的时间戳、用户 ID 等。
所有数据均使用 JSON 发送并按原样接收。它可以轻松处理数以万计的用户,在小型 Amazon EC2 服务器上运行。
这几乎就是 iCloud 的工作原理,但我在 iCloud 之前就制定了这个解决方案。现在我要使用 iCloud,但可能需要让服务器运行 1 年左右,具体取决于使用情况。
希望这对您有帮助。
| 归档时间: |
|
| 查看次数: |
4286 次 |
| 最近记录: |