13

かなり単純な同期の問題があります。Iphone クライアント、ブラウザー クライアント、および Ruby on Rails クライアントの 3 つの異なるクライアント上の sqlite ファイル間で同期を維持したい約 10 列のテーブルがあります。つまり、Javascript、Objective C、Ruby で簡単に実装でき、JSON over HTTP で動作する単純な sycing ソリューションが必要です。私は、git のような他の同期ソリューションのさまざまなコンポーネント、Google のギア コミュニティから出てきたいくつかのチュートリアル、acts_as_replica と呼ばれる Rails プラグインを見てきました。私の素朴なアプローチは、データベースに最後に同期されたタイムスタンプを作成し、すべての削除の変更ログを作成することです。(テーブル内のエントリの更新は許可しません)。その後、最後のタイムスタンプ以降のすべての新しいエントリを取得できます。

各エントリの SHA1 ハッシュまたは UUID の使用を検討する必要がありますか、それとも最後に同期されたタイムスタンプで十分ですか? 重複エントリがないことを確認するにはどうすればよいですか? 私が従うことができるより単純なアルゴリズムはありますか?

4

1 に答える 1

3

変更はおそらく最後になると思います。挿入と更新の性質はわかりませんが、ここに私の考えがあります。

  • 私は SHA1 (または MD5、この場合は関係ありません) の日付を今月と数か月前に計算します。これらのフィンガープリントと比較すると、違いをすばやく確認できます。(今日はハッシュ化せずに残します)
  • 前の月に違いがある場合。
    • 1 か月のボリュームが大きすぎる場合は、1 か月全体を比較する代わりに、1 か月を分割して、その場で毎日のフィンガープリントを生成することができます。
    • それ以外の場合は、月ごとの変化を日ごとの変化と同じように扱うことができます。
  • 変更が発生した場所を見つけた後、マスター コピーはその期間のすべての一意の ID のリストを送信します。(常に今日の情報を発信)
  • 次に、スレーブは削除する必要があるものを削除し、挿入する ID のリストをコンパイルします。
  • マスターはそれらのレコードのみを (完全に) 送信します。

時間区分(日、月)は、データ量に応じて調整できます。

もちろん、これは素朴で単純なアルゴリズムです。機密データや重要なデータを処理する場合は、トランザクションアルゴリズムを探します。

于 2008-12-02T06:59:12.670 に答える