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

时间:2008-12-26 19:57:15

标签: performance file amazon-s3 limit directory

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

将所有图像转储到无层次结构的存储桶中会减慢LIST操作吗?

动态创建文件夹和子文件夹以及设置ACL(编程方式)是否会产生大量开销?

3 个答案:

答案 0 :(得分:117)

S3不尊重分层命名空间。每个桶只包含从密钥到对象的多个映射(以及相关的元数据,ACL等)。

即使对象的密钥可能包含'/',S3也会将路径视为普通字符串,并将所有对象放在平面命名空间中。

根据我的经验,随着对象数量的增加,LIST操作确实会(线性地)延长,但这可能是亚马逊服务器上所需的I / O增加以及客户端连接的一个症状。

然而,查找时间似乎并没有随着对象数的增加而增加 - 它最有可能是它们端的某种O(1)哈希表实现 - 因此在同一个桶中拥有许多对象应该与正常的小桶一样高效用法(即不是LIST)。

对于ACL,可以在存储桶和每个单独的对象上设置授权。由于没有等级,他们只是你的两个选择。显然,如果您有数百万个文件,设置尽可能多的全桶授权会大大减少您的管理难题,但请记住,您只能授予权限,而不是撤销它们,因此全桶授权应该是所有内容的ACL的最大子集。

我建议拆分成单独的存储桶:

  • 完全不同的内容 - 为图像,声音和其他数据提供单独的存储桶,使得结构更加理智
  • 显着不同的ACL - 如果每个对象可以有一个桶接收特定ACL,或者两个桶具有不同的ACL且没有特定于对象的ACL,请使用两个桶。

答案 1 :(得分:53)

回答原始问题“S3中每个目录的最大文件数”是:UNLIMITED。另请参阅S3 limit to objects in a bucket

答案 2 :(得分:-3)

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