多线程压缩、随机访问和即时读取

Multithreaded compression, random access and on-the-fly reading

我在 linux 上有一个程序 运行,它可以生成数千个文本文件。我希望将这些文件打包成一个(压缩)文件。

压缩文件稍后将由 C 程序打开,该程序需要以随机方式访问该容器内的特定文件。

整个过程如下:

效果很好。但是,完成压缩大约需要 20 分钟。因为这样的压缩是在40核的服务器上运行的,所以我一直在用lbzip2进行试验,无论是压缩率还是速度,都取得了很好的效果。我还使用 zip -0 将所有 .bz 文件打包到一个 .zip 容器中,由于随机访问,我认为这是比 tar 更好的选择。

所以我的问题是,如何读取压缩在 .zip 文件中的 .bz 文件?据我所知,gzopen 将文件路径作为第一个参数。

您可以坚持使用当前的随机访问 zip 格式。 运行 在每个文本文件上分别使用单独的 zip 命令,将它们变成许多单条目 zip 文件。一次启动所有这些,您的 40 个核心将一直忙碌直到完成。完成后,使用 zipmerge 将它们全部合并到一个 zip 文件中。