【问题标题】:Amazon AWS S3 file naming strategy for performance提高性能的 Amazon AWS S3 文件命名策略
【发布时间】:2014-01-30 16:09:03
【问题描述】:

我目前正在使用以下命名方案:

/#{bucket_name}/#{customer_name}/fi/le/na/filename.jpg

因此,客户bent 的名为dsca007.jpg 的文件的图像将存储在这里:

/images/bent/ds/ca/00/dsca007.jpg

但我可以理解,S3 想要这样的不同形式:

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

来源:https://www.youtube.com/watch?v=uXHw0Xae2ww#t=535

我了解他们希望我将命名方案更改为:

/#{bucket_name}/fi/le/na/#{customer_name})filename.jpg

但随后他在 youtube 视频中展示了这张幻灯片:

这是否意味着我的第一种方法很好?

我真的更喜欢第一个结构,因为我能够获得一个客户拥有的文件列表,有没有办法列出具有最后提到的命名方案的客户下的所有文件?

运行以下命令也很容易计算出每个客户使用了多少存储空间:

s3cmd du s3://images/#{customer_name}

如何使用新的命名方案来做到这一点?

【问题讨论】:

  • 您对 Am​​azon S3 的工作负载是否经常超过每秒 100 个请求?
  • 暂时没有,只是到了极限就不想改了。

标签: file amazon-web-services amazon-s3 naming-conventions naming


【解决方案1】:

如果您在构建密钥时不使用某些唯一字符串,您很快就会遇到密钥覆盖问题。

dsca007.jpg 不是很独特。同名文件很有可能会上传到您的 s3 存储桶。 在这种情况下,您将丢失旧文件或出现错误,具体取决于您的配置。

例如这就是我们正在使用的: https://s3.amazonaws.com/bucket_name/user_media/videos/screenshots/cmXRyLRQxe9R139023426817_vid001.jpeg

其中前缀:cmXRyLRQxe9R139023426817_ 是我们在上传到 s3 之前构建并连接到原始文件名:vid001.jpg 的自生成字符串。

【讨论】:

  • 我与亚马逊的 Craig Carl 取得了联系,他告诉我你所做的是正确的。
  • 使用相同前缀(如“media/”)启动所有 S3 密钥不符合 AWS 准则,即定期扩展到每秒超过一百个请求的大容量访问。您需要将前缀的初始字符分散到不同的字符中。
  • 其实一个静态前缀也算可以了:docs.aws.amazon.com/AmazonS3/latest/dev/…
  • @CashIsClay 是和否:从这里采取的两种方法都有一个折衷:“预期的一点是,您不能在密钥的开头以及文件夹-基于生命周期。你必须选择。 github.com/open-guides/og-aws/issues/86
  • @VolodymyrMetlyakov 这并不完全正确。缓慢递增的前缀(即日期)是不好的,因为它们会创建大量写入的“桶”,但完全静态的前缀很好,因为分片会进一步发生在前缀/文件名中。
猜你喜欢
  • 2015-01-24
  • 1970-01-01
  • 1970-01-01
  • 2021-06-29
  • 1970-01-01
  • 2017-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多