我正在尝试索引一个大文件(1 500 000 行)并将其推送到 Elasticsearch 。为此,我正在使用 Node js 流;但是,我的内存一直不足。我做错了什么?
var rl = null;
initialize(function() {
var stream = fs.createReadStream(process.argv[2]);
rl = readline.createInterface({input: stream, terminal: false});
var i = 0;
rl.on('line', function(line) {
rl.pause();
processObject(++i, extractObject(line));
});
rl.on('close', function() {
console.log('\nRefreshed index;');
process.exit();
});
});
function processObject(number, input) {
client.index({
index: INDEX,
type: TYPE,
id: number,
body: input
}, function (error, response) {
rl.resume();
if(number % 1000 == 0) process.stdout.write('.');
});
};
最佳答案
好的,这就是解决方案。我写的代码很好;问题出在“readline”包上。事实上,rl.pause() 函数并没有像它应该的那样暂停行读取。我通过切换到以相同方式工作的“逐行”包解决了这个问题。使用相同的代码,该进程运行在 60 MB 以内。
关于node.js - 使用 Node 流时内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29292528/