14

これはずっと頭の片隅に残っていたので、聞いてみようと思います。

ウィキは同じコンテンツに対する複数の編集をどのように処理しますか?

これが私が求めていることの単純な例です。ページに次のコンテンツがあるとします。

私はページです!

では、2 人がそのページを編集するとします。各人が文を追加します。

人 1:

私はページです!
私は同じページの 2 番目の文です。

2 人目:

私はページです!
私は二文目です!

各人の 2 番目の文が、各人が追加したいページのトピックについて、同じように関連性があるが異なる事実であると想像してください。

ここで、人 1 が人 2 より先に変更を送信したとしますが、人 2 は人 1 が行った変更を確認する機会さえありません。人 2 の変更は、人 1 が最終的に提出するときに、人 1 の変更を上書きしますか?

これに使用できる差分/マージアルゴリズムはありますか?

4

4 に答える 4

11

ウィキペディアは、ほとんどのソース コード管理ソフトウェアと同様に、かなり単純な差分/マージアルゴリズムを使用していると思います。

あなたが示した例では、最終的なマークアップで最初に来る行を知る方法がないため、マージ競合エラーが発生します。変更を保存する 2 番目の人には、競合を解決する方法を選択する必要があるマージ エラー ページが表示されます。

ただし、ウィキペディアは同時ユーザー数の上限にあることに注意してください。大部分のウィキでは、2 番目の人の編集が最初の人の編集を単純に上書きする、非常に単純な「最後の保存が優先」アルゴリズムを使用することはおそらく許容されるでしょう。履歴を追加することで、最初の人が変更が上書きされたことに気づき、再度追加し直すことが容易になるはずです。

このソリューションは、Stack Overflow が使用しているものだと思います。SO には、Ajax 呼び出しを使用して編集者に通知する追加機能があり、他の誰かが編集を終える前にページを変更した場合に通知します。

于 2010-08-05T05:10:41.380 に答える
3

wikiの趣向次第です。数十または数百の wiki クローンがあります。通常、2 番目のユーザーは「このページは別のユーザーによって編集されました」というエラー メッセージを受け取り、ページをリロードして編集をやり直す必要があります。

Wiki は、Subversion のようなバージョン管理システムと同じ方法で 2 つの編集をマージできます。UNIX コマンドに慣れている場合はpatch、ユーザー 2 の編集内容を比較し、パッチを生成して適用する必要があります。パッチは成功する場合と失敗する場合があります。あなたの例では、マージの競合が発生するため、古い「このページは別のユーザーによって編集されました。失われました」というエラーメッセージに戻ります。

于 2010-08-05T05:09:51.177 に答える
1

ウィキは複数の同時編集をどのように処理しますか?

それはウィキの実装に依存します。

これに使用できる差分/マージアルゴリズムはありますか?

要件を満たす任意のマージ アルゴリズムで十分です。

一般的には、ウィキにどのような動作をさせたいかによって異なります。たとえば、記事が変更され、Person Two が古いベース コピーに取り組んでいるため、Person Two の変更がコミットされないように Wiki を実装することを選択できます。2 人目の人が変化に気づいていれば、まったく別のものに入る可能性があります。その場合、Person Two の変更のコミットを許可しないことを選択できます。これは、Kurt Du Bois が回答で言及しているトランザクション メカニズムで実現できます。

もう 1 つのオプションは、Wiki 記事の保存を常に許可するアプローチを実装することです。この場合、最初のアプローチでは人物 2 の変更が失われる一方で、人物 1 の変更が失われる可能性があります。

3 つ目の方法は、両方の記事をマージ ウィンドウに並べて表示することです。これをサポートしているウィキは知りません。もしそうなら、偶然にも 3 人 (またはそれ以上) の人が同じ文書を変更していたらどうなるだろうと思っていました。

したがって、Wiki を使用している場合は、編集を小さくすることをお勧めします。

ウィキを実装している場合、ウィキ システムをどのように動作させるかを選択できます。

于 2010-08-05T05:16:47.790 に答える
1

ファイルが 2 回編集されるのを防ぐためにロックを使用するトランザクション メカニズムが存在する可能性があります。ウィキペディアのファイル ロックを参照してください。

于 2010-08-05T05:09:02.113 に答える