我正在尝试索引一个大文件(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/

10-09 21:22