2012-01-28 26 views
0

我试图从csv文件读取数据并将其插入到elasticsearch索引中。如下所示,我使用readstream并监听“data”事件。我的问题是,我很快就用这种方法耗尽内存。我猜这是因为elasticsearch模块(弹性)每次都在创建一个REST,并且这些请求的数量会增加。Node.js - 调用搜索索引时内存不足

我非常新,所以是有我的方式来解决这个问题,因此不会耗尽内存?任何一般的模式或技巧?

stream.on('data', function (doc) { 
    // create a json from doc 
    client.index('entities', 'command', json, function (err, res) { 
     console.log(res); 
    }); 
} 

回答

0

当您获取数据时暂停数据流,并在请求完成时恢复数据流。

stream.on('data', function (doc) { 
    stream.pause(); 
    // create a json from doc 
    client.index('entities', 'command', json, function (err, res) { 
     stream.resume(); 
     console.log(res); 
    }); 
} 

你的代码奇怪的是你不是在函数中使用doc任何地方。我猜你没有发布你的整个代码。

+0

事实上,我刚刚发布了一个框架,我省略了从doc创建var json的部分。但是,即使这样做后,我仍然遇到内存问题。我可以直接从回调函数中调用stream.resume吗? – quain 2012-01-28 07:59:03

+0

是的,如果'stream'在回调中可见。 – fent 2012-01-28 09:31:16