S3 中每个目录的最大文件数
Posted
技术标签:
【中文标题】S3 中每个目录的最大文件数【英文标题】:Max files per directory in S3 【发布时间】:2010-09-28 11:53:38 【问题描述】:如果我有一百万张图片,最好将它们存储在某个文件夹/子文件夹层次结构中,还是直接将它们全部转储到一个存储桶中(没有任何文件夹)?
将所有图像转储到无层次结构的存储桶中会减慢 LIST 操作吗?
动态创建文件夹和子文件夹并设置它们的 ACL(以编程方式)是否有很大的开销?
【问题讨论】:
【参考方案1】:S3 不尊重分层命名空间。每个存储桶仅包含许多从键到对象的映射(以及关联的元数据、ACL 等)。
即使您的对象的键可能包含“/”,S3 仍将路径视为纯字符串并将所有对象放在平面命名空间中。
根据我的经验,随着对象数量的增加,LIST 操作确实需要(线性)更长的时间,但这可能是 Amazon 服务器上所需的 I/O 增加的征兆,并且连接到您的客户端。
然而,查找时间似乎并没有随着对象数量的增加而增加——它很可能是某种 O(1) 哈希表的最终实现——因此在同一个存储桶中拥有许多对象应该与正常情况下的小存储桶一样具有性能用法(即不是 LIST)。
对于 ACL,可以在存储桶和每个单独的对象上设置授权。由于没有层次结构,它们是您仅有的两个选择。显然,如果您有数百万个文件,设置尽可能多的存储桶范围授权将大大减少您的管理员头痛,但请记住,您只能授予权限,不能撤销它们,因此存储桶范围的授权应该是ACL 的所有内容的最大子集。
我建议将其分成单独的存储桶:
完全不同的内容 - 为图像、声音和其他数据提供单独的存储桶,使架构更加合理 显着不同的 ACL - 如果您可以有一个存储桶,每个对象接收一个特定的 ACL,或者两个存储桶具有不同的 ACL 而没有特定于对象的 ACL,请使用这两个存储桶。【讨论】:
在 S3 中有存储桶,然后在里面你可以有“文件夹”和“对象”,其中文件夹可能是系统眼中的对象 @mwm 你错了。 “文件夹”是您使用的任何工具提供的严格的 UI 细节。 James 是正确的,键可能有斜杠,但 s3 根本不在乎——它绝对不会将它们视为文件夹。 S3 确实会根据路径前缀对请求进行速率限制,请查看官方文档:docs.aws.amazon.com/AmazonS3/latest/dev/… S3 前缀不再需要或推荐:aws.amazon.com/about-aws/whats-new/2018/07/… @Anatoly 前缀会影响性能,因为散列函数的内部实现负责在物理存储位置之间分配对象。但这并不意味着有文件夹。事实上,如果您使用前缀ABCD_
而不是 ABCD/
,您可以获得完全相同的性能效果 :)【参考方案2】:
原始问题“S3 中每个目录的最大文件数”的答案是:UNLIMITED。另见S3 limit to objects in a bucket。
【讨论】:
【参考方案3】:我使用的目录结构有一个根目录,然后至少有一个子目录。我经常使用“文档导入日期”作为根目录下的目录。这可以使管理备份更容易一些。无论您使用什么文件系统,最终都必然会达到文件计数限制(如果不是物理限制的话,这是一个实用的限制)。您也可以考虑支持多个根。
【讨论】:
以上是关于S3 中每个目录的最大文件数的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript 中 FileReader#readEntries 可以读取的目录的最大文件数