我正在尝试读取一个巨大的日志文件(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)