web-dev-qa-db-ja.com

多くのクライアントアプリケーションから中央サーバーへの双方向の同期を実行する方法

中央サーバーと同期する多くのクライアントアプリケーションがあります。 C#、MS SQLサーバー、Winフォーム、ASP.NET MVC + APIを使用しています。

サーバーデータベースとローカルデータベース全体でデータ変更の双方向同期を実行する方法を学習/構成する必要があります。

私のサーバーとローカルデータベースは、ほぼ(ただし完全ではない)完全に一致しています。

従業員、アイテム、製品、場所などのテーブルがあり、これらはサーバーまたはローカルクライアントで変更できます->このデータをマージする必要があります。

例1:

ある場所に商品があり、そこにある数量を保管しています。場所の数量は、Webサイトまたはクライアントを介して変更できます(同期前に同時に)。

潜在的なソリューション1:

私が持っているすべてのデータベーステーブルについて。それらに対する変更の監査テーブルを作成し、それらを同期します。

ProductInLocation

  • 製品
  • ロケーション
  • 数量

ProductInLocationAudit

  • ProductBefore
  • ProductAfter
  • ロケーション
  • LocationAfter
  • 数量前
  • QtyAfter

次に、サーバーでテーブルごとの違いを計算し、それに応じて同期できます(つまり、ServerQty = LocalQtyAfter-LocalQtyBefore)

潜在的なソリューション2:

すべてのテーブルに対するすべての編集を単一のデータベースに保存します。

AuditTable

  • 型番
  • 物件
  • BeforeValue
  • AfterValue
  • データ・タイプ

このようにしてリフレクションを使用できますか?正しいモデルを取得するには、整数間の差を計算し、単純に文字列を上書きしてデータを同期します。

潜在的なソリューション3:

Microsoft Sync Framework

それは仕事をするようですが、私はそれが日没されている/間もなく沈むと信じていますか?

潜在的なソリューション4:

SQL Serverを使用してデータの変更を直接追跡しますが、これをソース管理に組み込むのは困難であり、保存する前にデータを操作する(つまり、整数の違いを解決する)ための高度なコードが必要です。

どのソリューションを採用するか(もしあれば)?落とし穴が最も少ない/成功する可能性が最も高いのはどれですか?

このタイプのことを行う必要がある標準的な/正しい方法はありますか?

4
Smithy

レプリケーションは困難です。特に、複数のデータベースが関与する双方向の方法が必要なため、非常に困難です。解決しなければならない多くの落とし穴があります。また、リレーショナルデータベースは、整合性を保証する単一の場所の中央データベースサーバーとして設計されています。中央のサーバーでより多くの成功を収め、リモートロケーション用のAPIを設計しました。

あなたの状況のた​​めに、私があなたがもはや双方向ではない方法でそれを設計するマスター・スレーブ関係を開発することについて調査します。

つまり、倉庫の場所が自社の在庫のマスターになる可能性があるため、中央サーバーと一方向で同期させることができます。倉庫は自分の在庫のマスターになり、他の人はそれを見ることができますが、直接変更することはできません。何かを転送する必要がある場合は、(api)メッセージを送信してアイテムを「予約」できます。そうすれば、倉庫のアイテムに「到達」できますが、倉庫はアイテムの管理を担当します。

つまり、簡単に言えば、問題を双方向同期ではなく、一方向同期の問題にしてみてください。

2
Pieter B