为密钥名称添加随机前缀以提高S3性能?

时间:2017-03-26 22:42:52

标签: amazon-s3

您希望此存储桶每秒立即收到超过150个PUT请求。公司应该做些什么来确保最佳绩效?

A)Amazon S3将自动管理这种规模的性能。

B)为键名添加随机前缀。

正确答案是B,我试图找出原因。有人可以解释B的重要性,如果它仍然是真的吗?

6 个答案:

答案 0 :(得分:27)

自2018年7月17日AWS宣布以来,不再需要对S3密钥进行哈希处理和随机前缀以提高性能: https://aws.amazon.com/about-aws/whats-new/2018/07/amazon-s3-announces-increased-request-rate-performance/

答案 1 :(得分:1)

查找/写入工作意味着使用相似或有序的文件名会损害性能。

为了缓解高访问对象的高负载,仍然建议在S3键前添加哈希/随机ID。

Amazon S3 Performance Tips & Tricks

Request Rate and Performance Considerations

答案 2 :(得分:1)

B是正确的,因为当您添加随机性(称为熵或某种无序性)时,可以将所有对象彼此靠近放置在索引的同一分区中(例如,以当年为前缀的键) )当您的应用程序遇到流量增加时,它将尝试从索引的同一部分读取数据,从而导致性能下降。因此,应用程序开发人员添加了一些随机前缀来避免这种情况。 注意:AWS可能已经照顾了这个问题,因此Dev不需要照顾,而只是想尝试为提出的问题给出正确的答案。

答案 3 :(得分:1)

S3前缀通常由前6-8个字符确定;

这已在2018年中改变-请参阅公告 https://aws.amazon.com/about-aws/whats-new/2018/07/amazon-s3-announces-increased-request-rate-performance/

但这是事实真相。实际上,前缀(按旧定义)仍然很重要。

S3不是传统的“存储”-每个目录/文件名都是键/值对象存储中的单独对象。而且还必须对数据进行分区/分片以扩展到四亿个对象。因此,是的,这种新的分片有点像“自动”,但是如果您创建了一个新的进程,并以疯狂的并行方式写入到不同的子目录中,则实际上不是这样。在S3从新的访问模式中学习之前,您可能会遇到S3限制,然后才相应地对数据进行分片/重新分区。

学习新的访问方式需要时间。数据重新分区需要时间。

在2018年中,情况确实有所改善(对于没有统计数据的新存储桶,吞吐量提高了约10倍),但是如果数据进行了适当的分区,这仍然不是可能的。虽然公平地说,但是如果您没有大量数据,或者您访问数据的方式不是非常并行(例如,在S3中的大量Tb数据上运行Hadoop / Spark集群,并且有数百个以上的数据),则可能不适用于您并行访问同一存储桶的任务)。

TLDR

“旧前缀”仍然很重要。 将数据写入存储桶的根目录,第一级目录将确定“前缀”(例如,使其随机)

“新前缀”有效,但最初不起作用。加载需要花费时间。

PS。另一种方法-如果您希望大量数据即将泛滥,可以联系AWS TAM(如果有),并要求他们预先分区一个新的S3存储桶。

答案 4 :(得分:1)

截至 2021 年 6 月。

如 AWS 指南最佳实践设计模式中所述:优化 Amazon S3 性能,应用程序可以实现至少 3,500 PUT/COPY/POST/DELETE 或 5,500 GET/HEAD 请求在存储桶中的每个前缀每秒。

我认为随机前缀将有助于扩展 S3 性能。 例如,如果我们在一个 S3 存储桶中有 10 个前缀,则最多将有 35000 个 put/copy/post/delete 请求和 55000 个读取请求。

https://docs.aws.amazon.com/AmazonS3/latest/userguide/optimizing-performance.html

答案 5 :(得分:0)

如何将随机性引入S3?

  1. 带有随机十六进制哈希值的前缀文件夹名称。例如:s3://BUCKET/23a6-FOLDERNAME/FILENAME.zip

  2. 带有时间戳的前缀文件名。例如:s3://BUCKET/ FOLDERNAME/2013-26-05-15-00-00-FILENAME.zip