Amazon AWS S3 Glacier:是否有文件层次结构

Int*_*rer 4 amazon-s3 bucket amazon-web-services amazon-glacier

Amazon AWS S3 Glacier 是否支持档案库内的某种文件层次结构?

例如,在 AWS S3 中,对象通过/. 例如:all_logs/some_sub_category/log.txt

我正在存储多个.tar.gz文件,并且想要:

  • 同一 Vault 中的所有文件
  • 在 Vault 中,文件分为几个类别(与平面结构相反)

我无法在任何地方找到如何做到这一点。如果 S3 Glacier 内的文件层次结构是可能的,您能否提供有关如何执行此操作的简要说明?

Bru*_*eis 5

Amazon AWS S3 Glacier 是否支持档案库内的某种文件层次结构?

不,除了“档案库内存在档案”之外,没有其他层次结构。

例如,在 AWS S3 中,对象通过 / 赋予层次结构。例如:all_logs/some_sub_category/log.txt

这实际上是不正确的。

S3 没有任何固有的层次结构。该字符/与对 S3 对象的密钥有效的任何其他字符完全没有区别。

S3 控制台——以及大多数 S3 客户端工具,包括 AWS 的 CLI——/以一种特殊的方式对待这个角色。但请注意,这是客户端的事情。客户将确保上市以这样的方式,一个发生/的行为,因为大多数人会想到,这是作为一个“层级分隔”。

如果 S3 Glacier 内的文件层次结构是可能的,您能否提供有关如何执行此操作的简要说明?

您需要单独跟踪您的层次结构。例如,当您在 Glacier 中存储档案时,您可以在数据库(RDS、DynamoDB 等)中写入有关该档案的元数据。


作为旁注,.tar.gz在 Glacier 中要小心,尤其是当您谈论 (1) 一个非常大的存档 (2) 时,该存档 (2) 由大量您可能希望单独访问的小型单个文件 (3) 组成。

如果满足这些条件(根据我的经验,它们通常是在现实世界的场景中),那么.tar.gz在检索数据时使用通常会导致成本过高。

原因是因为您按请求数量和请求大小付费。因此,虽然拥有一个大.tar.gz文件可能会降低请求数量方面的成本,但 gzip 使用 DEFLATE(一种不可拆分的压缩算法)这一事实意味着您必须检索整个.tar.gz存档,对其进行解压缩,最后获取您真正想要的一个文件。

解决我上面描述的问题的另一种方法——同时,与你的问题和我的答案相关——实际上是首先 gzip 单个文件,然后将它们压缩在一起。这解决了这个问题的原因是,当您将文件压缩在一起时,单个文件实际上在 tarball 中有明确的界限。然后,当您请求从 Glacier 检索时,您只能请求一定范围的档案。例如,您可以说,“Glacier,给我 105MB 到 115MB 的存档 X 字节”。这样,您可以 (1) 减少请求总数(因为您只有一个 tar 文件),以及 (2) 减少请求和存储的总大小(因为您有压缩数据)。

现在,要知道您需要检索哪个范围,您需要将元数据存储在某个地方——通常是您将保留层次结构的同一个地方!(就像我上面提到的,RDS、DynamoDB、Elasticsearch 等)。

无论如何,只是一个可以在未来节省大量资金的优化(我曾与大量客户合作,他们因为不知道这一点而浪费了很多钱)。