我在磁盘上有一个用 gzip 压缩的非常大的文件。生产环境是基于“云”的,所以存储性能很差,但是CPU很好。以前,我们的数据处理管道开始于gzip -dc
从磁盘流式传输数据。
现在,为了使工作并行化,我想运行多个管道,每个管道采用一对字节偏移量 - 开始和结束 - 并获取文件的那个块。使用纯文件可以使用head
and来实现tail
,但我不确定如何使用压缩文件有效地做到这一点;如果 Igzip -dc
和 pipe into head
,则文件末尾的偏移对将涉及在整个文件缓慢解压缩时浪费性地寻找。
所以我的问题实际上是关于 gzip 算法的——理论上是否可以在底层文件中寻找一个字节偏移量或获取它的任意块,而没有将整个文件解压缩到那时的全部含义?如果不是,我还能如何有效地分区文件以供多个进程“随机”访问,同时最小化 I/O 吞吐量开销?