Zip 文件 - 是否可以对文件数据进行分页?
Zip File - is it possible to paginate through the file data?
假设我有一个非常大的 zip 文件 (80GB),其中包含一个巨大的 CSV 文件 (> 200GB)。
是否可以获取 80GB 文件数据的一部分,修改中央目录,并提取那部分数据?
图示:
我的问题背景:
我有一个循环过程,它对存储在云中的大型压缩 CSV 文件的特定列进行求和。
我今天所做的是将文件流式传输到我的磁盘,提取它,然后逐行流式传输文件。这使得这是一个非常受磁盘限制的操作。磁盘肯定是瓶颈。
当然,我可以利用其他云服务更快地获得我需要的东西,但这不是免费的。
我很好奇是否可以通过仅使用 1GB 的 zip 子部分直到没有任何内容可读来提高速度。
我所知道的:
- Zip 文件使用 deflate 压缩算法存储(始终)
- 在 API I use 从云端获取文件时,我可以指定要过滤到的字节范围。这意味着我可以在不访问磁盘的情况下搜索文件的字节!
- 根据 zip file specs 一个 zip 文件按顺序分为三个主要部分:
1: header 描述文件及其属性
2:压缩格式的原始文件数据
3: 中央目录列出了哪些文件开始和停止以及哪些字节
我不知道的:
- 放气算法的具体工作原理。它会将文件弄乱还是只是按原始文件的顺序压缩内容?如果确实发生混乱,则此方法可能行不通。
- 有人开发过这样的工具吗?
您始终可以从头开始解压,解压到您喜欢的程度,一旦到达您想要的位置,只保留最后的空间,例如 1 GB。你不能只是在中间的某个地方开始解压缩。至少对于一个普通的 .zip 文件来说,它没有以某种方式为随机访问特别准备。
中心目录与单个条目的随机访问无关。它所能做的就是告诉您条目从哪里开始以及它有多长(压缩和未压缩)。
我建议您将 .zip 文件重新处理成包含许多 (~200) 个条目的 .zip 文件,每个未压缩的大小约为 1 GB。生成的 .zip 文件将非常接近相同的大小,但您可以使用中央目录从 200 个条目中选择一个,随机访问它,然后只解压缩那个。
假设我有一个非常大的 zip 文件 (80GB),其中包含一个巨大的 CSV 文件 (> 200GB)。 是否可以获取 80GB 文件数据的一部分,修改中央目录,并提取那部分数据?
图示:
我的问题背景:
我有一个循环过程,它对存储在云中的大型压缩 CSV 文件的特定列进行求和。
我今天所做的是将文件流式传输到我的磁盘,提取它,然后逐行流式传输文件。这使得这是一个非常受磁盘限制的操作。磁盘肯定是瓶颈。
当然,我可以利用其他云服务更快地获得我需要的东西,但这不是免费的。
我很好奇是否可以通过仅使用 1GB 的 zip 子部分直到没有任何内容可读来提高速度。
我所知道的:
- Zip 文件使用 deflate 压缩算法存储(始终)
- 在 API I use 从云端获取文件时,我可以指定要过滤到的字节范围。这意味着我可以在不访问磁盘的情况下搜索文件的字节!
- 根据 zip file specs 一个 zip 文件按顺序分为三个主要部分:
1: header 描述文件及其属性
2:压缩格式的原始文件数据
3: 中央目录列出了哪些文件开始和停止以及哪些字节
我不知道的:
- 放气算法的具体工作原理。它会将文件弄乱还是只是按原始文件的顺序压缩内容?如果确实发生混乱,则此方法可能行不通。
- 有人开发过这样的工具吗?
您始终可以从头开始解压,解压到您喜欢的程度,一旦到达您想要的位置,只保留最后的空间,例如 1 GB。你不能只是在中间的某个地方开始解压缩。至少对于一个普通的 .zip 文件来说,它没有以某种方式为随机访问特别准备。
中心目录与单个条目的随机访问无关。它所能做的就是告诉您条目从哪里开始以及它有多长(压缩和未压缩)。
我建议您将 .zip 文件重新处理成包含许多 (~200) 个条目的 .zip 文件,每个未压缩的大小约为 1 GB。生成的 .zip 文件将非常接近相同的大小,但您可以使用中央目录从 200 个条目中选择一个,随机访问它,然后只解压缩那个。