Подтвердить что ты не робот

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

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

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

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

Я - страница!

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

Человек один:

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

Лицо два:

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

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

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

Любой алгоритм слияния, который соответствует вашим требованиям, будет выполнять.

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

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

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

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

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