我正在编写一个简单的DynamoDB日志记录服务。
我有一个以用户ID哈希和时间戳(Unix纪元整数)范围为键的日志表。
当服务的用户终止其帐户时,我需要删除表中的所有项目,而不考虑范围值。
在考虑可能有数百万个要删除的项目的情况下,如何推荐执行此类操作?
据我所见,我的选择是:
A:执行扫描操作,在每个返回的项目上调用delete,直到没有任何项目剩余
B:执行BatchGet操作,再次在每个项目上调用delete,直到没有任何项目剩余
对我来说,这两种方法都看起来很糟糕,因为它们需要很长时间。
我理想情况下希望做的是调用LogTable.DeleteItem(user_id) - 不提供范围,并让它为我删除所有内容。
BatchWriteItem
删除项目时,需要通过TableWriteItems
指定项目。 - Neilboto3.resource.Table
API 中有一个高级别的batch_writer()
函数,可以“自动处理缓冲和分批发送条目。此外,批量写入器还会自动处理任何未处理的项,并根据需要重新发送它们”,即它是一个包装工具,用于管理烦人的部分,基于 BatchWriteItem 实现。更多信息请查看:https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#DynamoDB.Table.batch_writer - Davosbatch_writer
是进行批量删除的最佳方式。我在GitHub上放了一个工作示例https://github.com/awsdocs/aws-doc-sdk-examples。 - Laren Crawford