Javascript MongoDB Bulkwrite查询冻结Node.js响应
我正在通过node.js API测试MongoDB上的批量更新。更新50000个条目大约需要8分30秒,然后MongoDB完成其工作,但没有从Node.js API获得API响应 在此过程中,CPU使用率为32%,磁盘使用率为100% 我在这里提到了一些基本代码,通过这些代码你们可以了解:Javascript MongoDB Bulkwrite查询冻结Node.js响应,javascript,node.js,mongodb,mongoose,bulkupdate,Javascript,Node.js,Mongodb,Mongoose,Bulkupdate,我正在通过node.js API测试MongoDB上的批量更新。更新50000个条目大约需要8分30秒,然后MongoDB完成其工作,但没有从Node.js API获得API响应 在此过程中,CPU使用率为32%,磁盘使用率为100% 我在这里提到了一些基本代码,通过这些代码你们可以了解: // I am using mongoose. let filteredArray = [...]//contains 50000 entries console.time() let bulkOps =
// I am using mongoose.
let filteredArray = [...]//contains 50000 entries
console.time()
let bulkOps = [];
filteredArray.map( (x) => {
let upsertDoc = {
'updateOne': {
'filter': { keywords: x.keywords },
'update': {
$inc: { counter: -1 },
$pull: {
data: {
dataid: req.body.dataid
},
},
},
'upsert': true
}
}
bulkOps.push(upsertDoc);
});
await TestDataTable.bulkWrite(bulkOps);
console.timeEnd()
return res.send({status: 200, message: "Enteries updated successfully"})
有人知道node.js为什么没有响应并返回响应吗?在此方面,我们非常感谢您的帮助
另一种方法
这种方法大约需要2分10秒才能完成任务
在此过程中,CPU使用率为100%,磁盘使用率为100%
console.time()
await Promise.all(
filteredArray.map(async (x) => {
await TestDataTable.updateOne(
{ keywords: x.keywords },
{
$inc: { counter: -1 },
$pull: {
data: {
dataid: req.body.dataid
},
},
},
).exec();
}),
);
console.timeEnd()
return res.send({status: 200, message: "Enteries updated successfully"})
但是这里也没有得到API响应。bulkWrite是返回承诺还是只与回调一起工作?(顺便说一句,在你编写的代码中,你不处理发送500失败的情况)我有这个场景,但我没有提到,因为我认为这里不需要。你确定没有套接字超时吗?对于单个http请求来说,8分钟听起来很糟糕。你能详细说明一下“没有得到API响应”吗。tcpdump是怎么说的呢?所以在MongoDB更新任务完成后,我希望Node.js会响应条目被更新。但它是完全空白的,意味着没有输出响应。是的,大约需要8分钟。如果我使用循环,在循环下一个接一个地更新条目,则需要大约2分30秒的时间。我试过了also@AlexBlex我更新了问题。请看一下