0

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

1 に答える 1