Совместное редактирование без блокировок
Рассмотрим ситуацию, когда над неким сайтом (или другим проектом) работает коллектив авторов, и подумаем над такой задачей: как обеспечить возможность совместного редактирования документов.
Если над такой возможностью вообще не задумываться, то в ситуации, когда два автора начинают редактировать один и тот же документ, правки одного из авторов скорее всего потеряются.
Эту проблему можно решать при помощи блокировок, как сделано, например, в движке DokuWiki. Когда документ открыт для редактирования одним пользователем, другим пользователям запрещено его редактировать.
Едва ли решение с блокировками можно признать удачным. Если автор начинает редактировать документ, а потом отвлекается, нужно отбирать блокировку по по истечению
Я придумал другой метод, который собираюсь реализовать в своем движке сайтов S2. Этот метод особенно оправдан, если совместное редактирование возникает достаточно редко. Например, редактор должен внести небольшие исправления в документ, написанный автором.
В таких ситуациях вместо надоедливых сообщений о блокировках нужно просто проверять, изменялся ли документ другими пользователями в промежутке между открытием и сохранением. Если изменялся, мы не сохраняем документ, и выводим пользователю сообщение о том, что он должен открыть новую версию документа и самостоятельно перенести туда дописанные фрагменты текста.
Блокировки держат пользователя в напряжении (нельзя отвлекаться больше, чем на 15 минут) и не решают задачу совместного редактирования до конца: всё равно остается возможность возникновения конкурирующих правок. В моем методе ничто без надобности не отвлекает пользователя от его задач.
Комментарии
Соответствующие алгоритмы преобразуют потоки операций редактирования каждого участника, так, чтобы:
—
— а
См., например:
— Достаточно подробно
— Operational Transformation Frequently Asked Questions and Answers:
OT используется во многих системах совместной работы над документами, например в Google Wave. Реализация OT в Wave интересна тем, что поддерживает редактирования не только простого текста, но и структурированный форматированных
О реализации OT в системе Google Wave можно прочитать на соответствующем сайте «Google Wave Federation Protocol» (
Если в вашей CMS совместное редактирование возникает достаточно редко (и уж точно не в реальном времени), то, возможно, предложенная вами эвристика будет самым оптимальным и элегантным решением.
Однако в S2 я такое делать, скорее всего, не буду. Ведь нельзя объять необъятное. Так что пусть он остается простым движком.
Оставьте свой комментарий