2009-02-21 105 views
1

這是客戶端/服務器應用程序系統。同步條目順序的算法

客戶端應用程序可以進入脫機模式,有時會與服務器同步。 (比如GMail離線)

多個客戶端可以連接到服務器,因此每個客戶端都可以添加,編輯和刪除它的條目,並像SVN一樣同步這些更改(碰撞可能會發生,但這不是問題。)

添加,編輯和刪除條目的算法是微不足道的。服務器可以爲每個新條目創建一個唯一的ID,客戶端使用這些ID進行更新和刪除。

新的要求是條目的排序。

有兩個客戶端應用程序 - x,y。並且它們存儲條目-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)

客戶ÿ創建d和C

  • x與新條目E:DCBA:A(4),B(3),C(2),d(1)
  • y:D-E-C-B-A: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,但客戶端ÿ創建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)

回答

0

你可能想看看如何FeedSync處理同步中涉及的這個問題(和其他幾個人)。

0

唯一困難的部分是當一個條目被刪除,對吧?你如何保持刪除的條目在服務器上,但標記爲已刪除。一旦所有的客戶端都與服務器同步,所以他們都不知道這個條目了,你可以從服務器永久刪除它。

1

我相信你應該堅持SVN協議。您不應允許在沒有同步(更新)的情況下提交,以查看是否發生了一些更改。

如果不這樣做,那麼存儲數據的一致性(一致性)會有很大的問題。例如,您存儲了D-C-B-A,並且客戶端x和y已同步。

  • 客戶端X除去C和A - > d - B
  • 客戶Ž同步,他獲得d - B和他d和B之間添加的F - > d - F - 乙
  • 同時客戶ÿ增加了C和B E之間 - > d - C - é - B - 一個

現在,如果所有客戶端都將同步你不能告訴其中F將被放置在數據序列:d - F - é - B或d - E - F - B。