2010-08-05 4 views
12

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

Как вики обрабатывают несколько изменений в одном содержимом?

Вот простой пример того, что я прошу. Предположим, что страница имеет следующий контент:

Я - страница!

А теперь скажем, что два варианта редактирования этой страницы. Каждый человек добавляет фразу:

Person одно:

Я страница!
Я - второе предложение на той же странице!

Человек два:

Я страница!
Я - второе предложение!

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

Теперь допустим, что человек один отправляет свои изменения перед человеком два делает, но человек два даже не может увидеть изменения, которые человек сделал. Меняет ли чьи-то изменения двух людей, когда он наконец отправляется?

Есть ли алгоритм diff/merge, который может быть использован для этого?

+0

Хе-хе-х годов проблемы со сбоями данных всегда опасны :) –

ответ

8

Я считаю, что в Википедии используется алгоритм a fairly simple diff/merge, аналогичный тому, как это делает большинство программ для управления исходным кодом.

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

Имейте в виду, что википедия находится на верхнем уровне параллельной шкалы пользователей.Для большинства вики, вероятно, было бы приемлемо использовать очень простой алгоритм «последнего спасения», в котором изменения второго человека просто перезаписывают первое лицо. С добавлением истории для первого человека должно быть легко заметить, что их изменения были перезаписаны и снова добавлены.

Я считаю, что это решение - это то, что использует переполнение стека. SO имеет дополнительную функцию, когда вызов Ajax используется для уведомления редактора, если кто-то еще входит и изменяет страницу до ее завершения.

1

Может существовать транзакционный механизм, который использует блокировку, чтобы предотвратить редактирование файла дважды. См. file locking в Википедии.

2

Это зависит от вкуса вики. Существует много десятков или сотен вики-вики. Обычно второй пользователь получает сообщение об ошибке «Эта страница была отредактирована другим пользователем», после чего они должны перезагрузить страницу и выполнить повторную редактирование.

Викия, конечно же, может объединить два редактирования вместе так же, как и система управления версиями, такая как Subversion. Если вы знакомы с командой UNIX patch, это будет связано с изменением прав пользователя 2 и созданием патча, который затем применяется. Патч может быть или не удастся; в вашем примере будет конфликт слияния, и поэтому он вернется к старой «этой странице был изменен другим пользователем, вы потеряете» сообщение об ошибке.

1

Как вики обрабатывают несколько одновременных изменений?

Это зависит от реализации вики.

Есть ли алгоритм diff/merge, который может быть использован для этого?

Любой алгоритм слияния, соответствующий вашим требованиям.

Как правило, это зависит от поведения, которое вам нравится в wiki. Например, вы можете реализовать свою вики таким образом, чтобы изменение Person Two не было совершено, поскольку статья была изменена, а Person Two работает над устаревшей базовой копией. Потенциально Человек Два вводит нечто совершенно другое, если он/она знал об изменениях. В этом случае вы можете не допускать совершения изменений Person Two. Это может быть достигнуто с помощью механизма транзакций, который Курт Дю Буа упоминает в своем ответе.

Другим вариантом является реализация подхода, который всегда позволяет сохранить статью wiki. В этом случае вы можете потерять изменения Person One, в то время как в первом подходе вы потеряете изменения Person Two.

Третьим подходом было бы представить обе статьи бок о бок в окне слияния. Я не знаю вики, которая поддерживает это. Если бы это произошло, мне было интересно, что произойдет, если сопутствующие три (или более) люди изменят один и тот же документ.

Так что если вы используете wiki, я предлагаю сохранить небольшие изменения.

Если вы реализуете wiki, у вас есть выбор, как вы хотите, чтобы ваша вики-система работала.

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