AWS DocumentDB BulkUpdate 长时间运行
Posted
技术标签:
【中文标题】AWS DocumentDB BulkUpdate 长时间运行【英文标题】:AWS DocumentDB BulkUpdate Long Running Time 【发布时间】: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
其他文档中没有任何嵌套文档,这可能不是很好的文档模型标准,但这是我目前正在使用的。
【参考方案1】:
如上所述,您正在执行 775mm 单独更新操作。虽然以 1000 个批量执行此操作比一次执行一个要好,但仍需要很长时间才能完成。更高效的方法是更新大量文档范围,比如 50000,并发布多重更新。 MongoDB: how to update n records based on ObjectID 中有足够的代码来帮助您更新此技术的代码。
【讨论】:
以上是关于AWS DocumentDB BulkUpdate 长时间运行的主要内容,如果未能解决你的问题,请参考以下文章
拒向 MongoDB 妥协,AWS 推出数据库替代品 DocumentDB
AWS回击了!推出DocumentDB,可兼容MongoDB
从 mongoDB 迁移后的 AWS DocumentDB 错误
通过 SSH 隧道从 Java 程序连接到 AWS DocumentDB