40

私の要件は、サーバー J2EE Web アプリケーションとクライアント J2EE Web アプリケーションがあることです。クライアントがオフラインになることがあります。クライアントがオンラインになると、変更を前後に同期できるはずです。また、いくつかのフィルター/ルールに基づいて、どの行/テーブルを同期する必要があるかを制御できるはずです。それを行うための既存のJavaフレームワークはありますか? 自分で実装する必要がある場合、提案できるさまざまな戦略は何ですか?

私の考えている解決策の 1 つは、SQL ログを維持し、同期中に反対側で同じステートメントを実行することです。この戦略に問題はありますか?

4

4 に答える 4

29

データの同期/複製用の Java ライブラリが多数あります。私が認識しているのは、水仙SymmetricDSの 2 つです。前世で、私はばかげて (Java で) 独自のデータ複製プロセスを実装しました。一見簡単そうに見えますが、同時に複数の場所でデータを更新できるとなると、非常に複雑です。前述のプロジェクトのいずれかを使用して、この複雑さに対処することを回避することを強くお勧めします。

于 2008-11-07T19:34:00.040 に答える
17

同期に関する最大の問題は、ユーザーが何かをオフラインで編集し、それが同時にオンラインで編集される場合です。変更された 2 つのデータをマージするか、UI を処理して、どちらのバージョンが正しいかをユーザーが判断できるようにする必要があります。両方が同時に編集される可能性を排除すれば、この厄介な問題を解決する必要はありません。

この方法は通常、すべてのテーブルに「変更済み」フィールドを追加し、特定の行の特定のレコードのクライアントの変更済みフィールドをサーバーの変更日と比較します。一致しない場合は、サーバーのデータを置き換えます。

自動生成されたキーには注意してください。クライアントからサーバーにコピーするときに、データの整合性が維持されていることを確認する必要があります。サーバー上で厳密に SQL ステートメントを再度実行すると、自動生成されたキーが変更され、突然、外部キーが意図したものとは異なるレコードを指しているという状況に陥る可能性があります。

別のソースからデータをインポートする場合、多くの場合、外部ソースからの主キーと自分の個人的な主キーを追跡します。これにより、同期が困難な状況でも、データ セット間の変更点と相違点を簡単に判別できます。

于 2008-11-07T12:55:22.827 に答える
5

シンクロナイザーは、データを更新できるのはいつか、人間が潜在的な競合を仲介する必要があるのはいつかを識別する必要があります。ロギングと代数の法則を使用してこれを行う方法を説明する論文を書きました。

于 2009-03-21T23:41:20.193 に答える
0

アプリケーションのクライアント側データ ストアとして最適なものはどれですか? SQLite などの組み込みデータベース、メッセージ キュー、オブジェクト ストア、または (Web アプリケーションであるためこれらのいずれも使用できない場合) クライアントに保存されたファイル/ドキュメントから、HTML 5 のLocalStorage APIを介して Web DB またはIndexedDBを使用して選択できます。 .

論文Gold Rush: Mobile Transaction Middleware with Java-Object Replication を確認してください。Microsoft の随時接続システムに関するドキュメントでは、サービス指向またはメッセージ指向とデータ指向の 2 つのアプローチについて説明しています。ゴールドラッシュは以前のアプローチを取ります。後者のアプローチでは、データベースのマージ レプリケーションを使用します。

于 2011-05-03T15:10:06.663 に答える