2008-11-29 57 views
12

我有一個相當簡單的同步問題。我有一個包含大約10列的表,我希望在3個不同客戶端上的sqlite文件之間保持同步:Iphone客戶端,瀏覽器客戶端和Ruby on Rails客戶端。所以我需要一個適用於所有3的簡單的合併解決方案,即我可以在Javascript,Objective C和Ruby中輕鬆實現它,並且它可以與HTTP上的JSON一起使用。我查看了其他同步解決方案的各種組件,如git中的一些,Google Gear社區中的一些教程以及一個名爲acts_as_replica的rails插件。我的幼稚方法是簡單地在數據庫中創建最後一個同步時間戳,然後創建所有刪除的更新日誌。 (我不允許更新表中的條目)。然後,我可以檢索自上次時間戳以來的所有新條目,然後與刪除操作相結合,然後在3個解決方案之間通過http發送更改日誌爲json。通過http和json同步2個sqlite表的最佳方式是什麼?

我是否應該考慮使用SHA1哈希或每個條目的UUID,還是上次同步的時間戳已足夠?我如何確保沒有重複的條目?有一個更簡單的算法,我可以遵循嗎?

回答

2

我假設修改很可能會結束。我不知道插入和更新的特徵,但這是我的想法;

  • 我會在本月和前幾個月的SHA1(或MD5,它在這種情況下無關緊要)天。與這些指紋比較是一種快速查看差異的方法。 (我今天要離開)
  • 如果前幾個月有差異,
    • 如果一個月的體積太大,我們可以拆分月份,並簡單地生成每日指紋而不是比較整個月份。
    • 否則,我們可以像對待每日更改一樣對待每月更改。
  • 找出更改發生的位置後,主副本會發送該時期所有唯一標識的列表。 (總是發送今天的信息)
  • 奴隸然後刪除什麼必須被刪除並編譯一個id列表插入。
  • 主站只發送這些記錄(全部)。

時間類別(日,月)可以根據數據量進行調整。

當然這是一個天真而簡單的算法。如果我正在處理敏感/關鍵數據,我會尋找一個transactional算法。

相關問題