amazons3文件分区最佳实践



希望这是一个简单的问题-如果已经回答了,但搜索中没有出现任何问题,请道歉。

在S3上,是将图像组织到更小的子目录中更好,还是将它们全部保存在一个目录中更好?在一个典型的文件系统中,将映像命名在目录中以提高性能。一个目录中有数千个映像的平面结构通常不会很好地执行。亚马逊S3就是这样吗?

我可以将所有用户图像放入用户文件夹,将所有帖子图像放入帖子文件夹,等等。或者,我可以将用户图像放入users/{userId}等文件夹,以避免在一个用户文件夹中有数千个图像。

更新2018-07

在为您的用例设计分区方案时,不再需要考虑性能,请参阅我的InfoQ摘要Amazon S3提高请求率性能并丢弃随机前缀要求以了解详细信息:

亚马逊网络服务(AWS)最近宣布显著提高S3请求率性能,并能够并行化请求以扩展到所需的吞吐量。值得注意的是,这种性能的提高也"增加了";删除任何先前的随机化对象前缀的指导";并且能够使用";在没有任何性能影响的S3对象命名中的逻辑或顺序命名模式";。

更新2013-09

引用链接中的信息,,但仍在很大程度上精确,已被更新的文档S3请求率和性能注意事项所取代。


初步答复

这也是AmazonS3的一个问题,尽管只是针对重要的存储需求,请参阅AmazonS3性能提示&详细答案的技巧,包括划分对象空间的策略。

以前的答案现在已经过时https://aws.amazon.com/about-aws/whats-new/2018/07/amazon-s3-announces-increased-request-rate-performance/"S3请求率性能的提高消除了以前任何随机化对象前缀以实现更快性能的指导。这意味着您现在可以在S3对象命名中使用逻辑或顺序命名模式,而不会对性能产生任何影响。"

值得考虑一个将其分块到文件中的方案。。。如果没有其他原因,只是有一种方法来过滤你的文件,如果你想手动环顾四周。

但是,如果你确定了访问文件所需的所有方法,就不要花太多时间。。。您以后总是可以迁移到新方案。

多年后

默认情况下,我这样组织所有存储桶:

bucket:/type/YYYY/MM/DD/human_useful_filename_UNIQ_STUFF.ext

其中:

  • bucket=bucket名称
  • type=我的应用程序定义的工件类型
  • YYYY/MM/DD-你的想法
  • human_useful_filename_UNIQ_STUFF.ext-我在文件名的第一部分放了一些至少可以稍微调试的东西,然后放了一些确保后缀唯一的东西,后面是常规扩展名。这样,如果您发现自己潜伏在S3的UI或控制台中,您至少可以尝试确定发生了什么(至少在开发和测试上下文中更有用)

如果你有很多对象(平均每天超过1000个),那么即使在HH上拆分也是值得的。

很抱歉现在回答,希望这可能会有所帮助,

在AWS中,密钥名称决定对象(文件)存储在哪个分区中-您可以在文件名中添加hax前缀以获得更好的性能。

获取密集型工作负载:使用CloudFront

混合工作负载(GET、PUT和DELETE):对S3对象密钥名称使用hax前缀,以防止多个对象存储在同一分区上。

最新更新