Я пытаюсь прочитать гигантский файл журнала (250 000 строк), анализируя каждую строку в объект JSON и вставляя каждый объект JSON в CouchDB для аналитики.
Я пытаюсь сделать это, создав буферизованный поток, который будет обрабатывать каждый фрагмент отдельно, но мне всегда не хватает памяти примерно после 300 строк. Похоже на использование буферизованных потоков и util.pump должен избегать этого, но, по-видимому, нет.
(Возможно, для этого есть лучшие инструменты, чем node.js и CouchDB, но мне интересно узнать, как выполнять такую обработку файлов в node.js, и я думаю, что это должно быть возможно.)
CoffeeScript ниже, JavaScript здесь: https://gist.github.com/5a89d3590f0a9ca62a23
fs = require 'fs'
util = require('util')
BufferStream = require('bufferstream')
files = [
"logfile1",
]
files.forEach (file)->
stream = new BufferStream({encoding:'utf8', size:'flexible'})
stream.split("\n")
stream.on("split", (chunk, token)->
line = chunk.toString()
# parse line into JSON and insert in database
)
util.pump(fs.createReadStream(file, {encoding: 'utf8'}), stream)