0

現在、会社の同期アプリケーションの開発を任されています。クライアントデータベースと同期されるデータベースサーバーにSQLサーバーがあります。クライアント データベースは不明です。SQLite や MYSQL などの可能性があります。

この同期アプリが行うことは、サーバーおよびクライアント データベースで発生する変更を検出することです。これらの変更を保存して同期します。サーバー データベースで変更が発生すると、クライアント データベースと同期され、その逆も同様です。

私はそれについていくつかの調査を行い、多くの解決策を知るようになりました。その 1 つは、Microsoft Sync Framework を使用することです。しかし、リモート データベースと同期するための適切な実装例はほとんど見つかりませんでした。

次に、SQL Server 2008 で Change Data Capture(CDC) に出会いました。CDC は、トリガーを介してソース テーブルの変更を検出し、これらの変更を sync_table という別のテーブルに配置することで機能します。このテーブルは同期に使用されます。

マシンに十分なデータベース権限がないため、CDC 機能を使用できないため、CDC のように機能する独自のソリューションの開発を開始しました。ソーステーブルごとに個別の sync_table を作成し、データの変更を検出するトリガーを作成して、このデータを sync_table に入れます。

ただし、最適な実装方法を選択するために、さらに調査を行うことをお勧めします。

次のことを心に留めておく必要があります。

  • データベースは同じネットワーク上にある場合とない場合があります。
  • サーバー側では、同期プロセスに参加するテーブルをユーザーが選択できる必要があります。
  • サーバー データベースと同期するデバイスを最初に登録する必要があります。つまり、同期を開始する前に、すべてのクライアント デバイスがユーザーによって登録されます。

いつものように、助けていただければ幸いです:)

4

1 に答える 1

3

多くの同じ目標を持つ SymmetricDS と呼ばれるオープン ソース プロジェクトがあります。ドキュメントとデータモデルを見てください問題がどのように解決されたかを確認してください。おそらくいくつかのアイデアが得られるでしょう。各ソース テーブルの個別のシャドー テーブルの代わりに、単一の sym_data テーブルがあり、すべてのデータがコンマ区切り値形式でキャプチャされます。利点は、キャプチャされたデータを検索し、同じトランザクションの一部であった変更を取得する場所が 1 か所であることです。データが正常に転送された後、テーブルを頻繁にパージすることにより、テーブルを小さく保ちます。データ転送には Web プロトコル (HTTP) を使用します。利点は、ファイアウォールを介したパフォーマンス、管理、および既知のフィルタリングのために既存の Web サーバーを活用することです。クライアントが同期を許可される前に使用される登録プロトコルもあります。サーバー管理者は、クライアント ID の「登録を開く」ことで、クライアントが初めて接続できるようにします。多くの異なるデータベースをサポートしているため、

于 2012-09-04T20:37:54.437 に答える