【发布时间】:2021-03-31 18:02:54
【问题描述】:
我仍然是 MongoDB/非关系模型数据存储的新手(来自 BI/DWH、关系数据库的经验),所以在尝试了解如何编写 MongoDB 时有些挣扎。请温柔一点。 :)
MongoDB 版本:3.6.0
问题来了:
- 我在 AWS 文档数据库实例的数据库中有一个集合。
- 此集合代表大约 1.5TB 的磁盘空间。很长一段时间以来,其中一个字段一直是作为字符串数据类型编写的,尽管它实际上是一个日期字段。为了正确查询该集合,我需要将数据类型从字符串更改为日期。 为此,我编写了以下查询:
var bulk = db.collection_name.initializeOrderedBulkOp();
var counter = 0;
db.collection_name.find().forEach(function(data) { var updoc = { "$set": {} };
var myKey = "snapshot_date";
updoc["$set"][myKey] = new Date(data.snapshot_date);
bulk.find({ "_id": data._id }).update(updoc);
counter++;
if (counter % 1000 == 0) { bulk.execute(); bulk = db.collection_name.initializeOrderedBulkOp(); }});
我在上周一(两天前)开始了这个查询,它仍在运行。我检查了它是否仍在运行,并且我看到它引擎正在运行,并且 cloudwatch 显示有关 CPU 利用率、可用内存和正在更新的文档的活动。
我的问题:这个查询可以提高效率吗?
我正在尝试更新每个文档而不过滤哪些应该和不应该更新,我知道这很多。
但是,即使在关系数据库中,我认为这不会花费这么长时间。
我应该尝试一种不同的技术来更新这个集合还是创建一个指定了该 dtype 的新集合?
【问题讨论】:
-
在提供可能的改进之前,请提供更多信息。 (1) 集合中有多少文档? (2) 集合的模式是什么?与其按照您的示例使用 1000 个批量单个文档更新进行更新,不如将其分解为影响多个文档的更新。
-
@tmcallaghan,可以为您提供更多信息。 1.集合中的文档数为7.75亿,775000000。2.架构如下
{ "_id" : ObjectId("5c9f8af85e9c3077830da4e1"), "client_number" :, "date" : "mm_ref_date" : "first_page" : "note_subject" : "group_numbers" : "snapshot_date" : "claim_number" : "last_update" : "page_count" : "note_id" : , "author_id" :, "narr_text": texthere} -
其他文档中没有任何嵌套文档,这可能不是很好的文档模型标准,但这是我目前正在使用的。
标签: mongodb amazon-web-services aws-documentdb