0

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

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

4

2 に答える 2

0

ウィキペディアはこの問題に次のように対処しています。

A さんと B さんが同じドキュメントを編集しているとします。また、A さんが B さんよりも少し前に編集内容を送信したとします。

  • まず、メディア ウィキ ソフトウェアは、両方の編集に対して従来の差分アルゴリズムを実行します。
  • 次に、差分アルゴリズムの結果を使用してテキストをマージします。
  • 差分アルゴリズムがマージ競合があることを発見した場合 (つまり、A と B が同じテキストを編集した場合)、B は最後に編集を送信したため、競合を解決するよう求められます。

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

複数の人がドキュメントを同時にリアルタイムで編集できるようにしたい場合 ( google waveetherpad など)、運用変換(別名 OT)を検討することをお勧めします。OT アルゴリズムは従来の差分アルゴリズムよりも難しくも単純でもありませんが、OT アルゴリズムに関する情報は少なく、既製の実装も少なくなります。

于 2009-11-14T15:36:10.770 に答える
0

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

そうすれば、各バージョンを改訂できるのは 1 人だけです。他のすべての人には、バージョンが廃止されたので、その時点で必要なことを行うことができると言われます。通常は、現在のバージョンを送信して再試行してください。

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

複数の人が同じテキストで同時に作業し、互いの更新情報をフィードするためのスキームもあります。一例として、Google Wave を参照してください。

于 2009-06-12T07:05:39.773 に答える