在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