1

これは、クライアント/サーバー アプリケーション システムです。

クライアント部分のアプリケーションはオフライン モードになり、サーバーと同期することがあります。(GMail オフラインなど)

複数のクライアントがサーバーに接続できるため、各クライアントはエントリを追加、編集、削除し、SVN のようにこれらの変更を同期できます (衝突が発生する可能性がありますが、問題ではありません)。

エントリの追加、編集、および削除のアルゴリズムは簡単です。サーバーは新しいエントリごとに一意の ID を作成でき、クライアントはこれらの ID を使用して更新と削除を行います。

新しい要件は、エントリの順序付けです。

x、y という 2 つのクライアント アプリケーションがあります。そして、エントリ A、B、C、D を格納しました。これらのエントリは DCBA として配列されるため、A の順序プロパティは 4、B は 3、C は 2、D は 1 です。

  • x : DCBA : A(4)、B(3)、C(2)、D(1)
  • y : DCBA : A(4)、B(3)、C(2)、D(1)

クライアント y は D と C の間に新しいエントリ E を作成します

  • x : DCBA : A(4)、B(3)、C(2)、D(1)
  • y : DECBA : A(5)、B(4)、C(3)、D(1)、E(2)

両方のクライアントがサーバーと同期した後。

  • x : DECBA : A(5)、B(4)、C(3)、D(1)、E(2)
  • y : DECBA : A(5)、B(4)、C(3)、D(1)、E(2)

これらの注文情報を同期するにはどうすればよいですか?


* 追加テスト *

Cient x は D と C を削除しますが、クライアント y は D と C の間に新しいエントリ E を作成します。

  • x : BA : A(2)、B(1)
  • y : DECBA : A(5)、B(4)、C(3)、D(1)、E(2)

同期後。

  • x : CBA : A(5)、B(4)、C(3)、D(1)、E(2)
  • y : CBA : A(5)、B(4)、C(3)、D(1)、E(2)

4

3 に答える 3

1

私はあなたがSVNプロトコルに固執するべきだと信じています。いくつかの変更が発生したかどうかを確認するために、同期(更新)せずに送信を許可しないでください。

そうしないと、保存されたデータの一貫性(一貫性)に大きな問題が発生します。たとえば、D-C-B-Aを保存し、クライアントxとyが同期されているとします。

  • クライアントxはCとAを削除します->D-B
  • クライアントzが同期し、D --Bを取得し、DとBの間にFを追加します-> D --F --B
  • 一方、クライアントyはCとBの間にEを追加します-> D --C --E --B --A

これで、すべてのクライアントが同期する場合、Fがデータシーケンスのどこに配置されるかわかりません:D-F-E-BまたはD-E-F-B。

于 2009-02-22T09:25:31.100 に答える
0

唯一難しいのは、エントリが削除されたときですよね?削除されたエントリをサーバーに保持し、削除済みとしてタグ付けするのはどうですか。すべてのクライアントがサーバーと同期されて、そのエントリが認識されなくなったら、それをサーバーから完全に削除することもできます。

于 2009-02-21T23:23:41.687 に答える
0

同期に関連するこの問題 (およびその他のいくつかの問題) をFeedSyncがどのように処理するかを確認することをお勧めします。

于 2009-02-21T18:01:43.693 に答える