【问题标题】:Node.js - Out of memory when making calls to search indexNode.js - 调用搜索索引时内存不足
【发布时间】:2012-02-21 00:13:18
【问题描述】:

我正在尝试从 csv 文件中读取数据并将数据插入到弹性搜索索引中。如下所示,我使用 readstream 并监听“数据”事件。我的问题是,我使用这种方法很快就会耗尽内存。我猜这是因为 elasticsearch 模块(弹性)每次都在做一个 REST,并且此类请求的数量不断增加。

我是新手,有没有办法解决这个问题,以免内存不足?有什么通用模式或技术?

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

【问题讨论】:

    标签: node.js stream elasticsearch


    【解决方案1】:

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

    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。我猜你没有发布你的整个代码。

    【讨论】:

    • 确实,我只是发布了一个骨架,我省略了从 doc 创建 var json 的部分。但是,即使这样做了,我仍然遇到内存问题。我可以在回调函数中直接调用 stream.resume 吗?
    • 是的,如果 stream 在回调中可见。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2017-06-22
    相关资源
    最近更新 更多