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

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

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

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

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

...