多线程压缩、随机访问和即时读取
Multithreaded compression, random access and on-the-fly reading
我在 linux 上有一个程序 运行,它可以生成数千个文本文件。我希望将这些文件打包成一个(压缩)文件。
压缩文件稍后将由 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 文件中。
我在 linux 上有一个程序 运行,它可以生成数千个文本文件。我希望将这些文件打包成一个(压缩)文件。
压缩文件稍后将由 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 文件中。