S3中每个目录的最大文件数


87

如果我有一百万个图像,将它们存储在某个文件夹/子文件夹层次结构中还是将它们全部直接转储到存储桶中(没有任何文件夹)会更好吗?

将所有图像转储到无层次结构的存储桶中会降低LIST操作的速度吗?

快速创建文件夹和子文件夹并设置其ACL(以编程方式而言)会产生大量开销吗?

Answers:


124

S3不尊重分层名称空间。每个存储桶仅包含从键到对象的许多映射(以及关联的元数据,ACL等)。

即使对象的键可能包含'/',S3也会将路径视为纯字符串,并将所有对象置于平面命名空间中。

以我的经验,随着对象数量的增加,LIST操作确实会(线性地)花费更长的时间,但这可能是Amazon服务器上所需的I / O数量增加以及客户端连接的症状。

但是,查找时间似乎并不随对象数的增加而增加-最有可能是在其末尾采用某种O(1)哈希表实现-因此,在同一存储桶中有许多对象,其性能应与常规使用的小存储桶一样好(即而不是列表)。

至于ACL,可以在存储桶和每个单独的对象上设置授权。由于没有层次结构,因此它们只是您的两个选择。显然,如果您拥有数百万个文件,则设置尽可能多的存储桶级授予将大大减轻您的管理麻烦,但请记住,您只能授予权限,而不能撤消它们,因此存储桶级授予应是所有用户的ACL的最大子集它的内容。

我建议拆分成多个单独的存储桶以进行以下操作:

  • 完全不同的内容-具有单独的存储图像,声音和其他数据的存储桶,使架构更加理智
  • 显着不同的ACL-如果您可以有一个存储桶,每个对象都接收一个特定的ACL,或者两个存储桶具有不同的ACL,但没有对象特定的ACL,则采用两个存储桶。

在S3中有存储桶,然后在其中可以有“文件夹”和“对象”,其中文件夹可能是系统中的对象
mwm 2014年

14
@mwm你弄错了。“文件夹”严格来说是由您使用的任何工具提供的UI细节。James是正确的,密钥可能带有斜线,但是s3根本不在乎-它绝对不会将它们视为文件夹。
Ry4an Brase 2014年

S3确实确实基于路径前缀对限制请求进行速率评估,请查看官方文档:docs.aws.amazon.com/AmazonS3/latest/dev/…–
Anatoly

不再需要或不建议使用S3前缀:aws.amazon.com/about-aws/whats-new/2018/07/…–
Aea


-3

我使用的目录结构具有一个根目录,然后至少有一个子目录。我经常使用“文档导入日期”作为根目录下的目录。这样可以使备份的管理更加容易。无论您使用的是哪种文件系统,最终都将达到文件计数限制(如果不是非物理限制,这是一个实际的限制)。您可能还会考虑支持多个根。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.