0

私は現在、SQL Server Compact 3.5 データベースを使用するタブレット用のアプリケーションに取り組んでいます。タブレット間でデータを同期する必要性が高まっています。いくつかの調査 (つまり、これこれ) の後、私のチームと私は、SQL Server 2008 R2 によってホストされる中央データベースを持つことにしました。

この例を実装した後、このアプローチにはいくつかの欠点がありました。

  • テーブルのサブセットだけでなく、データベース全体を同期したいと考えています。これには、主キーがないテーブルに主キーを追加する必要があり、各テーブルを同期スコープに追加することは言うまでもありません。

  • 同期方向に応じて、サーバー データベース (SQL Server 2008 R2 によってホストされる) またはクライアント データベース (SQL Server Compact 3.5) のいずれかが優先されます。つまり、一方のデータベースのデータが他方のデータベースによって作成されたデータを上書きする可能性があります。

私は、変更の追跡が役立つと信じており、該当する場合は、次のシナリオの解決策を見つけるために活用したいと考えています。

サーバーと 3 つのテーブルは現在、データベース内の同じデータベースと同期されています。

ID | NAME
---------
1  | JIM
2  | BOB
3  | JANE

3 台のタブレットは、それぞれの作業を行うためにオフラインになります。

タブレット 1 には、次の内容が追加されています。

4 | JOE

タブレット 2 は以下を追加します (タブレット 1 の後と仮定):

4 | BILL

タブレット 3 では、以下が追加されます (タブレット 2 以降を想定):

4 | DAVE

その後、タブレットはオンラインで再接続して、任意の順序で同期します。結局のところ、同期を行った後、サーバー データベースとクライアント データベースには次のデータが必要です。

ID | NAME
---------
1  | JIM
2  | BOB
3  | JANE
4  | JOE
5  | BILL
6  | DAVE

DBA の観点からは、マージ レプリケーションがありますが、db サーバーに対する sysadmin 権限 (または sql サーバーで自分自身に sysadmin 権限を付与するための PC 自体に対する管理者権限) がありません。したがって、可能であればこのルートを避け、同期フレームワーク (またはそれ以上) を使用したソリューションのコーディングに固執したいと思います。

上記の例を実装した後、最終的にシナリオの解決策を見つけるために正しい方向に進んでいますか、それとも他に何かする必要がありますか?

4

1 に答える 1

1

Sync Fx には PK が必要です (他に、どの行が変更されたかを一意に識別するにはどうすればよいでしょうか?)

同様に、同期するテーブルを明示的に指定する必要があります。

ただし、シナリオは競合につながります。Sync Fx は PK 値を並べ替えません。ソースから読み取るものは、宛先に保存されるものです。(client1 の #4 が実際にはサーバーの #5 であるとどのように判断できますか?)

Fx を同期するかどうかに関係なく、PK の ID 値を使用すると、PK 値の衝突が発生します。

于 2015-03-19T06:59:18.950 に答える