当前位置: 首页 > 知识库问答 >
问题:

S3-什么是前缀?还有什么定时器适用?

左丘阳晖
2023-03-14

我想知道是否有人知道s3前缀到底是什么,以及它如何与amazon发布的s3速率限制交互:

AmazonS3自动扩展到高请求率。例如,您的应用程序在一个bucket中每个前缀每秒至少可以实现3500个PUT/POST/DELETE和5500个GET请求。bucket中前缀的数量没有限制。

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

前缀需要分隔符吗?

如果我们有一个存储桶,将所有文件存储在“根”级别(完全平坦,没有任何前缀/删除符),那么该存储桶是否算作单个“前缀”,是否受上述速率限制的约束?

我解释amazon文档的方式向我表明,情况就是这样,平面结构将被视为一个“前缀”。(即以上述公布的利率限额为准)

假设您的桶(管理员创建的)有四个对象,对象键如下:

开发/项目1.xls

财务/statement1.pdf

私人/taxdocument.pdf

s3-dg.pdf

s3-dg.pdf键没有前缀,因此其对象直接显示在bucket的根级别。如果打开Development/文件夹,则会在其中看到Projects.xlsx对象。

在上述示例中,s3-dg.pdf是否会受到与其他前缀(html" target="_blank">开发/金融/私人)不同的速率限制(5500 GET请求/秒)?

更令人困惑的是,我读过几篇关于amazon使用前N个字节作为分区键的博客,并鼓励使用高基数前缀,我只是不确定这如何与具有“平面文件结构”的bucket交互。

共有3个答案

阎安邦
2023-03-14

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

这一点在2018年年中有所改变——见公告https://aws.amazon.com/about-aws/whats-new/2018/07/amazon-s3-announces-increased-request-rate-performance/

但这是事实的一半。实际上,前缀(在旧定义中)仍然很重要。

S3不是传统的“存储”——每个目录/文件名都是键/值对象存储中的一个单独对象。此外,数据还必须进行分区/分片,以缩放到无数个对象。是的,这种新的分片有点“自动”,但如果你创建了一个新的进程,它以疯狂的并行方式写入到不同的子目录中,它就不是真正的自动分片了。在S3从新的访问模式中学习之前,您可能会在S3相应地重新硬存储/重新分区数据之前遇到S3限制。

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

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

TLDR:

“旧前缀”仍然很重要。将数据写入bucket的根目录,其中的第一级目录将确定“前缀”(例如,将其设置为随机)

“新前缀”确实起作用,但一开始不起作用。适应负载需要时间。

另外一种方法——如果你预计大量数据很快就会涌入,你可以联系你的AWS TAM(如果你有),让他们对一个新的S3存储桶进行预分区。

李锦
2023-03-14

这看起来像是在amazon发布通信中被模糊地提到的

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

性能按前缀缩放,因此可以根据需要并行使用任意数量的前缀来实现所需的吞吐量。前缀的数量没有限制。

这种S3请求速率性能提高消除了以前任何随机化对象前缀以实现更快性能的指导。这意味着您现在可以在S3对象命名中使用逻辑或顺序命名模式,而不会对性能产生任何影响。这种改进现在在所有AWS地区都可以使用。有关更多信息,请访问Amazon S3开发者指南。

胡飞舟
2023-03-14

你说得对,这个声明似乎自相矛盾。只是写得不正确,但信息是正确的。简言之:

  1. 每个前缀每秒最多可实现3500/5500个请求,因此出于许多目的,我们假设您不需要使用多个前缀。

以下是AWS支持部门对我的澄清请求的回复,仅供参考:

你好,奥伦,

感谢您联系AWS支持。

我知道您阅读了AWS关于S3请求速率性能提高的帖子,您对此公告有其他问题。

在此升级之前,S3每秒支持100个PUT/LIST/DELETE请求,每秒支持300个GET请求。为了获得更高的性能,必须实现随机哈希/前缀模式。自去年以来,请求速率限制增加到每秒3500次PUT/POST/DELETE和5500次GET请求。这一增长通常足以让应用程序减轻503个减速错误,而不必随机化前缀。

但是,如果新的限制不够,则需要使用前缀。前缀没有固定数量的字符。它是bucket名称和对象名称之间的任何字符串,例如:

  • 桶/文件夹1/子1/文件
  • 桶/文件夹1/子2/文件
  • 桶/1/文件
  • 桶/2/文件

对象“file”的前缀为:/folder1/sub1//folder1/sub2//1//2/。在本例中,如果将读取平均分布在所有四个前缀上,则每秒可以实现22000个请求。

 类似资料:
  • S3前缀的定义到底是什么。 假设我有以下S3结构: sample.jpg?的前缀是什么 将是前缀或整个路径,直到将是前缀(即) 因为每个前缀都有读写限制。

  • 医生说, 例如,应用程序在一个bucket中的每个前缀每秒至少可以实现3500个PUT/COPY/POST/DELETE和5500个GET/HEAD请求。一个bucket中前缀的数量没有限制。您可以通过并行化读取来提高读写性能。例如,如果在Amazon S3存储桶中创建10个前缀来并行读取,则可以将读取性能扩展到每秒55000个读取请求。 但是,它没有明确提到前缀的概念。 例如, 假设我有3个文件

  • 来自请求率和性能指南-Amazon Simple Storage Service: Amazon S3会自动扩展到高请求率。例如,您的应用程序可以在存储桶中的每个前缀每秒至少实现3,500个PUT/POST/DELETE和5,500个GET请求。存储桶中的前缀数量没有限制。以指数方式提高您的读取或写入性能很简单。例如,如果您在Amazon S3存储桶中创建10个前缀以并行化读取,您可以将读取性能扩

  • 问题内容: 我知道,如果要确保某些CSS3功能在任何地方都可以使用,我们需要使用W3C推荐的前缀版本,例如: 我知道这些前缀用于实验功能,但为什么有必要?他们为什么不在原始W3C上测试它们?每个CSS3功能是否都为每个浏览器都具有或具有前缀,或者如果他们认为应该的话,他们只是创建带前缀的版本? 问题答案: 供应商前缀的最初目的是使供应商能够添加自己的非标准功能以供其CSS实现使用。但是,它们中的大

  • 本文向大家介绍什么是最左前缀原则?相关面试题,主要包含被问及什么是最左前缀原则?时的应答技巧和注意事项,需要的朋友参考一下 MySQL中的索引可以以一定顺序引用多列,这种索引叫作联合索引。如User表的name和city加联合索引就是(name,city),而最左前缀原则指的是,如果查询的时候查询条件精确匹配索引的左边连续一列或几列,则此列就可以被用到。如下: 这里需要注意的是,查询的时候如果两个

  • 说到后缀树,我相信很多人通过名字看出来树是一种结构形态,后缀树就是带后缀的结构,后缀,顾名思义,甚至通俗点来说,就是所谓后缀就是后面尾巴的意思。比如说给定一长度为n的字符串S=S1S2..Si..Sn,和整数i,1≤i≤n,子串SiSi+1...Sn便都是字符串S的后缀。当然这样只是通过文字形式上的理解,不够全面,下面我们来看看具体的定义和表现形式吧。 什么是后缀树? 后缀树是一种数据结构,能快速