node.jsのファイルへのアクセスを調整するベストプラクティスは何ですか?nodejsのファイルシステムアクティビティの調整
私は、再開可能な非常に大きなファイル(10sGB)用のHTTPベースのファイルアップローダを作成しようとしています。私は最高のアプローチが同じファイルを同時にアップロードしようとしている2人を処理することを理解しようとしています...私はnode.jsの複数のコピーhttpサーバはロードバランサの背後で実行されています。つまり、重複したアップロードをキャッチすることは、コードそのものに依存することはできません。
たとえば、open()呼び出しに正しいフラグを渡してアトミックな作成を強制することで、ファイルを作成できます。デフォルトのnode.jsオープンファイルがアトミックであるかどうかは不明です。
私は思ったが、本当に追求したくない、複数のユーザーであるかどうかを知るために...この状態を追跡するためにアトミックトランザクションをサポート非同期ドライバで
私はあなたが説明したようにほとんど正確に実装していることを明確にする必要があります。誰かが現在同じファイルをアップロードしていると判明した場合、サーバーはどのユーザーがどのチャンクをアップロードするかを決定します。 "これをnode.jsに実装するにはどうすればいいですか(詳細)?チャンクが現在のアップローダによって放棄されたかどうかをサーバーはどのように区別しますか? 2つのチャンクが同時にアップロードされた場合、どのように受け入れられ、他のチャンクが拒否される(何らかのアトミック操作)ことを保証するにはどうすればよいですか? – Cyclone
1MBのようなチャンクサイズを選んで、アップロードしたユーザーの間にチャンクを配布します。通常、最初のユーザーは最初のチャンクをアップロードし、2番目のユーザーはファイルの後半をアップロードします。 nユーザーが同じファイルをアップロードすると、残りのチャンクの1/nを現在のアップローダから取り出し、新しいユーザーに与えます。各クライアントが送信しなければならない最初の配列のハッシュを記録しておけば、アップロードが完了して検証されたときに各チャンクにフラグを設定できます。 – fent
このシステムでは、ユーザーはアップロードを開始する前にファイルのハッシュを送信する必要があります。 2人のユーザーが同じファイルから同じチャンクをアップロードしている状況にあってはなりません。 – fent