Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js JavaScript内存堆积,mongo大容量插入_Node.js_Mongodb - Fatal编程技术网

Node.js JavaScript内存堆积,mongo大容量插入

Node.js JavaScript内存堆积,mongo大容量插入,node.js,mongodb,Node.js,Mongodb,让我们拿这个样品 export let index = (req: Request, res: Response) => { for (let i = 0; i < 10; i++) { let bulk = Faker.collection.initializeUnorderedBulkOp(); for (let y = 0; y < 200000; y++) { bulk.insert({ name: rando

让我们拿这个样品

export let index = (req: Request, res: Response) => {


for (let i = 0; i < 10; i++) {
    let bulk = Faker.collection.initializeUnorderedBulkOp();
    for (let y = 0; y < 200000; y++) {
        bulk.insert({
            name: randomName(),
            nights: Math.random(),
            price: Math.random(),
            type1: Math.random(),
            type2: Math.random(),
            type3: Math.random(),
            type4: Math.random(),
            departure: mongoose.Types.ObjectId(randomAreaID()),
            destination: mongoose.Types.ObjectId(randomAreaID()),
            refundable: randomBool(),
            active: randomBool(),
            date_start: randomDate(),
            date_end: randomDate(),
        });
    }
    bulk.execute();
}


return res.json({data: true});

};
我知道我可以增加内存,但我想找到更好的解决方案。因为现在我需要200万张唱片,但将来我需要100万张


有没有避免内存问题的建议?

异步/等待是解决方案。200.000.000个没有内存堆的文档。无限是现在的极限

let bulkPromise = (data) => {
return new Promise((resolve, reject) => {
    if (data.length > 0) {
        let bulk = Faker.collection.initializeUnorderedBulkOp();
        data.forEach((d) => {
            bulk.insert(d);
        })
        bulk.execute(() => {
            resolve(true);
        });
    } else {
        resolve(false);
    }
});
}

export let index = async (req: Request, res: Response) => {

for (let i = 0; i < 100; i++) {
    let data = [];
    for (let y = 0; y < 200000; y++) {
        data.push({
            name: randomName(),
            nights: Math.random(),
            price: Math.random(),
            type1: Math.random(),
            type2: Math.random(),
            type3: Math.random(),
            type4: Math.random(),
            departure: mongoose.Types.ObjectId(randomAreaID()),
            destination: mongoose.Types.ObjectId(randomAreaID()),
            refundable: randomBool(),
            active: randomBool(),
            date_start: randomDate(),
            date_end: randomDate(),
        });
    }
    await bulkPromise(data).then((data) => {
        console.log(i);
    });

}

return res.json({data: true});


};
let bulkPromise=(数据)=>{
返回新承诺((解决、拒绝)=>{
如果(data.length>0){
让bulk=Faker.collection.initializeUnderedBulkop();
data.forEach((d)=>{
散装。插入(d);
})
bulk.execute(()=>{
决心(正确);
});
}否则{
决议(假);
}
});
}
导出let索引=异步(请求:请求,响应:响应)=>{
for(设i=0;i<100;i++){
让数据=[];
对于(设y=0;y<200000;y++){
数据推送({
名称:randomName(),
夜晚:Math.random(),
price:Math.random(),
类型1:Math.random(),
类型2:Math.random(),
类型3:Math.random(),
类型4:Math.random(),
出发点:mongoose.Types.ObjectId(randomAreaID()),
目标:mongoose.Types.ObjectId(randomAreaID()),
可退款:randomBool(),
活动:randomBool(),
开始日期:随机日期(),
日期\结束:随机日期(),
});
}
等待(数据)。然后((数据)=>{
控制台日志(i);
});
}
返回res.json({data:true});
};

您是否有任何特殊原因需要一次插入二十万条记录?在这种规模上,把它推到一个后台处理器上不是更好的主意吗?它可以在不让用户挂起的情况下以可管理的块方式运行?在我的应用程序中,需要创建200万个“包”。。。所以是的。。。有一个特别的原因。有时有超过200万个组合。如果我把它发送到后台,我也会有同样的内存问题。所以首先我想解决这个问题。在php中,如果我将其拆分为块,则没有问题,因为它是同步操作
let bulkPromise = (data) => {
return new Promise((resolve, reject) => {
    if (data.length > 0) {
        let bulk = Faker.collection.initializeUnorderedBulkOp();
        data.forEach((d) => {
            bulk.insert(d);
        })
        bulk.execute(() => {
            resolve(true);
        });
    } else {
        resolve(false);
    }
});
}

export let index = async (req: Request, res: Response) => {

for (let i = 0; i < 100; i++) {
    let data = [];
    for (let y = 0; y < 200000; y++) {
        data.push({
            name: randomName(),
            nights: Math.random(),
            price: Math.random(),
            type1: Math.random(),
            type2: Math.random(),
            type3: Math.random(),
            type4: Math.random(),
            departure: mongoose.Types.ObjectId(randomAreaID()),
            destination: mongoose.Types.ObjectId(randomAreaID()),
            refundable: randomBool(),
            active: randomBool(),
            date_start: randomDate(),
            date_end: randomDate(),
        });
    }
    await bulkPromise(data).then((data) => {
        console.log(i);
    });

}

return res.json({data: true});


};