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

Amazon AWS S3 Glacier: is there a file hierarchy

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

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

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

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

Does Amazon AWS S3 Glacier support some semblance of file hierarchy inside a Vault for Archives?

不,除了 "archives exist inside a vault" 之外没有其他等级。

For example, in AWS S3, objects are given hierarchy via /. For example: all_logs/some_sub_category/log.txt

这实际上是不正确的。

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

S3 控制台——以及大多数 S3 客户端工具,包括 AWS 的 CLI——以特殊方式处理 / 字符。但请注意,这是客户端的事情。客户将确保列表以 / 表现 大多数人期望 的方式发生,即 "hierarchy separator".

If file hierarchy inside S3 Glacier is possible, can you provide brief instructions for how to do so?

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


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

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

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

解决我上面描述的问题的另一种方法——同时与你的问题和我的答案相关——实际上是首先 gzip 单个文件,然后 tar一起。这解决了问题的原因是,当您 tar 将文件放在一起时,各个文件实际上在 tar 球内有明确的界限。然后,当您请求从冰川检索时,您只能请求 范围 的档案。例如,您可以说 "Glacier, give me bytes between 105MB and 115MB of archive X"。这样您就可以 (1) 减少请求总数(因为您只有一个 tar 文件),以及 (2) 减少请求和存储的总大小(因为您有压缩数据)。

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

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