Итак, у меня есть довольно большой каталог файлов, которые мне нужно обрабатывать постоянно, используя длительный процесс в приложении NodeJS. Каталог постоянно обрабатывается и очищается, но нет ничего необычного в том, что 1000+ файлов должны быть в очереди для обработки в любой момент времени - это файлы CSV с gzipped, поэтому мое наивное решение заключалось в том, чтобы захватить список каталогов, перебрать файлы откройте каждый, анализировать их, а затем продолжить, как это:Как обрабатывать большой (1000+ файлов) каталог файлов с помощью Node.js?
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. Пожалуйста, извините версии Sync функций fs и coffeescript.
Есть ли лучший способ обработки массивного количества файлов управляемым способом? В конечном итоге я хотел бы использовать что-то вроде одного синтаксического потока - я знаю, как это сделать с помощью одного большого (или даже растущего) файла, но не с каталогом, полным отдельных файлов.
Файлы генерируются большим количеством несопоставимых клиентов на общедоступный веб-сервер, который затем регулярно синхронизирует их с моим каталогом ввода по защищенному протоколу. Не идеальная настройка, но необходимая с учетом специфики системы, и это объясняет, почему я не могу просто изменить файлы, которые можно сказать, один мультиплексированный поток.
Оформить заказ ['graceful-fs'] (https://npmjs.org/package/graceful-fs). –