寻找压缩文件

时间:2015-07-07 16:10:02

标签: c compression seek

我的文件文件重约≈200GB 我存储在key - position_in_file
的数据库对中 并使用fseek来获取数据。

是否有推荐的压缩文件的方法,
并寻求在压缩文件中定位,
没有从文件的开头解压缩。

[我更喜欢用C语言]
[无需执行写入。不需要超快]

2 个答案:

答案 0 :(得分:3)

这是example of random access of deflated data。它运行压缩数据一次以构建随机访问索引,其入口点大约每1 MB未压缩数据。 (您可以更改该密度。)每个入口点都在一个deflate块边界,并保存其前面的32K未压缩数据,以便填充滑动字典进行解压缩。

答案 1 :(得分:1)

我知道有两种方法可以做到这一点。

标准gunzip程序能够成功解压缩两个或多个.gz文件的串联。因此,您可以压缩块中的文件,并构建一个索引,告诉您在哪里寻找“chunked”gzip文件以开始解压缩。

例如,如果我有(人为微小的)数据库

a    apple
b    beneficial
c    carotene
d    diatomaceous

如果我没有压缩,我可以构建一个键表并寻找看起来像这样的偏移量:

a    0
b    8
c    21
d    32

如果我想制作一个块压缩文件,使用大小为两行的块,我可以这样做(在shell中,而不是C):

sed -n 1,2p d | gzip > d.gz
sed -n 3,4p d | gzip >> d.gz

我的块压缩文件的索引将有三个字段:一个键,一个到块压缩文件的搜索偏移量,以及一个额外的偏移量(在解压缩后)以在块中找到该键:

a    0    0
b    0    8
c    41   0
c    41   11

bzip2程序内置了一些功能,但我不记得详细信息。