我的文件文件重约≈200GB
我存储在key
- position_in_file
,
的数据库对中
并使用fseek
来获取数据。
是否有推荐的压缩文件的方法,
并寻求在压缩文件中定位,
没有从文件的开头解压缩。
[我更喜欢用C语言]
[无需执行写入。不需要超快]
答案 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
程序内置了一些功能,但我不记得详细信息。