中央サーバーと同期する多くのクライアントアプリケーションがあります。 C#、MS SQLサーバー、Winフォーム、ASP.NET MVC + APIを使用しています。
サーバーデータベースとローカルデータベース全体でデータ変更の双方向同期を実行する方法を学習/構成する必要があります。
私のサーバーとローカルデータベースは、ほぼ(ただし完全ではない)完全に一致しています。
従業員、アイテム、製品、場所などのテーブルがあり、これらはサーバーまたはローカルクライアントで変更できます->このデータをマージする必要があります。
例1:
ある場所に商品があり、そこにある数量を保管しています。場所の数量は、Webサイトまたはクライアントを介して変更できます(同期前に同時に)。
潜在的なソリューション1:
私が持っているすべてのデータベーステーブルについて。それらに対する変更の監査テーブルを作成し、それらを同期します。
ProductInLocation
ProductInLocationAudit
次に、サーバーでテーブルごとの違いを計算し、それに応じて同期できます(つまり、ServerQty = LocalQtyAfter-LocalQtyBefore)
潜在的なソリューション2:
すべてのテーブルに対するすべての編集を単一のデータベースに保存します。
AuditTable
このようにしてリフレクションを使用できますか?正しいモデルを取得するには、整数間の差を計算し、単純に文字列を上書きしてデータを同期します。
潜在的なソリューション3:
Microsoft Sync Framework
それは仕事をするようですが、私はそれが日没されている/間もなく沈むと信じていますか?
潜在的なソリューション4:
SQL Serverを使用してデータの変更を直接追跡しますが、これをソース管理に組み込むのは困難であり、保存する前にデータを操作する(つまり、整数の違いを解決する)ための高度なコードが必要です。
どのソリューションを採用するか(もしあれば)?落とし穴が最も少ない/成功する可能性が最も高いのはどれですか?
このタイプのことを行う必要がある標準的な/正しい方法はありますか?
レプリケーションは困難です。特に、複数のデータベースが関与する双方向の方法が必要なため、非常に困難です。解決しなければならない多くの落とし穴があります。また、リレーショナルデータベースは、整合性を保証する単一の場所の中央データベースサーバーとして設計されています。中央のサーバーでより多くの成功を収め、リモートロケーション用のAPIを設計しました。
あなたの状況のために、私があなたがもはや双方向ではない方法でそれを設計するマスター・スレーブ関係を開発することについて調査します。
つまり、倉庫の場所が自社の在庫のマスターになる可能性があるため、中央サーバーと一方向で同期させることができます。倉庫は自分の在庫のマスターになり、他の人はそれを見ることができますが、直接変更することはできません。何かを転送する必要がある場合は、(api)メッセージを送信してアイテムを「予約」できます。そうすれば、倉庫のアイテムに「到達」できますが、倉庫はアイテムの管理を担当します。
つまり、簡単に言えば、問題を双方向同期ではなく、一方向同期の問題にしてみてください。