ですから、よくある質問のように思えますが、答えを見つけることができないようです。私は見つけようとしていますローカルでデータを維持し、そのデータを多くのクライアント間で共有されるリモートデータベースに同期するデータベースを構築する方法の「ベストプラクティス」は何ですか。より明確にするために、このリモートデータベースには、それを使用する多くのクライアントが存在します。
たとえば、個別の項目を持つTo-Doリスト(SQL)を保存するデスクトップアプリケーションがあるとします。次に、さまざまなクライアント情報すべての「マスター」コピーがあったWebサービスにそのデータを送信できるようにしたいと考えています。 クライアントのテーブルとWebサービステーブルの実際のアーキテクチャについて考えているだけなので、同期の問題については心配していません
これが私がそれについてどう考えていたかの例です:
クライアントデータベース
list
--list_client_id (primary key, auto-increment)
--list_name
list_item
--list_item_client_id (primary key, auto-increment)
--list_id
--list_item_text
Webベースのマスターデータベース(多くのクライアント間で共有)
list
--list_master_id
--list_client_id (primary key, auto-increment)
--list_name
--user_id
list_item
--list_item_master_id (primary key, auto-increment)
--list_item_remote_id
--list_id
--list_item_text
--user_id
クライアントがアイテムを含むToDoリストを作成し、これをいつでもWebサービスと同期できるという考えになります(つまり、データ接続が失われ、後でないと情報を送信できない場合、何も得られません。注文)。 Webサービスは、クライアントIDを持つレコードを追加フィールドとして記録します。このように、クライアントは「リスト番号4を新しい名前で更新する」と言うことができ、サーバーはこれを「ユーザー12のリスト番号4を新しい名前で更新する」と解釈します。
同様のケースがありました。ソリューションはちょっと変わっていて、メインサーバーでもローカルクライアントでも、各データベースは同じデータベース構造またはスキーマのコピーを持っていました。 (同じフィールドと同じフィールドタイプの同じテーブル)。
クライアントテーブルカタログを追加します。
create table client
{
client_key int primary key,
client_title varchar(200)
}
各テーブルの主キーは整数でしたが、最大9999 9999 9999 9999までの整数で、固定タイプの文字列/文字であるとして管理されました
その長さは、大量をサポートするのに十分な大きさでした。レコードの。
ゼロによるパディングをサポートするために、逆に格納された数値。 「4」を格納したい場合は、「4000 0000 0000 0000」のようになります。
最初の3桁にはテーブルのキーが格納され、0が埋め込まれます。残りの12桁には、ゼロが埋め込まれたキーの増分値が格納されます。
したがって、次のデータ:
Client Sequential Number <other fields>
1 1 ...
2 1 ...
3 1 ...
1 2 ...
2 2 ...
3 2 ...
1 3 ...
2 3 ...
3 3 ...
次のように、各テーブルの主キーに格納されました。
Table_Key <other fields>
1000000000001000 ...
1000000000002000 ...
1000000000003000 ...
2000000000001000 ...
2000000000002000 ...
2000000000003000 ...
3000000000001000 ...
3000000000002000 ...
3000000000003000 ...
主キーの衝突を回避するため。
地元の店舗をご希望とのことですが、 todoリストのローカルコピーはデータをアップロードし、マスターデータベースに同期します。サービスの作成は難しい部分ではありませんが、データベース間の同期の管理です。最近、nServiceBus http://nservicebus.com/ を調べて、システム間のデータ同期の管理を改善しています。それは私が興味を持っている分野ですが、最高のアプローチまたは魔法の弾丸をまだ見つけていません。 nServiceBusを確認することをお勧めします。