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

问题描述

我有一个在Linux上运行的程序,该程序会生成数千个文本文件。我希望将这些文件打包成一个(压缩的)文件

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

整个过程如下:

  • Linux程序生成数千个小文件
  • zip -9 out.zip *
  • 带有libzip的
  • C程序在.zip中包含特定文件,具体取决于用户的要求。这些读取是在内存上完成的(不将解压缩的文件写入磁盘)。

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

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

解决方法

您可以继续使用当前的zip格式进行随机访问。在每个文本文件上分别运行单独的zip命令,以将其转换为许多单入口zip文件。一次启动所有这些,您的40个核心将保持繁忙直到完成。完成后,使用zipmerge将它们全部合并为一个zip文件。