[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Логирование изменений контента
bigmatherhaker
Появилась необходимость написать для сайта систему логирования изменений контента, который (контент) прдставляет из себя некую сущность, распределенную по 4 таблицам mysql. Смысл в том, чтобы логировать изменения, вносимые пользователями и по итогам некоторого периода выдавать отчет по их работе. Контент можно менять/добавлять только через веб морду, так что в отслеживании изменений проблем нет. Есть проблема в способе хранения и отображения изменений. Есть мысли на этот счет? По-идее, выглядеть это должнои как система контроля версей, только задачае ее не в бэкапах, а именно в возможности привязать конкретное изменение к конкретному пользователю.



Спустя 30 минут, 43 секунды (25.07.2011 - 04:49) Nikitian написал(а):
Нужны инкрементальные diff-подобные изменения или достаточно иметь старую и новую версию в полном объёме?

Спустя 4 минуты, 44 секунды (25.07.2011 - 04:54) bigmatherhaker написал(а):
Цитата (Nikitian @ 25.07.2011 - 01:49)
Нужны инкрементальные diff-подобные изменения или достаточно иметь старую и новую версию в полном объёме?

Желательно было бы дифы. Для отчетов.

Спустя 3 минуты (25.07.2011 - 04:57) Nikitian написал(а):
Ну тогда генерируйте этой утилитой на основе временных файлов историю различий и сохраняйте в отдельную таблицу с указанием пользователя и обязательно автоинкрементом (чтобы можно было собрать всё обратно :)).

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

Поля временной таблицы: id, user, content, где content - сериализованный массив различий между записями из разных таблиц или новая версия этих данных. Вместо сериализации можно использовать упаковку в json для более гибкой обработки на других языках.
Предполагаемый формат сериализованных данных:

array(
table1=>array(field1=>data1,field2=>data2),
table1=>array(field1=>data1,field2=>data2)
)

Спустя 4 минуты, 55 секунд (25.07.2011 - 05:02) bigmatherhaker написал(а):
Цитата (Nikitian @ 25.07.2011 - 01:57)
Ну тогда генерируйте этой утилитой на основе временных файлов историю различий и сохраняйте в отдельную таблицу с указанием пользователя и обязательно автоинкрементом (чтобы можно было собрать всё обратно smile.gif).

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

Поля временной таблицы: id, user, content, где content - сериализованный массив различий между записями из разных таблиц или новая версия этих данных. Вместо сериализации можно использовать упаковку в json для более гибкой обработки на других языках.

Спасибо, в этом направлении сейчас и двигаюсь. Совет со стороны как раз во время biggrin.gif

Спустя 2 минуты, 20 секунд (25.07.2011 - 05:04) Nikitian написал(а):
На самом деле, инкрементальные обновления имеют смысл лишь при большом количестве изменений и объёме данных. В остальных случаях иметь полную версию будет предпочтительнее - проще и быстрее откатиться к любому месту.

Спустя 1 час, 24 минуты, 58 секунд (25.07.2011 - 06:29) bigmatherhaker написал(а):
Цитата (Nikitian @ 25.07.2011 - 02:04)
На самом деле, инкрементальные обновления имеют смысл лишь при большом количестве изменений и объёме данных. В остальных случаях иметь полную версию будет предпочтительнее - проще и быстрее откатиться к любому месту.

Несколько десятков тысяч записей в каждой таблице, сотни-тысячи правок каждые сутки.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.