用于同步条目顺序的算法

时间:2009-02-21 17:54:35

标签: algorithm sync

这是客户端/服务器应用程序系统。

客户端部分应用程序可以脱机模式,有时可以与服务器同步。 (比如GMail离线)

多个客户端可以连接到服务器,因此每个客户端都可以添加,编辑和删除其条目,并同步这些更改,如SVN(可能会发生冲突,但这不是问题。)

添加,编辑和删除条目的算法很简单。服务器可以为每个新条目创建唯一ID,客户端使用这些ID进行更新和删除。

新要求是条目的排序。

有两个客户应用 - x,y。并且它们存储了条目--A,B,C和D.这些条目数组为D-C-B-A,因此A的顺序属性为4,B为3,C为2,D为1.

  • x:D-C-B-A:A(4),B(3),C(2),D(1)
  • y:D-C-B-A:A(4),B(3),C(2),D(1)

客户端y在D和C之间创建新条目E

  • x:D-C-B-A: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:D-E-C-B-A:A(5),B(4),C(3),D(1),E(2)
  • y:D-E-C-B-A:A(5),B(4),C(3),D(1),E(2)

如何同步这些订单信息?


*附加测试*

Cient x删除D和C,但客户端y在D和C之间创建新的条目E.

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

同步后。

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

3 个答案:

答案 0 :(得分: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.

答案 1 :(得分:0)

您可能希望了解FeedSync如何处理同步中涉及的此问题(以及其他一些问题)。

答案 2 :(得分:0)

唯一困难的部分是删除一个条目,对吧?如何将已删除的条目保留在服务器上,但将其标记为已删除。一旦所有客户端都与服务器同步,所以他们都不知道该条目,您也可以从服务器中永久删除它。