1

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

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

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

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

新要求是条目的排序。

有两个客户端应用程序 - x,y。他们存储了条目 - A、B、C 和 D。这些条目数组为 DCBA,因此 A 的 order 属性为 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)

如何同步这些订单信息?


*附加测试*

客户 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 回答