そのため、NodeJS アプリケーションで実行時間の長いプロセスを使用して継続的に処理する必要があるファイルのかなり大きなディレクトリがあります。ディレクトリは継続的に処理され、空にされていますが、常に 1000 以上のファイルが処理のために並んでいることは珍しくありません - それらは gzip された CSV ファイルであるため、私の単純な解決策は、ディレクトリ リストを取得し、ファイルを反復処理することでした。 、それぞれを開いて解析し、次のように続行します。
files = fs.readdirSync 'directory'
for filename in files
file_path = path.resolve path.join 'directory', filename
fd = fs.openSync file_path, 'r'
buf = new Buffer fs.statSync(file_path).size
fs.readSync fd, buf, 0, len, 0
fs.closeSync fd
zlib.gunzip buf, (err, buf) =>
throw err if err
content = buf.toString().split("\n")
for line in content
# parse, process content, archive file
EMFILE (Too Many Open Files) エラーがすぐに発生します。fs 関数の Sync バージョンと、coffeescript についてはご容赦ください。
管理された方法で大量のファイルを処理するより良い方法はありますか? 最終的には、単一の解析ストリームのようなものを使用したいと思います-単一の大きな(または成長している)ファイルでそれを行う方法は知っていますが、個別のファイルでいっぱいのディレクトリではできません。
ファイルは、多数の異なるクライアントによって公開 Web サーバーに生成され、安全なプロトコルを介して入力ディレクトリに定期的に同期されます。理想的なセットアップではありませんが、システムの特定の性質を考えると必要であり、単一の多重化されたストリームなど、ファイルを単純に変更できない理由を説明しています。