10

我想为最终收敛的 P2P 文本编辑实现Logoot,但我遇到了一些问题。

我对 Logoot 的理解是,对象之间的间隔(原论文中的文本行,但可以是字符或单词)可以由于无界标识符而无限分割。这意味着一个对象的位置不是由它的邻居决定,就像在 WOOT 中那样(这将需要墓碑),而是由沿着字符串长度的固定数字点决定。结合唯一的站点标识符,这也为我们提供了一个完整的顺序并实现了最终的融合。

但是......当对同一地点进行并发编辑时,这不会导致问题吗?如果两个断开连接的客户端开始在相同的光标位置写新句子然后合并,他们的句子有很好的交错机会。

下面是我正在谈论的白板示例:

白板

可以看到,站点 B 和站点 C 都按照 Logoot 的规则划分了“我”和“征服”之间的区间,给了我们在 (20,A) 和 (25,A) 的位置之间的随机点。但是没有任何东西可以相对于彼此对这些点进行排序,从而导致它们在合并时混合。同时,基于邻居的算法可以解决这个问题,因为每个对象的因果链都被保留了。

上面是一个小例子,但在更一般的情况下,想象一下如果两个用户想要在两个现有句子之间插入一个不同的句子。如果其中一个用户恰好离线,他们不应该回到乱码!显然,为了保持意图,一个句子应该在另一个句子之后。

我在阅读论文时是否遗漏了什么,或者这是 Logoot 的固有缺点?

(另外,为什么在算法中似乎没有使用记录的时钟值?论文甚至指出,每个对象的标识符在没有时钟的情况下必然是唯一的。)

4

1 回答 1

2

你是对的,这在 Logoot 和 LSEQ 中是一个真正的异常。它是否构成违反意图取决于您对意图的定义是什么。对要求连续序列保持连续的定义的扩展,除非它们被随意的后续操作分割,否则将具有直观意义。

时钟是不必要的。作者最有可能使用(站点,时钟)对或 Lamport 时间戳作为他们的 UUID,不符合惯例。一个站点永远无法创建两个相同的位置,因此永远不需要比较时钟。(假设消息是按顺序从站点接收的,这也是 Logoot/LSEQ 的其他方面所必需的。)

于 2018-10-01T19:46:01.520 回答