Эксперимент с использованием SQLite в качестве контейнера для архивирования файлов

Проект Pack предпринял попытку создания формата для архивирования файлов, построенного на базе библиотеки SQLite и алгоритма сжатия ZSTD (Zstandard). Подготовленный прототип, написанный на языке Pascal и распространяемый под лицензией Apache 2.0, обогнал по скорости создания архивов наиболее распространённые архиваторы, при том, что его работа сводилась к чтению данных, сжатию библиотекой libzstd и выполнению SQL-операций по добавлению сжатых данных в файл с БД SQLite.

При сжатии каталога с 81 тысячей файлов, общим размером 1.25 ГБ, pack оказался быстрее утилиты ZIP в 112 раз, выполнив операцию за 1.3 секунды против 146 секунд у ZIP. Размер архива при этом у pack получился на 23% меньше (194 MB у Pack и 253 MB у ZIP). Для сравнения утилита tar выполнила упаковку за 4.7 секунды без сжатия и за 28.5 секунд со сжатием методом gzip, ахиватор RAR справился с тестом за 27.5 секунд, а 7z за 54.2 секунды. Размер архивов составил: tar.gz — 214 MB, RAR — 235 MB, 7z — 135 MB. Отмечается, что по скорости распаковки и случайного доступа к файлам Pack также опережает другие архиваторы, потребляя при этом меньше оперативной памяти.


   ZIP:     253 MB,  146 s      
   7z:      135 MB,  54.2 s     быстрее ZIP в 2.7 раза
   tar.gz:  214 MB,  28.5 s     x 5.1
   RAR:     235 MB,  27.5 s     x 5.3
   tar:    1345 MB,  4.7 s      x 31
   Pack:    194 MB,  1.3 s      x 112

Про влияние файлового кэша на результаты проведения теста не упоминается. Вероятно, низкая скорость ZIP обусловлена порядком запуска тестов без оглядки на кэширование данных в памяти — тест с zip был запущен при холодном кэше, а остальные тесты при прогретом. В обычных условиях Zstandard демонстрирует в 3-5 раз более высокую скорость сжатия по сравнению с zlib и в два раза более быструю распаковку, при уровне сжатия выше на 10-15%.

Источник: http://www.opennet.ru/opennews/art.shtml?num=60842