首页 文章

S3 - 前缀究竟是什么?什么Ratelimits适用?

提问于
浏览
3

我想知道是否有人知道s3前缀是什么以及它如何与亚马逊的published s3 rate limits交互:

Amazon S3会自动扩展到高请求率 . 例如,您的应用程序可以在一个存储桶中每个前缀每秒至少实现3,500个PUT / POST / DELETE和5,500个GET请求 . 存储桶中的前缀数量没有限制 .

虽然这很清楚我不太确定前缀是什么?

前缀是否需要分隔符?

如果我们有一个存储桶,我们将所有文件存储在“根”级别(完全平坦,没有任何前缀/分隔符),这是否算作单个“前缀”并且是否受上面公布的速率限制的约束?

我正在解释amazon's documentation的方式告诉我,情况就是这样,并且扁平结构将被视为单个"prefix" . (即它将受上述公布的费率限制)

假设您的存储桶(admin-created)有四个对象,其中包含以下对象键:Development / Projects1.xls Finance / statement1.pdf Private / taxdocument.pdf s3-dg.pdf s3-dg.pdf key没有前缀,因此其对象直接出现在存储桶的根级别 . 如果打开Development /文件夹,则会在其中看到Projects.xlsx对象 .

在上面的例子中,s3-dg.pdf是否会受到与其他每个前缀(开发/财务/私人)不同的5500 GET请求/秒限制?

更令人困惑的是,我已经阅读了几个关于亚马逊的博客,使用前N个字节作为分区键并鼓励使用高基数前缀,我只是不确定它是如何与具有“平面文件结构”的桶交互的 .

2 回答

  • 0

    为了使AWS能够每秒处理数十亿个请求,他们需要对数据进行分片,以便优化吞吐量 . 为此,他们根据对象键的前6到8个字符将数据拆分为分区 . 记住S3不是一个分层文件系统,它只是一个键值存储,虽然密钥经常被用作组织数据的文件路径,前缀文件名 .

    现在这不是一个问题,如果你期望每秒少于100个请求,但如果你有严格的要求,那么你需要考虑命名 .

    为了获得最大的并行吞吐量,您应该考虑如何使用数据并在键的开头使用变化最大的字符,或者甚至为键的前8个字符生成8个随机字符 .

    例如假设前6个字符定义分区:

    files/user/bob 将是 bad ,因为所有对象都在一个分区 files/ 上 .

    如果仅从分区 2018-0 读取今天的数据,则 2018-09-21/files/bob 将为 almost as bad . 但 slightly better 如果从过去几年读取对象 .

    如果不同的用户可能同时从分区 bob/us 使用数据,则 bob/users/files 将为 pretty good . 但如果鲍勃是迄今为止最繁忙的用户,那就不那么好了 .

    3B6EA902/files/users/bob 对于性能来说会是 best 但是引用更具挑战性,其中第一部分是随机字符串,这将是相当均匀的分布 .

    根据您的数据,您需要考虑任何一个时间点,谁正在阅读什么,并确保键具有足够的变化以适当地进行分区 .


    对于您的示例,我们假设分区取自密钥的前6个字符:

    对于键 Development/Projects1.xls ,分区键将是 Develo

    对于键 Finance/statement1.pdf ,分区键将是 Financ

    对于键 Private/taxdocument.pdf ,分区键将是 Privat

    对于键 s3-dg.pdf ,分区键将是 s3-dg.

  • 1

    这似乎在亚马逊发布通信中被模糊地解决了

    https://aws.amazon.com/about-aws/whats-new/2018/07/amazon-s3-announces-increased-request-rate-performance/

    每个前缀的性能标度,因此您可以并行使用尽可能多的前缀来实现所需的吞吐量 . 前缀数量没有限制 . 此S3请求速率性能增加会删除任何先前的随机化对象前缀的指导,以实现更快的性能 . 这意味着您现在可以在S3对象命名中使用逻辑或顺序命名模式,而不会产生任何性能影响 . 现在,所有AWS区域都可以使用此改进 . 有关更多信息,请访问Amazon S3开发人员指南 .

相关问题