Сайт Романа ПарпалакаБлог20110517

Совместное редактирование без блокировок

17 мая 2011 года, 13:24

Рассмотрим ситуацию, когда над неким сайтом (или другим проектом) работает коллектив авторов, и подумаем над такой задачей: как обеспечить возможность совместного редактирования документов.

Если над такой возможностью вообще не задумываться, то в ситуации, когда два автора начинают редактировать один и тот же документ, правки одного из авторов скорее всего потеряются.

Эту проблему можно решать при помощи блокировок, как сделано, например, в движке DokuWiki. Когда документ открыт для редактирования одним пользователем, другим пользователям запрещено его редактировать.

Едва ли решение с блокировками можно признать удачным. Если автор начинает редактировать документ, а потом отвлекается, нужно отбирать блокировку по по истечению какого-либо времени (в DokuWiki, кажется, 15 минут), чтобы документ не остался заблокированным навечно. Тогда изменения отвлекшегося автора могут быть утеряны.

Я придумал другой метод, который собираюсь реализовать в своем движке сайтов S2. Этот метод особенно оправдан, если совместное редактирование возникает достаточно редко. Например, редактор должен внести небольшие исправления в документ, написанный автором.

В таких ситуациях вместо надоедливых сообщений о блокировках нужно просто проверять, изменялся ли документ другими пользователями в промежутке между открытием и сохранением. Если изменялся, мы не сохраняем документ, и выводим пользователю сообщение о том, что он должен открыть новую версию документа и самостоятельно перенести туда дописанные фрагменты текста.

Блокировки держат пользователя в напряжении (нельзя отвлекаться больше, чем на 15 минут) и не решают задачу совместного редактирования до конца: всё равно остается возможность возникновения конкурирующих правок. В моем методе ничто без надобности не отвлекает пользователя от его задач.

Ключевые слова: интерфейсы, S2

Конституционный суд Ctrl Радуга

Поделиться

Комментарии

#1. 17 мая 2011 года, 20:12. Алик Кириллович пишет:
Для совместного редактирования документов без блокировок разработан специальный формализм «Operational transformation».

Соответствующие алгоритмы преобразуют потоки операций редактирования каждого участника, так, чтобы:
— во-первых, итоговый документ сохранял консистентность (согласованность);
— а во-вторых, у каждого пользователя была актуальная версия этого документа.

См., например:
— Достаточно подробно по-русски в Википедии: http://ru.wikipedia.org/wiki/Операциональн … бразование
— Operational Transformation Frequently Asked Questions and Answers: http://www3.ntu.edu.sg/home/czsun/projects/otfaq/


OT используется во многих системах совместной работы над документами, например в Google Wave. Реализация OT в Wave интересна тем, что поддерживает редактирования не только простого текста, но и структурированный форматированных HTML-документов.

О реализации OT в системе Google Wave можно прочитать на соответствующем сайте «Google Wave Federation Protocol» (http://www.waveprotocol.org), в частности в статье «Google Wave Operational Transformation» (http://www.waveprotocol.org/whitepapers/op … -transform).
#2. 17 мая 2011 года, 20:18. Алик Кириллович пишет:
Но, хотя, конкретно в вашем случае, реализация Operational transformation м.б. стрельбой из пушек по воробьям.

Если в вашей CMS совместное редактирование возникает достаточно редко (и уж точно не в реальном времени), то, возможно, предложенная вами эвристика будет самым оптимальным и элегантным решением.
#3. 17 мая 2011 года, 21:44. пишет:
Алик, спасибо за ссылки, прочитаю.

Однако в S2 я такое делать, скорее всего, не буду. Ведь нельзя объять необъятное. Так что пусть он остается простым движком.
#4. 18 мая 2011 года, 04:24. Денис пишет:
Да и в любой системе контроля версий (svn, git) такой вопрос рассматривается и решается. Однако, думаю, это будет слишком для обычного движка. =)

Оставьте свой комментарий

Ваше имя:

Комментарий:

Для выделения используйте следующий код: [i]курсив[/i], [b]жирный[/b].
Цитату оформляйте так: [q = имя автора]цитата[/q] или [q]еще цитата[/q].
Ссылку начните с http://. Других команд или HTML-тегов здесь нет.

Сколько будет 68+9?

Записи