Проект Pack направи опит за създаване на формат за архивиране на файлове, базиран на библиотеката SQLite и алгоритъм за компресия ZSTD (Zstandard). Подготвеният прототип, написан на езика Pascal и разпространяван под лицензия Apache 2.0, изпревари по скорост на създаване на архиви най-разпространените архиватори, като работата му се състоеше в четене на данни, компресиране с библиотеката libzstd и изпълнение на SQL операции за добавяне на компресираните данни във файла с БД SQLite.
При компресиране на каталог с 81 хиляда файла с общ размер от 1.25 ГБ, 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
