2018 年 7 月 17 日,AWS 发布了一份官方公告,解释说不再需要随机化每个 S3 对象键的第一个字符来实现最佳性能:https : //aws.amazon.com/about-aws/whats-new /2018/07/amazon-s3-announces-increased-request-rate-performance/
Amazon S3 宣布提高请求率性能
发表于:2018 年 7 月 17 日
Amazon S3 现在提供更高的性能,以支持每秒至少 3,500 个添加数据的请求和每秒 5,500 个检索数据的请求,这可以节省大量处理时间而无需额外费用。每个 S3 前缀都可以支持这些请求率,从而可以轻松显着提高性能。
今天在 Amazon S3 上运行的应用程序无需更改即可享受这种性能改进,在 S3 上构建新应用程序的客户无需进行任何应用程序自定义即可实现此性能。Amazon S3 对并行请求的支持意味着您可以根据计算集群的系数扩展 S3 性能,而无需对应用程序进行任何自定义。性能按前缀扩展,因此您可以并行使用任意数量的前缀来实现所需的吞吐量。前缀的数量没有限制。
这种 S3 请求速率性能提升消除了任何先前的指导,即随机化对象前缀以实现更快的性能。这意味着您现在可以在 S3 对象命名中使用逻辑或顺序命名模式,而不会对性能产生任何影响。此改进现已在所有 AWS 区域推出。有关更多信息,请访问 Amazon S3 开发人员指南。
这很好,但也令人困惑。它说每个 S3前缀都可以支持这些请求率,从而可以轻松显着提高性能
但是由于前缀和分隔符只是GET Bucket (List Objects)
列出存储桶内容时 API 的参数,所以谈论“每个前缀”的对象检索性能如何有意义。每次调用都GET Bucket (List Objects)
可以选择它想要的任何前缀和分隔符,因此前缀不是预定义的实体。
例如,如果我的存储桶有这些对象:
a1/b-2
a1/c-3
Run Code Online (Sandbox Code Playgroud)
然后,每当我列出存储桶内容时,我都可以选择使用“/”或“-”作为分隔符,因此我可能会认为我的前缀是
a1/
Run Code Online (Sandbox Code Playgroud)
或者
a1/b-
a1/c-
Run Code Online (Sandbox Code Playgroud)
但由于GET Object
API …