Експеримент з використанням 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 sx 5.1 RAR: 235 MB, 27.5 sx 5.3 tar: 1345 MB, 4.7 MB 31 sx 194

Про вплив файлового кешу на результати тестування не згадується. Ймовірно, низька швидкість ZIP обумовлена ​​порядком запуску тестів без огляду на кешування даних у пам'яті - тест із zip був запущений при холодному кеші, а решта тестів при прогрітому. У звичайних умовах Zstandard демонструє в 3-5 разів більш високу швидкість стиснення порівняно з zlib і вдвічі швидше розпакування, при рівні стиснення вище на 10-15%.

Додаток: Схожа ідея зберігання стислих файлів у вигляді блобів у БД SQLite реалізована у 2014 році в архіваторі sqlar, створеному розробниками SQLite як експеримент для оцінки ефективності зберігання блобів у SQLite. У sqlar для стиснення використовується zlib і розмір файлів приблизно на 2% більше, ніж у утиліти ZIP.

Джерело: opennet.ru

Додати коментар або відгук