最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

在mongodb中一一插入500k记录导致堆内存不足

IT培训 admin 2浏览 0评论

在mongodb中一一插入500k记录导致堆内存不足

我正在尝试在mongodb中插入500 000条记录记录采集。这些值存储在csv中并进行解析,然后存储到数组中。使用递归函数一个接一个地插入记录,当再次插入一个记录时,将调用相同的函数。此过程适用于20万条记录,但是当记录大小增加到20万以上时,会导致堆内存不足(JS堆栈跟踪)。

下面是我正在使用的递归函数

function insertMongoSingle(fileRows, x, total){
    if(x < total){
        let item = fileRows.shift();
        let record  = new Record({i:item}, false);
        record.save(function(error, contact){
            if(error){
                console.log(error);
                x++;
                insertMongoSingle(fileRows, x ,total);
            }else{
                x++;
                insertMongoSingle(fileRows, x, total);
            }
        }); 
    }else{
        console.log('completed');
    }
}

其中x是计数,fileRows是对象数组中的总记录,total是fileRows的长度

回答如下:

我建议使用bulk insert mongo功能。

已经对stackoverflow给出了详细的答案:Inserting a big array of object in mongodb from nodejs

或者,如果您需要其他解决方案,可以查看我的加载示例:Loading 10K of seed data

在mongodb中一一插入500k记录导致堆内存不足

我正在尝试在mongodb中插入500 000条记录记录采集。这些值存储在csv中并进行解析,然后存储到数组中。使用递归函数一个接一个地插入记录,当再次插入一个记录时,将调用相同的函数。此过程适用于20万条记录,但是当记录大小增加到20万以上时,会导致堆内存不足(JS堆栈跟踪)。

下面是我正在使用的递归函数

function insertMongoSingle(fileRows, x, total){
    if(x < total){
        let item = fileRows.shift();
        let record  = new Record({i:item}, false);
        record.save(function(error, contact){
            if(error){
                console.log(error);
                x++;
                insertMongoSingle(fileRows, x ,total);
            }else{
                x++;
                insertMongoSingle(fileRows, x, total);
            }
        }); 
    }else{
        console.log('completed');
    }
}

其中x是计数,fileRows是对象数组中的总记录,total是fileRows的长度

回答如下:

我建议使用bulk insert mongo功能。

已经对stackoverflow给出了详细的答案:Inserting a big array of object in mongodb from nodejs

或者,如果您需要其他解决方案,可以查看我的加载示例:Loading 10K of seed data

发布评论

评论列表 (0)

  1. 暂无评论