Experiment cu utilizarea SQLite ca container pentru arhivarea fișierelor

Proiectul Pack a încercat să creeze un format pentru arhivarea 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 în viteză crearea arhivelor față de cele mai comune utilitare de arhivare, având ca unic scop citirea datelor, comprimarea prin biblioteca libzstd și executarea operațiunilor SQL pentru adăugarea datelor comprimate în fișierul cu baza de date SQLite.

În timpul comprimării unui director cu 81 de mii de fișiere, având o dimensiune totală de 1.25 GB, pack s-a dovedit a fi de 112 ori mai rapid decât utilitarul ZIP, finalizând operațiunea în 1.3 secunde, comparativ cu 146 de secunde pentru ZIP. Dimensiunea arhivei pentru pack a fost cu 23% mai mică (194 MB pentru Pack și 253 MB pentru ZIP). Ca și comparație, utilitarul tar a efectuat ambalarea în 4.7 secunde fără compresie și în 28.5 secunde cu compresie folosind gzip, arhivatorul RAR a realizat testul în 27.5 secunde, iar 7z în 54.2 secunde. Dimensiunile arhivelor au fost: tar.gz — 214 MB, RAR — 235 MB, 7z — 135 MB. Se observă că, în ceea ce privește viteza de decompresie și accesul aleator la fișiere, Pack depășește de asemenea alte arhivatoare, consumând în același timp mai puțină memorie operațională.

Despre influența cache-ului de fișiere asupra rezultatelor testului nu se menționează. Probabil, viteza scăzută a ZIP-ului este datorată ordinii de desfășurare a testelor fără a ține cont de caching-ul datelor în memorie — testul cu zip a fost efectuat cu cache rece, în timp ce celelalte teste au fost efectuate cu cache cald. În condiții normale, Zstandard demonstrează o viteză de compresie cu 3-5 ori mai mare comparativ cu zlib și o decompresie de două ori mai rapidă, la un nivel de compresie cu 10-15% mai mare.

Completară: O idee similară de stocare a fișierelor comprimate sub formă de blob-uri în baza de date SQLite a fost realizată în 2014 în arhivatorul sqlar, creat de dezvoltatorii SQLite ca un experiment pentru a evalua eficiența stocării blob-urilor în SQLite. În sqlar, pentru comprimare se folosește zlib și dimensiunea fișierelor este cu aproximativ 2% mai mare decât cea a utilitarului ZIP.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster