13

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

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

4

1 回答 1

3

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

  • 我会 SHA1(或 MD5,在这种情况下无关紧要)当月和前几个月的日子。与这些指纹进行比较是一种快速查看差异的方法。(我今天离开时没有散列)
  • 如果前几个月有差异;
    • 如果一个月的交易量太大,我们可以拆分该月并简单地动态生成每日指纹,而不是比较整个月。
    • 否则,我们可以像对待每日变化一样对待每月变化。
  • 在找出更改发生的位置后,主副本将发送该期间所有唯一 ID 的列表。(总是发送今天的信息)
  • 然后从机删除必须删除的内容并编译要插入的 id 列表。
  • 主机只发送那些记录(完整)。

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

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

于 2008-12-02T06:59:12.670 回答