批量删除S3文件的最有效的方法

我希望能够在S3上一次批量删除数千或数万个文件。 每个文件将从1MB到50MB的任何地方。 当然,我不希望用户(或我的服务器)在文件正在被删除的过程中等待。 因此,这些问题:

  1. S3如何处理文件删除,尤其是在删除大量文件时?
  2. 有没有一个有效的方法来做到这一点,使AWS做大部分的工作? 通过高效,我的意思是通过向S3提出最less的请求数量,并在我的服务器上使用最less的资源占用最less的时间。

AWS使用S3 REST API及其各种包装,支持每个请求批量删除多达1000个对象。 此方法假定您知道要删除的S3对象键(也就是说,它不是用来处理保留策略,超过一定大小的文件等的)。

S3 REST API可以在单个请求中指定最多1000个要删除的文件,这比单个请求更快。 请记住,每个请求都是一个HTTP(因此是TCP)请求。 所以每个请求都有开销。 你只需要知道对象的键,并创build一个HTTP请求(或使用你select的语言的包装)。 AWS提供了有关此function及其用法的很好的信息 。 只要select你最舒服的方法!

我假设你的用例涉及最终用户指定一些特定的文件一次删除。 而不是像“清除引用图片文件的所有对象”或“清除比特定date更早的所有文件”(我认为在S3中单独configuration容易)清除任务。

如果是这样,你会知道你需要删除的密钥。 这也意味着用户会喜欢更多关于他们的文件是否被成功删除的实时反馈。 对于确切的密钥的引用应该是非常快的,因为尽pipe处理了大量的数据,S3被devise为有效地扩展。

如果没有,您可以查看asynchronousAPI调用。 你可以从这个博客文章中了解到他们将如何工作,或者用你select的语言来search如何做。 这将允许删除请求占用自己的线程,而其余的代码可以在不使用户等待的情况下执行。 或者,您可以将请求卸载到队列中。 。 。 但是这两个选项都会使你的代码(asynchronous代码可能很烦人)或者你的环境(你需要一个服务/守护进程/容器/服务器来处理队列)不必要地复杂化,所以如果可能的话,我会避免这种情况。

编辑:我没有声望超过2个链接。 但你可以在这里看到亚马逊的请求率和性能的评论: http : //docs.aws.amazon.com/AmazonS3/latest/dev/request-rate-perf-considerations.html和S3常见问题评论,批量deleiton是如果可能的话,要走的路。

不知道你是如何pipe理s3桶,这可能会或可能不会特别有用。

AWS CLI工具有一个名为“sync”的选项,可以特别有效地确保s3具有正确的对象。 如果您或您的用户正在从本地文件系统pipe理S3,则可以通过使用CLI工具节省大量工作,以确定哪些对象需要删除。

http://docs.aws.amazon.com/cli/latest/reference/s3/sync.html

我对这个任务的Web控制台的性能感到沮丧。 我发现AWS CLI命令做得很好。 例如:

aws s3 rm --recursive s3://my-bucket-name/huge-directory-full-of-files

对于大文件层次结构,这可能需要相当长的时间。 你可以在tmuxscreen会话中设置它,然后再回来查看。