巨大なログファイル (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)