gpt4 book ai didi

mongodb - 对大型 mongo 集合的部分文档更新 - 如何不锁定数据库?

转载 作者:可可西里 更新时间:2023-11-01 10:00:59 26 4
gpt4 key购买 nike

我有一个带有集合的 mongo 数据库实例,其中包含大约 1700 万条记录。

我希望更改所有 1700 万个文档的文档结构(在文档中添加一个新属性),这样我就不必在处理不同结构时遇到问题并使查询更易于编写。

我被告知,如果我运行更新脚本来执行此操作,它将锁定整个数据库,可能会关闭我们的网站。

在不发生这种情况的情况下更改文档的最简单方法是什么? (我不介意更新缓慢,只要它最终发生)

我尝试做的查询是:

db.history.update(
{ type : { $exists: false }},
{
$set: { type: 'PROGRAM' }
},
{ multi: true }
)

最佳答案

您可以分批更新集合(比如每批 50 万),这将分配负载。

我创建了一个包含 20000000 条记录的集合并在其上运行了您的查询。在虚拟机上更新大约需要 3 分钟,我仍然可以在单独的控制台中从数据库中读取数据。

> for(var i=0;i<20000000;i++){db.testcoll.insert({"somefield":i});}

mongo 中的锁定非常轻量级,不会在整个更新过程中一直保持。把它想象成 20000000 个单独的更新。您可以在这里阅读更多内容:

http://docs.mongodb.org/manual/faq/concurrency/

关于mongodb - 对大型 mongo 集合的部分文档更新 - 如何不锁定数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20719987/

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