【问题标题】:AWS S3 - Mass Delete Strategy Over 400K ObjectsAWS S3 - 超过 400K 对象的批量删除策略
【发布时间】:2021-11-30 21:15:28
【问题描述】:

几天来,我一直在寻找一种策略来考虑 S3 中的大规模对象删除场景。例如,删除超过 400K 的对象。

我目前有一个类似于以下结构的存储桶:

  • .../FOO/${customerID}/../myObject.ext
  • .../ACME/${customerID}/../myObject.ext
  • .../XPTO/${customerID}/../myObject.ext

也就是说,在大多数情况下,我通过 customerID 对“文件夹”进行了隔离

我一直在寻找一些同步的解决方案,具有低延迟和良好的性能。

我找到了一些使用生命周期规则策略的解决方案,但我必须定期为每个客户创建动态删除策略,然后再删除它们

测试桶当前版本控制被禁用(但我可以在必要时启用它)。

我使用 Java SDK 创建了批量删除,但是在某些情况下我需要删除超过 400k 的对象。这最终会非常耗时。

有什么建议吗?

【问题讨论】:

  • 你有多少不同的“路径”?您有客户 ID 或路径列表吗?
  • 感谢您回复@ErmiyaEskandary。我有几个“路径”。但是这些路径是由 customerID 隔离的。删除由内部作业执行,该作业将检查哪个客户将删除数据。
  • 你真的关心它需要多长时间吗?在您决定删除这些对象时(例如,通过暂停客户帐户或从数据库表中删除关联的客户 ID),您能否有效地从应用程序中隐藏这些对象?
  • @jarmod 我需要从客户端物理删除所有数据(包括 S3 中的工件)。这是由于公司的内部合规性。
  • 生命周期规则似乎是实现这一目标的最直接的方法。他们不适合你有什么原因吗?

标签: amazon-web-services amazon-s3 aws-java-sdk


【解决方案1】:

您要么需要使用生命周期策略,要么需要编写自己的代码来调用DeleteObjects()

每个请求可以包含 1000 个键。

缓慢的部分是列出存储桶中的对象。您可能想要使用Amazon S3 Inventory,它可以提供列出所有对象的每日或每周 CSV 文件。您的程序可以使用库存文件作为输入。

因此,400,000 个对象需要 400 次调用 DeleteObjects()

或者,您可以通过编程方式调用 PutObjectLifecycle() 让 S3 为您完成所有删除操作。

【讨论】:

  • 我已经创建了一个批量删除的方法,但是非常耗时。在平均有 10K 条记录的测试中,耗时近 9 分钟。我目前正在验证 aws s3 CLI 的使用。它看起来有点快,但它仍然不是我真正想要的。我相信事实上最好的策略是使用 PutObjectLifecycle,因为我已经用尽了替代方案。
  • 如果您在每次DeleteObjects() 调用中发送 1000 个对象,并且您使用 10K 条记录进行测试,这是否意味着 10 次调用需要 9 分钟,或者每次调用大约需要 1 分钟?如果是这样,这听起来像是多线程的好案例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-18
  • 2020-03-27
  • 2020-11-12
  • 1970-01-01
  • 1970-01-01
  • 2016-06-12
  • 1970-01-01
相关资源
最近更新 更多