Експеримент с използването на SQLite като контейнер за архивиране на файлове

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

При компресиране на директория с 81 хиляди файла, с общ размер от 1.25 GB, pack се оказа 112 пъти по-бърз от ZIP в изпълнение на операцията, завършвайки я за 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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster