因此,我有一個相當大的文件目錄,我需要在NodeJS應用程序中使用長時間運行的進程持續進行處理。目錄正在不斷處理和清空,但在任何給定時間處理1000個以上的文件並不罕見 - 它們是gzip壓縮的CSV文件,所以我的天真解決方案是獲取目錄列表,迭代文件,打開每個,解析它們,然後繼續,就像這樣:如何使用Node.js處理大型(超過1000個文件)的文件目錄?
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(打開的文件太多)錯誤跑起來。請原諒fs函數的同步版本和coffeescript。
有沒有更好的方式來以管理的方式處理大量的文件?最終,我想使用類似於單個解析流的方式 - 我知道如何使用單個大型文件(甚至是增長文件)來執行此操作,但不能使用單獨文件的目錄。
這些文件由大量不同的客戶端生成到面向公衆的Web服務器,然後通過安全協議將它們定期同步到我的輸入目錄。不是一個理想的設置,但是考慮到系統的特定性質,這是必要的,並且解釋了爲什麼我不能簡單地改變要說的文件,即單個多路複用流。
結帳['graceful-fs'](https://npmjs.org/package/graceful-fs)。 – 2013-03-01 04:03:12