2009-06-12 15 views
0

私はデータを編集するためのユーザーインターフェイスを持つWebアプリケーションを作成しています。アイデアは、テキストの塊に編集があるwikiに似ています。複数のユーザーからの非同期編集を処理する最善の方法は何ですか?私が検討している状況は次のとおりです。Web上でのドキュメントの非同期編集の処理

バージョン0のドキュメントがあります。ユーザーAはバージョン0のときに編集しています。数分後にユーザーAが変更を保存する前に、ユーザーBが同じものを開きます文書を編集して編集を開始します。サーバーは、文書のバージョン0に対する2つの異なる編集をどのように扱うべきですか?また、この問題は何と呼ばれ、どこで同様の問題に関する詳細情報を入手できますか?

答えて

0

Wikipediaこの問題に対処:

Aと人物Bの両方が同じドキュメントを編集しているその人を想定します。また、人物Aが、少し人のB.

  • まずメディアウィキソフトウェアは両方の編集を超える伝統diffing algorithmを実行する前に、自分の編集を提出すると仮定します。
  • 次に、テキストをマージするために、diffingアルゴリズムの結果が使用されます。
  • マージ競合がある(つまり、人物AとBが同じテキストを編集した)ことを発見した場合、人物Bは最後に編集を提出してから競合を解決するように求められます。

ウィキペディアは、コードリポジトリの競合と同様にマージ競合を処理します。

google waveまたはetherpadのように複数のユーザーが同時にドキュメントを編集できるようにしたい場合は、operational transforms(別名OT)を調べることをおすすめします。 OTアルゴリズムは伝統的なdiffingアルゴリズムよりも難しくないか単純ではありませんが、それに関する情報は少なく、既成の実装の数は少なくなっています。

0

典型的なパターンの1つは、各ユーザーにテキストのチャンクと、受信したバージョンを示すバージョン番号を送信することです。ルールは、ホストが現在のアクターバージョンへの最初のリビジョンのみを受け入れることです。

このようにして、1人だけが各バージョンを修正できます。他の人には、そのバージョンが廃止され、その時点であなたが望むことを実行できることが伝えられます。通常は、現在のバージョンを送信して再試行します。

これは、複数の人が同じバージョンで作業することは考えにくい場合にのみ機能します。可能性が高いのであれば、たとえば、Subversionがソースコードの複数のリビジョンをどのように扱うかを調べる必要があるでしょう。

複数の人が同じテキストで同時に作業し、お互いの更新情報をフィードする仕組みもあります。以下の方法で