Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 同步条目顺序的算法_Algorithm_Sync - Fatal编程技术网

Algorithm 同步条目顺序的算法

Algorithm 同步条目顺序的算法,algorithm,sync,Algorithm,Sync,这是客户机/服务器应用程序系统 客户端应用程序可以脱机模式,有时还可以与服务器同步。(如GMail离线) 多个客户端可以连接到服务器,因此每个客户端都可以添加、编辑和删除其条目,并像SVN一样同步这些更改(可能会发生冲突,但这不是问题) 添加、编辑和删除条目的算法很简单。服务器可以为每个新条目创建一个唯一的ID,客户端使用这些ID进行更新和删除 新的要求是条目的顺序 有两个客户端应用程序-x,y。它们存储条目A、B、C和D。这些条目以D-C-B-A的形式排列,所以A的顺序属性是4,B是3,C是2

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

客户端应用程序可以脱机模式,有时还可以与服务器同步。(如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)


您可能想看看如何处理同步中涉及的这个问题(以及其他几个问题)。

您可能想看看如何处理同步中涉及的这个问题(以及其他几个问题)。

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

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

我认为您应该遵守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。

我认为您应该遵守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