Если у меня есть приложение PHP, которое позволяет пользователям вносить изменения в документы, как лучше всего реализовать отслеживание изменений для каждого документа? Я хочу, чтобы хранилище каждой ревизии было разделено (т. Е. Сохранить только внесенные изменения), как это делают svn и другие SCM с кодом. Я очень просто знаю, как это работает, но когда я начинаю думать о его реализации, я немного растерялся.
Прежде всего, мне интересно, есть ли какая-нибудь библиотека, которая может мне в этом помочь, так что мне не нужно полностью катать свою собственную.
И мне интересно: должен ли я сохранить полный текст только исходного документа, а затем только сохранить изменения, или мне следует сохранить полный текст самого последнего документа, и каждый раз, когда он изменяется, сохраняйте различия как одна из старых ревизий?
Если первое, то когда я хочу получить страницу, которая будет отображаться на сайте, нужно ли начинать с начала, а затем рекурсивно обновлять данные, основанные на ревизиях, до тех пор, пока я не достигну текущей версии? Разве это не будет мучительно медленным, когда будет много ревизий?
Как я могу выполнять операции типа diff / patch в PHP, чтобы упростить процесс деления и восстановления страниц?
Стоит ли иметь блокировку на страницах при их редактировании? Или пусть страницы попадают в «состояния конфликта» и имеют операции разрешения конфликтов - пусть два пользователя изменяют одну и ту же страницу одновременно, если они изменяют разные части и т. Д. - я схожу с ума, думая о том, насколько это будет сложно. Ааа!