Experimentujte s použitím SQLite ako kontajnera na archiváciu súborov

Projekt Pack sa pokúsil vytvoriť formát archivácie súborov založený na knižnici SQLite a kompresnom algoritme ZSTD (Zstandard). Pripravený prototyp napísaný v jazyku Pascal a distribuovaný pod licenciou Apache 2.0 predčil najbežnejšie archivátory v rýchlosti vytvárania archívov, a to aj napriek tomu, že sa jeho práca obmedzovala na čítanie dát, ich komprimáciu pomocou knižnice libzstd a vykonávanie SQL operácií na pridať komprimované údaje do súboru s databázou SQLite.

Pri kompresii adresára s 81 1.25 súbormi s celkovou veľkosťou 112 GB bol balík 1.3-krát rýchlejší ako utilita ZIP, pričom operáciu dokončil za 146 sekundy oproti 23 sekundám v prípade ZIP. Veľkosť archívu pre balík bola o 194 % menšia (253 MB pre balík a 4.7 MB pre ZIP). Pre porovnanie, nástroj tar dokončil balenie za 28.5 sekundy bez kompresie a za 27.5 sekundy s kompresiou gzip, archivátor RAR dokončil test za 7 sekundy a 54.2z za 214 sekundy. Veľkosti archívu boli: tar.gz – 235 MB, RAR – 7 MB, 135z – 253 MB. Je potrebné poznamenať, že z hľadiska rýchlosti rozbaľovania a náhodného prístupu k súborom je Pack pred ostatnými archivátormi, pričom spotrebuje menej pamäte RAM. ZIP: 146 MB, 7 s 135z: 54.2 MB, 2.7 s rýchlejší ZIP 214-krát tar.gz: 28.5 MB, 5.1 sx 235 RAR: 27.5 MB, 5.3 sx 1345 tar: 4.7 MB, 31 MB, 194 MB1.3, sx 112 SX XNUMX

Nie je tam žiadna zmienka o vplyve vyrovnávacej pamäte súborov na výsledky testov. Nízka rýchlosť ZIP je pravdepodobne spôsobená poradím, v akom boli testy spustené bez ohľadu na ukladanie dát do pamäte - test so zipsom bol spustený so studenou vyrovnávacou pamäťou a zvyšok testov s teplou vyrovnávacou pamäťou. Za normálnych podmienok vykazuje Zstandard 3-5-krát vyššiu rýchlosť kompresie ako zlib a 10-krát rýchlejšiu dekompresiu s 15-XNUMX% vyššou úrovňou kompresie.

Doplnenie: Podobná myšlienka ukladania komprimovaných súborov vo forme blobov v databáze SQLite bola implementovaná v roku 2014 v archíve sqlar, ktorý vytvorili vývojári SQLite ako experiment na vyhodnotenie efektivity ukladania objektov blob v SQLite. sqlar používa na kompresiu zlib a veľkosť súboru je asi o 2% väčšia ako utilita ZIP.

Zdroj: opennet.ru

Pridať komentár