代码之家  ›  专栏  ›  技术社区  ›  user1031947

在s3存储桶中使用“文件夹”可以获得什么?

  •  0
  • user1031947  · 技术社区  · 7 年前

    我正在将大量JPG(几十万)从静态文件系统迁移到amazon s3。

    在旧的文件系统上,我将文件分组到子文件夹中,以保持文件/文件夹的总数可管理。

    例如,文件

    4aca29c7c0a76c1cbaad40b2693e6bef.jpg
    

    将保存到:

    /4a/ca/29/4aca29c7c0a76c1cbaad40b2693e6bef.jpg
    

    据我所知,s3不尊重层次名称空间。因此,如果我在s3上使用“folders”,那么对象,包括/,实际上只是在一个平面名称空间中。

    尽管如此,根据 the docs ,amazon建议在使用s3时模仿结构化文件系统。

    所以我想知道:使用上面的文件夹结构来组织s3上的文件,有什么收获吗?或者在这种情况下,我最好只将文件添加到s3,而不使用任何“文件夹”结构。

    2 回复  |  直到 7 年前
        1
  •  1
  •   John Rotenstein    7 年前

    性能为 未受影响 通过使用(或不使用)文件夹。

    某些系统可以使用文件夹 更轻松的导航 的文件。例如,Amazon Athena可以在查询数据时扫描特定的子目录,而不必读取每个文件。

    如果您的bucket用于一个特定目的,则没有理由使用文件夹。但是,如果它包含不同类型的数据,那么您可以考虑至少 顶级文件夹集 保持数据分离。

    使用文件夹的另一个潜在原因是 安全 . bucket策略可以基于前缀(即文件夹名称)授予对bucket的访问权限。然而,这可能与您的用例无关。

        2
  •  0
  •   Michael - sqlbot    7 年前

    不管怎样,使用“文件夹”对S3的性能都没有影响。它不会让它更快,也不会让它更慢。

    使用分隔对象关键帧的值 / 在组织上,既对机器友好,也对人类友好。

    如果您在控制台的一个桶中拖拽,进行故障排除,那么这些充满噪音的毫无意义的键很难分页,一次只能分页几十个。

    控制台根据 / 如果只需单击 4a 然后 ca 然后 29 .

    S3 ListObjects API支持请求具有特定键前缀的所有对象,但它们还支持在下一个分隔符之前查找所有公共前缀,因此您可以向list prefix发送API请求 4a/ca/ 带分隔符 / 它会的 只有 返回一级深的“文件夹”,称为“常用前缀”

    如果对象键是完全不透明的,并且没有传达更多关于对象的信息,那么这就没有什么意义了,而不是像这样使用键前缀 images/ thumbnails/ videos/ .

    作为一名管理员,与S3合作多年,并与不同团队设计的关键命名方案的bucket合作过,我肯定会推荐使用一些 / 用于组织目的的分隔符。随着时间的推移,没有它们的水桶会变得越来越麻烦。

    请注意,控制台确实允许您“创建文件夹”,但这更像是一种错觉——实际上没有必要这样做,除非您手动加载一个bucket。当您在控制台中创建文件夹时,它只会创建一个带有 / 最后。