1

私は、永続的なインターネット接続なしで Web サイトおよびモバイル クライアントからアクセスできる Web サービスに取り組んでいます。

アイデアは、インターネット上とすべてのクライアント上でデータベースを同期させることです。ユーザーがモバイル クライアントでデータを変更すると、ローカル データベースで変更済みとしてフラグが立てられます。ユーザーが Web サイトのデータを更新すると、オンライン DB の変更セットが増加します。同期後、クライアントは実際のデータの変更セットを記憶します。問題は、あるクライアントでデータを変更し、次に別のクライアントでデータを変更してから同期をトリガーすると、Web サーバーはどのデータが最後かを認識しないことです。

現在の動作例を次に示します。

  1. すべてが最初に同期されているとしましょう。- データは「A」
  2. 最初のクライアントがデータを変更し、変更済みとしてフラグを立てます。- データはクライアント ローカル データベースで「B」に変更されます
  3. 2 番目のクライアントがデータを変更し、変更済みとしてフラグを立てます - データはローカル データベースで「C」に変更されます
  4. 最初のクライアントがオンラインになり、オンライン データベースを更新します (テキストは現在 "B" です)。オンライン DB の変更セットが増加します。
  5. 2 番目のクライアントがオンラインになり、オンライン DB で新しい変更セットを検出し、新しいデータをダウンロードします (ローカルの "C" はオンラインの "B" に書き換えられます) (テキストは現在 "B" です)。
  6. すべてが同期されましたが、テキストは「C」ではなく「B」です

問題はステップ 6 にあると思います。クライアントは、ローカルとオンラインの両方の変更があることを知っていますが、正しい値を判断できません。

この問題を解決する方法を教えてください。チェンジセットの代わりにタイムスタンプを考えていましたが、すべてのクライアントが正確な時間を保証することはできません。

PS: サーバーは MSSQL で WCF サービスを実行し、クライアントは ASP.NET Web サイトと Andorid および WP7 スマートフォンです。クライアントに関する情報をオンライン データベースに保存することはできません。クライアント同期は +/- 1 日 1 回実行されることを期待しています。

私の質問が理解できることを願っています:)ありがとう。

4

0 に答える 0