2

私が取り組んでいるテスト プロジェクトに node.JS サーバーを使用しています。このプロジェクトでは、ユーザーが携帯電話のアプリを介してサイトに接続し、使用される URL に基づいて、後でアクセスできるようにそのデータをドキュメントに追加します (データへのアクセスの半分は単一のプロセスによって日常的に行われるため、特に重要ではありません)。しかし、複数のソースからのデータの書き込みは、2 人のユーザーが同時に接続した場合 (議論のために、まったく同じティックと言います) という点で私は心配しています。ファイルはどうなりますか?データの破損/損失はありますか? もしそうなら、それを防ぐ/状況を回避する最良の方法は何でしょうか(つまり、一方のプロセスを他方を待つように設定します)。データの情報に基づいてドキュメントの特定の場所にデータが追加されるため、データの上書き/損失が発生する可能性があることが心配です。

最終的に私が尋ねている質問は、2 人のユーザーが同じドキュメントを同時に編集しようとするとどうなるか、どうすればそれを防ぐことができるかということです。

PS私はこれに最適なセットアップを持っていないため、これを自分でテストすることはできませんが、再現できなくても確実に発生する可能性があります.

編集:これらすべてに加えて、データの読み取り中にデータを追加しようとすると、自動プロセスがユーザー入力をブロックするのを防ぐにはどうすればよいですか?

編集 2: ファイルは、デフォルトの Express セットアップを使用して ./routes ディレクトリに単一のテキスト ドキュメントとして保存されます。

先制編集:(笑)。すべてがWindows 8 64ビットで実行されています。それが違いを生むなら、それは可能だと思います。

4

1 に答える 1

1

競合する編集に対処するためのさまざまな戦略があります。どちらを使用するかは、使用しているインフラストラクチャ (データ ストアの種類など)、競合の頻度、両方の編集内容を保存する必要があるかどうか、ロック システムを使用できるかどうかなど、多くのことに依存します。 ..いずれにせよ、考えられる戦略は次のとおりです。

  1. 変更前にロックします。 編集する前に、リソースを「ロック」するようにユーザーに要求し、リソースがロックされている場合は、他のユーザーがそのリソースを編集できないようにします。クライアントがロックを解放しない場合は、ロックを期限切れにする何らかの方法を考案する必要があります (例: タイムアウト)。

  2. 更新中にロックします。取得・保存時のバージョンチェック。 競合中に発生した編集を拒否します。クライアントが編集したいバージョンを取得すると、バージョン番号も取得します。編集を送信すると、編集したと思われるバージョン番号も送信されます。リポジトリ内のバージョンが変更された場合、競合する編集が発生した可能性があり、編集が拒否される可能性があります。

  3. 更新中にロックします。取得・保存時のバージョンチェック。 コンフリクト中に発生した編集をマージします。クライアントが編集したいバージョンを取得すると、バージョン番号も取得します。編集を送信すると、編集したと思われるバージョン番号も送信されます。リポジトリ内のバージョンがその後変更された場合、競合する編集が発生した可能性があり、サーバーが編集をマージしようとするか、マージが失敗した場合、編集が拒否される可能性があります。

  4. 更新中にロックします。取得・保存時のバージョンチェック。 競合中に両方のバージョンを保存します。クライアントが編集したいバージョンを取得すると、バージョン番号も取得します。編集を送信すると、編集したと思われるバージョン番号も送信されます。リポジトリ内のバージョンがその後変更された場合、競合する編集が発生した可能性があり、編集された両方のバージョンを保存できます。(これは、2 つのクライアントが競合する編集を同じノートに保存しようとした場合の EverNote の動作です)。


データを変更したい他のクライアントによって中断されないように、データストアへの読み取りと書き込みを行う必要があります (同時読み取りは問題ありませんが、他の読み取りまたは書き込みの途中での書き込みは問題ありません)。また、使用しているデータ ストアのタイプに応じて、多くの戦略が考えられます。

ファイル システムの読み取り/書き込みの場合、ファイル オープン アクセス許可を使用してファイルへの排他的アクセスを許可し、適切なエラー処理を実装して、現在使用できないリソースに対する要求を、リソースが使用可能になったときに再試行できるようにすることができます。

この投稿は役に立つかもしれません: node.js readfile woes

node.js で使用できるファイル ロック モジュールも多数あります。これが1つともう1つです。

于 2015-04-13T04:54:02.503 に答える