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

标签 mongodb

我有一个非常大的 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/

相关文章:

node.js - mongo 的简短用户友好 ID

node.js - 在AWS或GCP上部署Node + MongoDB API

postgresql - PostgreSQL 的扩展性与 MongoDB 相比如何?

mongodb - NoSQL(文档)- 引入新集合的充分理由是什么?

java - 将数据导入 mongodb 时出现 JSONParseException

c# - 有什么办法可以跳过 GeoNear() MongoDB 方法中的某些文档吗?

javascript - nodejs mongoose 删除命中错误 : Can't set headers after they are sent

php - Doctrine Mongodb ODM 和 DateTime 查询

node.js - 如何使用 mongodb 命令删除字段内的 html 标签?

json - ObjectId 未序列化为 JSON