これは、クライアント/サーバー アプリケーション システムです。
クライアント部分のアプリケーションはオフライン モードになり、サーバーと同期することがあります。(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)