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

在S3中创建前缀以并行读取并提高性能

巫马山
2023-03-14

我正在做一些研究,我正在读这一页https://docs.aws.amazon.com/AmazonS3/latest/dev/request-rate-perf-considerations.html

上面写着

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

我不知道最后一点是什么意思。我的理解是,对于文件名“Australia/NSW/Sydney”,前缀是“Australia/NSW”。对的

创建其中的10个如何提高读取性能?您是否创建了例如Australia/NSW1/、Australia/NSW2/、Australia/NSW3/,然后以某种方式将它们映射到负载均衡器?

共有2个答案

常小白
2023-03-14

不,S3永远不会连接到LB。本文涵盖了这个主题,但重要的亮点是:

(...) S3中的键按前缀进行分区

(...)

分区被拆分要么是由于持续的高请求率,要么是因为它们包含大量键(这会减慢分区内的查找速度)。将键移动到新创建的分区中会有开销,但由于请求率低且没有特殊技巧,即使在分区拆分操作期间,我们也可以保持相当高的性能。这种拆分操作在S3中每天发生数十次,从用户性能的角度来看根本没有被注意到。但是,当单个分区的请求率显着增加时,分区拆分会对请求性能不利。那么,这些较重的工作负载如何随着时间的推移发挥作用呢?对键本身进行智能命名!

因此,可以从同一分区读取澳大利亚/新南威尔士州,而可以从其他两个分区读取澳大利亚/新南威尔士州。不一定要这样,但前缀仍然允许对如何划分数据进行一些控制,因为您可以更好地了解将对数据执行何种读取。您的目标应该是使读取均匀分布在前缀上。

燕鸿波
2023-03-14

S3的设计类似于Java中的哈希表/哈希映射。前缀构成哈希桶的哈希。。。而实际的文件则分组存储在这些存储桶中。。。

要搜索特定文件,您需要比较哈希桶中的所有文件......而进入哈希桶是即时的(恒定时间)。

因此,键的描述性越强,散列桶就越多,因此这些桶中的项目就越少......这使得查找速度更快......

例如。世界上所有国家的旅游景点详细信息桶
Bucket1: placeame.jpg(桶中的所有文件没有前缀)
Bucket2: Country Name/state/place eName.jpg

现在,如果您正在澳大利亚/新南威尔士州寻找Sydney.info...在第二桶中查找会更快。

 类似资料:
  • 上下文:假设我有一个显示餐厅列表的应用程序 方法1:将所有餐厅添加到集合中,并将文档id保存在属于指定类别的数组中。所以,如果我想要所有的印度餐馆,我只需要获取包含所有印度餐馆Id的数组Indian,然后加载它们。 方法2:将所有餐厅添加到集合中,并为每个文档指定一个类别。因此,当用户需要印度餐馆列表时,我会使用where()将其过滤掉。在这种方法中,firestore是否会为所有100000次文

  • 我负责改进应用程序的性能。我现在正考虑让某些事情并行运行。 如果它能有所帮助:我们使用Postgres作为我们的数据库,EclipseLink是我们的JPA提供程序。 这是通过 Dynatrace 可视化的请求执行(针对我们的 endpoint)的快照: 每个黄色条表示数据库中SQL查询的运行时间。 其中一些呼叫不相互依赖,可能同时发生。 例如,考虑前 9 个查询(从第一个 到最后一个 ,包括):

  • 在AWS生命周期管理中,我们是否可以创建一个带有多个前缀的规则。我浏览了这个博客https://docs.aws.amazon.com/amazons3/latest/dev/manage-lifecycle-using-dot-net.html 但是这个文档只展示了一个规则和一个前缀的示例

  • 问题内容: 我对此进行了一些讨论,但还不太了解正确的解决方案:我想将S3中的数百个文件加载到RDD中。这是我现在的做法: 在不使用实际的阅读客户端: 我从在Scala中针对相同问题看到的答案中“翻译”了一下。我认为也可以将整个路径列表传递给,但是我不确定哪种是最佳做法。 问题答案: 根本的问题是,在s3中列出对象的速度确实很慢,并且每当执行树遍历时,看起来像目录树的方式都会降低性能(就像路径的通配

  • 问题内容: 无论如何,我可以写到tempfile并将其包含在命令中,然后关闭/删除它。我想执行命令,例如:some_command / tmp / some-temp-file。 提前谢谢了。 问题答案: 如果需要带有名称的临时文件,则必须使用该功能。然后就可以使用了。有关详细信息,请阅读 http://docs.python.org/library/tempfile.html。

  • 因此,我试图在SML中创建一个解析器程序,提示用户输入表达式。然后,它会告知输入的表达式是后缀、前缀还是中缀,然后显示结果。下面是我希望它做的一个示例: 我在创建函数时遇到了麻烦,这样它就会向屏幕输出结果,我不确定我是否正确地执行了该方法。在我首先计算出转换之前,我甚至不会专注于输出树。 我觉得我应该在第二个if语句中放一个递归方法(检查与运算符是否相等),但由于Alice SML语法的限制,我不