[英]Sync SQLite3 database with iCloud
之前曾多次问过这个问题,但我一直找不到完整的答案。 我需要使用sqlite3数据库将数据存储在我的应用程序中,而核心数据不是一种选择。 我想使用iCloud在设备之间同步数据,最好的方法似乎是将SQL事务日志发送到iCloud并使用它们使设备保持最新。 到目前为止,我想出的过程如下:
我相信我可以通过将数据下拉到每个设备并执行更新每个本地副本的命令来完成此工作。 我设想的唯一问题是,当两个设备都脱机时将其插入到同一表中,然后进行同步。 例如:
现在,我们遇到一种情况,这些记录的主键在每个设备上都被反转了,这将中断到依赖于主键进行链接的表的链接。
我仍在尝试解决此问题的方法,但与此同时,如果有人提出建议,我将非常感谢!
我整天都在考虑这个问题,并且我想出了一个解决方案。 我将其发布在这里,以查看是否有人有任何评论,明天我将着手实现它。
我的想法是取消自动递增的整数主键,然后将其替换为基于字符串的键。 密钥将根据设备的UUID和时间戳生成。 这意味着密钥是设备特定的,行是唯一的。 因此,使用这种方法从上面重新说明INSERT示例(使用简化的字符串方便阅读):
之所以可行,是因为设备知道事务将导致插入使用设备特定值进行键控的行。 因此,在插入操作之后,键列中没有重复值的危险。
欢迎对此方法有任何想法!
更新我正在将其标记为正确的答案,因为它起作用了。 这是我修改现有数据库(和应用程序)以允许跨设备同步的方式。 幸运的是,这还不是生产应用程序,因此所需的数据库重大更改没有引起问题。
关于该过程的实施,我到了第5步。到目前为止,还没有实施iCloud特定的东西。 但是,我已经通过在运行该应用程序副本的设备之间手动复制事务日志来测试了该过程,并且可以确认该过程可以正常工作。 包含设备UUID的TEXT主键可确保不会发生冲突。 所有设备都可以插入彼此的数据,并且密钥始终是唯一的。
这样做的缺点是数据库将更大(因为键长于整数),并且由于涉及大量字符串比较,因此查询可能需要更长的时间。 但是,我使用的数据库相对较小,并且每个用户交互只有几个查询,因此在这里我不会遇到问题。
我希望这对其他遇到相同问题的人有用:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.