通过http和json同步2个sqlite表的最佳方法是什么?

时间:2008-11-29 03:23:26

标签: database json sqlite synchronization

我有一个相当简单的同步问题。我有一个包含大约10列的表,我希望在3个不同客户端上的sqlite文件之间保持同步:Iphone客户端,浏览器客户端和Ruby on Rails客户端。所以我需要一个适用于所有3个的简单sycing解决方案,即我可以在Javascript,Objective C和Ruby中轻松实现它,它可以通过HTTP使用JSON。我查看了其他同步解决方案的各种组件,例如git中的一个,Google齿轮社区中的一些教程,以及一个名为acts_as_replica的rails插件。我天真的方法是简单地在数据库中创建最后同步的时间戳,然后在制作时创建所有删除的更改日志。 (我不允许更新表中的条目)。然后,我可以检索自上一个时间戳以来的所有新条目,然后将其与删除组合,并在3个解决方案之间通过http发送更改日志作为json。

我应该考虑使用SHA1哈希值还是每个条目的UUID,或者是最后同步的时间戳是否足够?如何确保没有重复的条目?我可以使用更简单的算法吗?

1 个答案:

答案 0 :(得分:2)

我假设更改可能会在最后。我不知道插入和更新的特征,但这是我的想法;

  • 我会在当前月份和之前几个月的SHA1(或MD5,在这种情况下无关紧要)。与这些指纹进行比较是一种快速查看差异的方法。 (我今天离开了)
  • 如果前几个月有差异;
    • 如果一个月的音量过大,我们可以将月分开,只需动态生成每日指纹,而不是比较整月。
    • 否则,我们可以按照处理每日更改的方式处理每月更改。
  • 在找到更改发生的位置后,主副本将发送该期间所有唯一ID的列表。 (始终发送今天的信息)
  • 奴隶然后删除必须删除的内容,并编译要插入的ID列表。
  • 主人只发送那些记录(全部)。

可以根据数据量调整时间类别(日,月)。

当然这是一个天真而简单的算法。如果我正在处理敏感/关键数据,我会寻找transactional算法。