web-dev-qa-db-ja.com

ローカルとリモートのSQLデータベース間でデータを維持する最良の方法

ですから、よくある質問のように思えますが、答えを見つけることができないようです。私は見つけようとしていますローカルでデータを維持し、そのデータを多くのクライアント間で共有されるリモートデータベースに同期するデータベースを構築する方法の「ベストプラクティス」は何ですか。より明確にするために、このリモートデータベースには、それを使用する多くのクライアントが存在します。

たとえば、個別の項目を持つ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を新しい名前で更新する」と解釈します。

22
JoeCortopassi

同様のケースがありました。ソリューションはちょっと変わっていて、メインサーバーでもローカルクライアントでも、各データベースは同じデータベース構造またはスキーマのコピーを持っていました。 (同じフィールドと同じフィールドタイプの同じテーブル)。

クライアントテーブルカタログを追加します。

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 ...

主キーの衝突を回避するため。

2
umlcat

地元の店舗をご希望とのことですが、 todoリストのローカルコピーはデータをアップロードし、マスターデータベースに同期します。サービスの作成は難しい部分ではありませんが、データベース間の同期の管理です。最近、nServiceBus http://nservicebus.com/ を調べて、システム間のデータ同期の管理を改善しています。それは私が興味を持っている分野ですが、最高のアプローチまたは魔法の弾丸をまだ見つけていません。 nServiceBusを確認することをお勧めします。

0
Nickz