Я хочу внедрить Logoot для конвергентного редактирования текста P2P, и я запустил в небольшую проблему.
Мое понимание Logoot заключается в том, что интервалы между объектами (стрками текста в исходной статье, но могут быть символы или слова) могут быть разделены бесконечно из-за неограниченного идентификатора. Это означает, что положение объекта определяется не его соседями, как в WOOT (что потребовало бы надгробий), а фиксированной числовой точкой по длине строки. В сочетании с уникальным идентификатором сайта это также дает нам общий порядок и обеспечивает конвергенцию в конечном итоге.
Однако... не вызывает ли это проблемы, когда одновременные изменения вносятся в одно и то же место? Если два разъединенных клиента начинают писать новые предложения в одной и той же позиции курсора, а затем объединяются, их предложения имеют хорошие шансы чередоваться.
Ниже приведен пример доски того, о чем я говорю:
Как видите, и сайт B, и сайт C делят интервал между «I» и «завоеванным» в соответствии с правилами Logoot, давая нам случайные точки между позициями (20,A) и (25,A). Но ничто не упорядочивает эти точки относительно друг друга, заставляя их смешиваться при слиянии. Между тем алгоритмы на основе соседей могут учитывать эту проблему, поскольку цепочка причинно-следственных связей каждого объекта сохраняется.
Вышеприведенный пример — детский пример, но в более общем случае представьте, что два пользователя хотят вставить другое предложение между двумя существующими предложениями. Если один из пользователей оказался в офлайне, он не должен вернуться к искаженному беспорядку! Ясно, что для сохранения намерения одно предложение должно следовать за другим.
Я что-то упустил при чтении статьи, или это неотъемлемый недостаток Logoot?
(Кроме того, почему существует записанное значение часов, которое, по-видимому, не используется в алгоритме? В документе даже указывается, что идентификатор каждого объекта обязательно уникален без часов.)