双方向データ同期のベストプラクティス/パターン


52

私の仕事では、多くの場合、データベースシステム間の双方向データ同期のアイデアが現れます。典型的な例は、2つのわずかに異なるCRMシステム(たとえば、Raiser's EdgeとSalesforce)と、それらの間で連絡先データの双方向同期が必要な場合です。

APIの考慮事項は別として、同期する共有キーがあり、使用するアルゴリズム/パターンを純粋に考えている場合、これは技術者以外によって過小評価されることが多いタスクです。

たとえば、次のことに注意する必要があります。

  • 両方のシステムでどのレコードが変更されたかを簡単に検出できますか(または、システム間ですべてのレコードを比較して変更を検出する必要がありますか)
  • N時間に1回の同期を行う場合、両方のシステムで同じレコードが多かれ少なかれ同じ時間に変化する競合に対処する方法
  • リアルタイム同期(つまり、1つのシステムの更新がすぐに他のシステムの更新をトリガーする)を予定している場合、バグまたはシステムクラッシュによる時間の経過に伴う逸脱の処理方法

個人的に私はこれすべてに取り組む方法を考えることができますが、私が参照できるよく知られたパターン、文献またはベストプラクティスがあるかどうか疑問に思っています。


フェデレーションデータベースシステムに非常に近いように聞こえますが、それは正しいですか?
-gnat

@gnat:リンクのおかげで、いくつかの懸念は似ています(たとえば、不均一性を扱う)が、2つの自律的なデータベースからのデータのサブセットを同期することについて話しているのに対し、それはすべての完全に統合されたビューを作成することのようです複数のデータベース間で。
codeulike

1
7年後、50の賛成票がありますが、まともな答えは1つだけです。いくつかの同期パターンまたはベストプラクティスが存在する必要がありますか?
codeulike

回答:


8

はい、簡単に過小評価されている難しい問題です。そして、多くの作業になる可能性があります。Microsoftテクノロジーを使用している場合は、Microsoft Sync Frameworkをこちらこちらでご覧ください


1
ありがとう、それは面白い。Ms Sync Frameworkについて聞いたことがありますが、それがそれほど一般化されていることに気づいていませんでした。基本的には、一般的な同期の問題を処理するためのパターンです。
codeulike

2
Microsoft Sync Frameworkは、Microsoft Sync Framework Toolkitに置き換えられました。
トマスKubes 14

私は特にSQL Server以外のADO.NETデータプロバイダー向けのドキュメントに不満を感じています。それに加えて、私の職場は、インフラストラクチャテーブルの追加/本番環境での変更を必要としないものを探しています。だから私はこれを破棄しようとしています。
-Veverke

0

リモートサイトのDB同期について多くの理論があります。まずINSERTから始めます。これは簡単に処理できます-すべてのサイトに一意のIDを作成できるため(たとえば、サイト名+ ID(番号)のイニシャル:site_a_177とsite_b_53)

したがって、挿入によって競合が発生することはありません。問題はアップデートです。100%の失敗防止方法があるとは思いませんが、リモートDBでレコードを「ロック」することで、ハンドルを取得した後にのみ更新を開始できます-更新を続行し、更新を同期して終了しますその後、ロックを解除します。


1
おかげで、私はあなたが同じスキーマを持つ分散データベースについて話し、分散トランザクションを扱っていると思います。2つのDBが完全に独立しているシナリオ(たとえば、完全に異なる方法で一意のIDを割り当て、スキーマが異なる)を考えていますが、それらのデータのサブセットを同期する必要があります。
codeulike

競合はないはずです。その場合、それは非常に単純なはずです-各テーブルで同期された「最後のレコードID」を保存して、そこから続行します。
アルファシン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.