gpt4 book ai didi

mongodb - 如何限制 MongoDB 的更新脚本?

转载 作者:IT老高 更新时间:2023-10-28 13:33:50 27 4
gpt4 key购买 nike

我有一个非常大的 MongoDB 需要更新,所以我写了一个 javascript 来完成它:

for (var i = 0; i < 1000000; i++) {
db.test.update(
{foo_field: dataArray1[i]},
{$set: { bar_field: dataArray2[i]}},
{upsert:false}
)
}

我担心执行此脚本会在短时间内执行太多写入操作,并且会降低数据库的性能,因此我想根据复制延迟来限制更新的速率。

但是,我找不到强制脚本休眠或等待给定毫秒数的方法。它提示 setInterval 和 setTImeout,说它们“未定义”。这在 Mongo 中可行吗?

最佳答案

如果您使用 MongoDB shell 进行更新,setInterval 和 setTimeout 都不起作用。 MongoDB shell 确实有 sleep 功能,所以你可以添加这一行

// sleep 100ms after 1000 records inserted
if(1000 === counter) {
sleep(100);
counter = 0;
}
else {
counter++;
}

将此行与记录计数器结合使用,例如每插入 1000 条记录后休眠 100 毫秒。上面的代码不会阻塞服务器。

不要与服务器命令 Sleep - MongoDB Manual 3.0 混淆

无论如何,我不会太担心 MongoDB 无法处理插入。您可以使用 {w:1} 作为写入关注点,以确保返回游标。最后,据我所知,MongoDB shell 不是异步的,这意味着它不会同时触发 100,000 个调用,而是按顺序触发。然而 NodeJS mongo 驱动程序 是异步的,因此可以使用 async.js 来控制数据流 - 例如,一次批量插入 1000 个,有 1-2 个工作人员。

关于mongodb - 如何限制 MongoDB 的更新脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33292728/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com