压缩文件-是否可以通过文件数据进行分页?

时间:2018-07-16 21:56:29

标签: pagination zip zipfile deflate

说我有一个非常大的zip文件(80 GB),其中包含一个大型CSV文件(> 200 GB)。 是否可以提取80GB文件数据的一部分,修改中央目录,然后仅提取那部分数据?

图片表示形式:

enter image description here

我的问题的背景:

我有一个循环过程,对存储在云中的大型压缩CSV文件的特定列进行求和。

我今天要做的是将文件流式传输到磁盘,将其解压缩,然后逐行流式传输文件。这使得磁盘绑定操作非常繁琐。磁盘肯定是瓶颈。

当然,我可以利用其他云服务来更快地获得所需的资源,但这不是免费的。

我很好奇我是否可以通过仅提取1GB的zip子部分直到看不到任何东西来看到速度的提高。

我所知道的:

  • (始终)使用deflate压缩算法存储Zip文件
  • API I use中从云中获取文件,我可以指定要过滤的字节范围。这意味着我可以在不打磁盘的情况下搜索文件的字节!
  • 根据zip file specs,zip文件的三个主要部分依次排列:

1:描述文件及其属性的标题

2:压缩格式的原始文件数据

3:中央目录列出了哪些文件开始和停止以及哪些字节

我不知道的东西:

  • 放气算法的工作原理。它会混淆文件还是只是按照原始文件的顺序压缩内容?如果确实很混乱,则此方法可能无法实现。
  • 有人已经建立了这样的工具吗?

1 个答案:

答案 0 :(得分:0)

您始终可以从头开始对进行解压缩,并尽可能地压缩,直到到达所需位置后,仅保留最后一个,例如1 GB。您不能只是在中间某个地方开始解压缩。至少没有普通的.zip文件,而该文件尚未经过特殊的随机访问准备。

中央目录与单个条目的随机访问无关。它所能做的就是告诉您条目从何处开始以及它有多长(压缩和未压缩)。

我建议您将.zip文件重新处理为包含许多(〜200)条目的.zip文件,每个条目的未压缩数量约为1 GB。生成的.zip文件将非常接近相同的大小,但是您可以使用中央目录从200个条目中选择一个,随机访问它,然后仅解压缩该条目。