我想为最终收敛的P2P文本编辑实现Logoot,但我遇到了一些问题。
我对Logoot的理解是,对象(原始论文中的文本行,但可以是字符或单词)之间的间隔可以由于一个无限的标识符而无限划分。这意味着对象的位置不是像在WOOT中那样由它的邻居决定的(这需要墓碑),而是由字符串长度上的一个固定数值点决定的。与唯一的站点标识符相结合,这也为我们提供了一个总顺序,并实现了最终的收敛。
然而..。当对同一地点进行并发编辑时,这不会造成问题吗?如果两个断开连接的客户端在相同的光标位置开始编写新句子,然后合并,则它们的句子有很好的交错机会。
下面是我正在讨论的白板示例:

如您所见,站点B和站点C都根据Logoot规则划分了"I“和"conquered”之间的间隔,给出了(20,A)和(25,A)位置之间的随机点。但是没有任何东西对这些点进行相对排序,导致它们在合并时混合在一起。同时,基于邻居的算法可以解决这个问题,因为每个对象的因果链都得到了保留。
上面是一个小例子,但在更一般的情况下,假设两个用户想要在两个现有句子之间插入一个不同的句子。如果其中一个用户碰巧离线,他们不应该回到乱七八糟的地方!显然,为了保持意图,一句话应该跟在另一句话之后。
我在阅读这篇论文时是否遗漏了什么,或者这是Logoot固有的缺点?
(另外,为什么在算法中有一个似乎未使用的记录时钟值?论文甚至指出,在没有时钟的情况下,每个对象的标识符必须是唯一的。)
发布于 2018-10-02 03:46:02
你是对的,这是Logoot和LSEQ中的一个真正的异常。它是否构成意图违反取决于你对意图的定义。对定义的扩展要求连续序列保持连续,除非它们被随意的后续操作拆分,这将是直观的。
时钟是不必要的。最有可能的情况是,作者使用(site,clock)对或Lamport时间戳作为他们的UUID。一个站点永远不会创建两个相同的位置,因此永远不需要比较时钟。(假设消息是按顺序从站点接收的,这对于Logoot/LSEQ的其他方面也是必需的。)
https://stackoverflow.com/questions/45722742
复制相似问题