节点 | MongoDB |如何减慢插入速度?
NodeJS | MongoDB | How do I slow down my inserts?
我有一个长度为 8,000 项的数组,我正在我的 MongoDB Atlas 数据库中创建一个新文档,但我一直达到每秒 100 次操作的限制。我不需要数据以闪电般的速度进入那里(每秒 75 次插入对我来说很好),所以我尝试在写入函数的中间插入一个睡眠函数,但它没有按我预期的那样运行。
我期望和希望我的代码做什么:
- 写第一个文档
- 睡眠 20 毫秒
- 写第二个文档
现在好像在做什么:
- 写第一个文档
- 马上写第二个文件
- 马上写第三个文件
代码示例如下:
const Sleep = ms => new Promise(res => setTimeout(res, ms));
const MyFunction = array => {
return Promise.all(array.map(row => {
const item = new Item({
"property1": row.property1,
"property2": row.property2
});
Sleep(20) // tried putting a sleep here but that didn't work
return item.save();
}));
};
您需要等待您的睡眠方法,因为它是异步的。但即便如此,它也不会起作用,因为它只会延迟承诺的创建,而不是执行。
更好用batch-promises
https://www.npmjs.com/package/batch-promises
const batch = require("batch-promises");
const MyFunction = async array => {
return batch(100, array, row => {
const item = new Item({
"property1": row.property1,
"property2": row.property2
});
return item.save();
});
};
或者如果您想按顺序进行
const MyFunction = async array => {
for (const row of array) {
const item = new Item({
"property1": row.property1,
"property2": row.property2
});
await item.save();
}
};
我有一个长度为 8,000 项的数组,我正在我的 MongoDB Atlas 数据库中创建一个新文档,但我一直达到每秒 100 次操作的限制。我不需要数据以闪电般的速度进入那里(每秒 75 次插入对我来说很好),所以我尝试在写入函数的中间插入一个睡眠函数,但它没有按我预期的那样运行。
我期望和希望我的代码做什么:
- 写第一个文档
- 睡眠 20 毫秒
- 写第二个文档
现在好像在做什么:
- 写第一个文档
- 马上写第二个文件
- 马上写第三个文件
代码示例如下:
const Sleep = ms => new Promise(res => setTimeout(res, ms));
const MyFunction = array => {
return Promise.all(array.map(row => {
const item = new Item({
"property1": row.property1,
"property2": row.property2
});
Sleep(20) // tried putting a sleep here but that didn't work
return item.save();
}));
};
您需要等待您的睡眠方法,因为它是异步的。但即便如此,它也不会起作用,因为它只会延迟承诺的创建,而不是执行。
更好用batch-promises
https://www.npmjs.com/package/batch-promises
const batch = require("batch-promises");
const MyFunction = async array => {
return batch(100, array, row => {
const item = new Item({
"property1": row.property1,
"property2": row.property2
});
return item.save();
});
};
或者如果您想按顺序进行
const MyFunction = async array => {
for (const row of array) {
const item = new Item({
"property1": row.property1,
"property2": row.property2
});
await item.save();
}
};