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

无法从我的ubuntu EC2计算机连接到AWS DocumentDB

通过 SSH 隧道连接到 .Net Core 中的 AWS DocumentDb