如果我有一百万张图片,最好将它们存储在某个文件夹/子文件夹层次结构中,或者直接将它们全部转储到存储桶中(没有任何文件夹)?
将所有图像转储到无层次结构的存储桶中会减慢LIST操作的速度吗?
是否有动态创建文件夹和子文件夹并设置其ACL(以编程方式说)的巨大开销?
S3不尊重分层命名空间.每个桶只包含从密钥到对象的多个映射(以及相关的元数据,ACL等).
即使对象的键可能包含'/',S3也会将路径视为普通字符串,并将所有对象放在平面命名空间中.
根据我的经验,随着对象数量的增加,LIST操作确实会(线性地)延长,但这可能是亚马逊服务器所需的I/O增加以及客户端连接的一个症状.
但是,查找时间似乎并没有随着对象数量的增加而增加 - 它最有可能是它们端的某种O(1)哈希表实现 - 因此在同一个桶中有许多对象应该与正常使用的小桶一样高效(即不是列表).
对于ACL,可以在存储桶和每个单独的对象上设置授权.由于没有等级,他们只是你的两个选择.显然,如果你有数百万个文件,设置尽可能多的桶范围授权将大大减少你的管理麻烦,但是记住你只能授予权限,而不是撤销它们,因此桶范围的授权应该是所有ACL的最大子集它的内容.
我建议拆分成单独的桶:
完全不同的内容 - 为图像,声音和其他数据提供单独的存储桶,使结构更加理智
显着不同的ACL - 如果您可以有一个存储桶,每个对象接收一个特定的ACL,或者两个存储桶具有不同的ACL且没有特定于对象的ACL,请使用两个存储桶.
回答原始问题"S3中每个目录的最大文件数"是:UNLIMITED.另请参阅S3对存储桶中对象的限制.