Compression 如何在一个可靠的归档文件中压缩多个文件,但仅快速提取一个?

Compression 如何在一个可靠的归档文件中压缩多个文件,但仅快速提取一个?,compression,archive,xz,zstd,Compression,Archive,Xz,Zstd,我有14000个25MB的文件,我正试图压缩到存储的最小大小。在运行时,我只需要解压缩一个或两个文件。有足够的文件内冗余,可以很好地压缩,但也有足够的文件间冗余,可以首先使压缩比加倍: Individual files, compressed with "xz -9": 65 GB total Single tar blob, compressed with "xz -9": 33 GB 是否有一种方法可以压缩一组文件,使压缩器可以利用文件间冗余,但解压器不需要解压缩所有数据?在运行时提取33

我有14000个25MB的文件,我正试图压缩到存储的最小大小。在运行时,我只需要解压缩一个或两个文件。有足够的文件内冗余,可以很好地压缩,但也有足够的文件间冗余,可以首先使压缩比加倍:

Individual files, compressed with "xz -9": 65 GB total
Single tar blob, compressed with "xz -9": 33 GB
是否有一种方法可以压缩一组文件,使压缩器可以利用文件间冗余,但解压器不需要解压缩所有数据?在运行时提取33GB的tar是不可行的。我可以直接使用压缩程序库API,但不希望对库本身进行大量修改


我尝试使用
zstd
,从完整的文件集中训练一个字典,使用该字典进行压缩,但压缩比没有任何改善(zstd字典似乎只对非常小的文件有帮助)。

zstd培训器默认生成110k字典。您是否尝试过使用--maxdict=#来调整字典的大小。也许试试1mb?是的,我也试过将maxdict设置为1mb和10MB,但没有发现区别zstd trainer默认生成110k字典。您是否尝试过使用--maxdict=#来调整字典的大小。也许试试1mb?是的,我也试过将maxdict设置为1mb和10MB,但没有发现任何区别