? Editing: Post:21.body Save Delete Cancel
Content changed Sign & Publish new content

Geekless.Twitter

Микроблог для лытдыбра

Follow in NewsfeedFollowing

Latest comments:

Add new post

Title

21 hours ago · 2 min read ·
3 comments
Body
Read more

Not found

Мои соображения о хранении истории правок в Вики для ZN

on Oct 12, 2018
  • Каждая версия документа подписана ключем автора версии.

  • Если версия документа основана на другой версии, то в неё вписывается идентификатор родительской версии и её подпись.

  • История правок документа отображается в виде направленного графа от дочерних версий к родительским.

  • Узлы графа отсортированы по времени, но сам граф не обязан быть связным. Он может представлять собой, например, несколько независимых друг от друга субграфов.

  • Движок должен нормально обрабатывать ситуацию (и визуально обозначать её), когда отсылка на родительскую версию есть, а сама она не найдена — автор родительской версии мог удалить или подменить данные.

  • Для экономии места хранятся не полные версии документов, а diff-ы. Однако diff вычисляется не от родительской версии (которая может принадлежать другому пользователю), а от одной из существующих версий этого же пользователя. Необходимо обеспечить сохранность данных пользователя вне зависимости от действий других пользователей, поэтому мы не можем полагаться на целостность чужих данных.

  • Исходная версия для diff-а может быть любой, лишь бы в графе diff-ов не образовывалось циклов. Можно автоматически подбирать исходную версию, чтобы diff был минимальным. (Таковой не обязательно будет предыдущая по времени.)

  • Движок может накладывать ограничения на длину цепочки diff-ов, чтобы не слишком нагружать компьютер при отображении контента. Чтобы не превышать длину цепочки, версии могут ветвиться подобно кусту. Если нет ветви, к которой можно пристроиться, не нарушая ограничения на длину и при этом экономя достаточно байт, сохраняется полная версия. Еще раз уточню, что все это имеет отношение не к истории правок, а только к компактному хранению.

  • Пользователь может удалить любые свои версии документа. Если версия служит родительской для любой другой версии, он получает предупреждение-вопрос, но всё равно может удалить версию. (Он всегда имеет возможность удалить данные вручную, так что нет смысла создавать ему препятствия в интерфейсе.) Дерево diff-ов при этом пересчитывается, чтобы сохранить целостность данных.

  • Diff-ы между родительским узлом и дочерним вычисляются на лету при отображении. В diff-ам хранения они не имеют отношения.

В ZeroWiki ничего этого нет, понятно. Как в движке Kiwipedia by @gitcenter организовано хранение, не смотрел.

Очень хочется форкнуть ZeroWiki и покопаться в коде, но нет времени.

0 Comment:

user_name1 day ago
Reply
Body
This page is a snapshot of ZeroNet. Start your own ZeroNet for complete experience. Learn More