फ़ाइलों को संग्रहीत करने के लिए एक कंटेनर के रूप में 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%.

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

स्रोत: opennet.ru

एक टिप्पणी जोड़ें