Experimentați folosind SQLite ca container pentru arhivarea fișierelor

Proiectul Pack a încercat să creeze un format de arhivare a fișierelor bazat pe biblioteca SQLite și algoritmul de compresie ZSTD (Zstandard). Prototipul pregătit, scris în Pascal și distribuit sub licența Apache 2.0, a depășit cele mai obișnuite arhivare în viteza de creare a arhivelor, în ciuda faptului că munca sa se limita la citirea datelor, comprimarea lor cu biblioteca libzstd și efectuarea de operații SQL pentru adăugați date comprimate într-un fișier cu o bază de date SQLite.

La comprimarea unui director cu 81 de mii de fișiere cu o dimensiune totală de 1.25 GB, pachetul a fost de 112 ori mai rapid decât utilitarul ZIP, completând operația în 1.3 secunde față de 146 de secunde pentru ZIP. Dimensiunea arhivei pentru pachet a fost cu 23% mai mică (194 MB pentru Pack și 253 MB pentru ZIP). Pentru comparație, utilitarul tar a finalizat ambalarea în 4.7 secunde fără compresie și în 28.5 secunde cu compresie gzip, arhivatorul RAR a finalizat testul în 27.5 secunde și 7z în 54.2 secunde. Dimensiunile arhivei au fost: tar.gz - 214 MB, RAR - 235 MB, 7z - 135 MB. Se observă că în ceea ce privește viteza de despachetare și accesul aleatoriu la fișiere, Pack este, de asemenea, înaintea altor arhivare, consumând în același timp mai puțină memorie RAM. ZIP: 253 MB, 146 s 7z: 135 MB, 54.2 s mai rapid ZIP de 2.7 ori tar.gz: 214 MB, 28.5 sx 5.1 RAR: 235 MB, 27.5 sx 5.3 tar: 1345 MB, 4.7 MB, 31x194 MB: 1.3x112 MB SX XNUMX

Nu se menționează efectul cache-ului fișierelor asupra rezultatelor testului. Probabil, viteza scăzută a ZIP se datorează ordinii în care au fost lansate testele fără a ține cont de cache-ul datelor în memorie - testul cu zip a fost lansat cu un cache rece, iar restul testelor cu un cache cald. În condiții normale, Zstandard prezintă viteze de compresie de 3-5 ori mai mari decât zlib și o decompresie de 10 ori mai rapidă, cu niveluri de compresie cu 15-XNUMX% mai mari.

Adăugare: O idee similară de stocare a fișierelor comprimate sub formă de blob într-o bază de date SQLite a fost implementată în 2014 în arhivatorul sqlar, creat de dezvoltatorii SQLite ca un experiment pentru a evalua eficiența stocării blob-urilor în SQLite. sqlar folosește zlib pentru compresie, iar dimensiunea fișierului este cu aproximativ 2% mai mare decât utilitarul ZIP.

Sursa: opennet.ru

Adauga un comentariu