2008-09-17 2 views
2

Какие алгоритмы и процессы используются для хранения изменений в редакции, таких как stackoverflow и wikipedia?сохранение изменений в редакции сообщения

Сохраняется ли только одна копия сообщения? И если это только последняя копия? Затем оттуда сохраняются только изменения, чтобы вернуться к предыдущей версии (ей)? (Это приведет к более быстрому отображению основного сообщения). Или хранятся полные сообщения? И если так получается сравнение между ними на каждом дисплее?

Какие алгоритмы лучше всего использовать для определения точных изменений в сообщении? Как эти данные хранятся в базе данных?

Если кто-то точно знает, что википедия или stackoverlfow мне хотелось бы узнать.

ответ

1

longest common substring algorithm может использоваться для обнаружения различий между версиями, но он ограничен. Например, он не обнаруживает перемещение текста как такового, но он будет рассматривать это как несвязанные удаления и вставки.

Я полагаю, что веб-сайты обычно хранят последнюю копию в полном объеме и применяют обратные различия оттуда. Это также способ CVS, но Subversion использует форвардные дифференциалы, что приводит к более медленным проверкам.

Чтобы сохранить это в базе данных, можно сохранить основную таблицу с последними версиями и иметь отдельную таблицу с обратными разностями. Эта таблица имела бы строки в формате (article_id, revision_id, differences).

1

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

0

Типичные изменения изменений хранятся с использованием алгоритма дельта, поэтому единственными сохраненными данными являются изменения в каждой ревизии по отношению к оригиналу. Я не уверен в wikipedia или stackoverflow, как они это реализованы.

0

Я хотел бы использовать следующую технику:

  • магазин текущее сообщение как полный текст.
  • Сохраните историю, используя алгоритм дельта.

Это обеспечит хорошую производительность при регулярном отображении, сохраняя при этом хранение до минимума для истории.

4

Mediawiki (sotware for wikipedia) хранит полный текст для всех версий, см. database schema. Каждая запись в text table в Mediawiki имеет флаги, которые указывают, было ли это содержимое, например. gziped, использование стандартного сжатия часто является самым надежным вариантом.

Я не могу сказать вам, как делать алгоритмы, но какой алгоритм вы используете, вы должны сделать это из двух полных версий текста. Это выбор полной версии старого и нового объекта из базы данных, а затем diff. Это позволяет легко изменить дифференцирующий алгоритм.

Git является отличным примером приложения Unix, которое может делать очень дешевое (хранение и скорость) дельта-хранилище. Есть вики, которые могут использовать git, например. ikiwiki, но я предполагаю, что вы хотите сделать это с помощью базы данных.

+0

Жаль, что я мог бы принять 2 ответов – 2008-09-20 07:47:51

0

Принятый ответ довольно плохой.Проблемы:

  • медленно
  • не будущее доказательство
  • сложный
+0

Даже если вы сохраняете полную копию каждого сообщения, это показывает вам, как сделать диф после отображения «страницы различий». – 2008-09-23 13:27:47

Смежные вопросы