Как я могу сжать много файлов в единый архив, но быстро извлечь только один?

У меня есть 14000 файлов размером 25 МБ, которые я пытаюсь сжать до минимального размера для хранения. Во время выполнения мне нужно будет распаковать только один или два файла. Существует достаточная внутрифайловая избыточность, чтобы они сжимались достаточно хорошо, но также имеется достаточная межфайловая избыточность, которая сначала увеличивает степень сжатия вдвое:

Individual files, compressed with "xz -9": 65 GB total
Single tar blob, compressed with "xz -9": 33 GB

Есть ли способ сжать набор файлов таким образом, чтобы компрессор мог использовать межфайловую избыточность, но распаковщику не нужно было распаковывать все данные? Извлечение tar размером 33 ГБ во время выполнения было бы несостоятельным. Я могу использовать API библиотеки компрессора напрямую, но предпочел бы не сильно изменять саму библиотеку.

Я пробовал использовать zstd, обучение словаря из полного набора файлов, сжатие с помощью этого словаря, но оно не показало никакого улучшения степени сжатия (словари zstd, похоже, помогают только с очень маленькими файлами).

0 ответов

Другие вопросы по тегам