列出具有前缀和分隔符的S3存储桶的性能

时间:2016-08-13 08:33:13

标签: amazon-web-services amazon-s3

根据listing documentation,可以将大量导航键视为层次结构。我打算存储大量的密钥(比方说几亿),分布在一个合理的“层次结构”上。

使用前缀和分隔符的性能如何?是否需要在S3端完全枚举密钥,因此是O(n)操作?我不知道密钥是存储在一个大的哈希表中,还是它们是否有索引数据结构,或者它们是否存储在树中或是什么。

我想避免我拥有大量密钥并导致“层次结构”突然变得困难的情况。

所以如果我有以下钥匙:

  • abc/def/ghi/0
  • abc/def/ghi/1
  • abc/def/ghi/...
  • abc/def/ghi/100,000,000,000

是否会影响查询的速度Delimiter='/, Prefix='abc/def'

2 个答案:

答案 0 :(得分:2)

只要您不在前缀中使用连续序列(例如日期2016-13-08,2016-13-09等),就不应该遇到任何问题。如果您的密钥是作为连续序列自动生成的,那么将随机生成的哈希密钥添加到密钥(aidk-2016-13-08,ujlk-2016-13-09)。 亚马逊文件说:

  

Amazon S3维护每个AWS区域中的对象键名称索引。对象键以索引中的多个分区的UTF-8二进制顺序存储。密钥名称指示密钥存储在哪个分区中。使用顺序前缀(如时间戳或字母顺序)会增加Amazon S3针对大量密钥的特定分区的可能性,从而压倒I / O容量分区。如果在密钥名称前缀中引入一些随机性,则密钥名称以及I / O负载将分布在多个分区中。

http://docs.aws.amazon.com/AmazonS3/latest/dev/request-rate-perf-considerations.html

答案 1 :(得分:1)

Amazon 表示前缀命名策略(例如随机散列)不再影响 S3 查找性能。

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