Eksperimenter med at bruge SQLite som en beholder til arkivering af filer

Pack-projektet forsøgte at oprette et filarkiveringsformat baseret på SQLite-biblioteket og ZSTD (Zstandard) komprimeringsalgoritmen. Den forberedte prototype, skrevet i Pascal og distribueret under Apache 2.0-licensen, udkonkurrerede de mest almindelige arkiveringsværktøjer med hensyn til hastigheden af ​​oprettelse af arkiver, på trods af at dens arbejde var begrænset til at læse data, komprimere dem med libzstd-biblioteket og udføre SQL-operationer for at tilføje komprimerede data til en fil med en database SQLite.

Når du komprimerer en mappe med 81 tusind filer med en samlet størrelse på 1.25 GB, var pack 112 gange hurtigere end ZIP-værktøjet, og fuldførte operationen på 1.3 sekunder mod 146 sekunder for ZIP. Arkivstørrelsen for pack var 23 % mindre (194 MB for Pack og 253 MB for ZIP). Til sammenligning afsluttede tjæreværktøjet emballagen på 4.7 sekunder uden komprimering, og på 28.5 sekunder med gzip-komprimering gennemførte RAR-arkiveren testen på 27.5 sekunder og 7z på 54.2 sekunder. Arkivstørrelserne var: tar.gz - 214 MB, RAR - 235 MB, 7z - 135 MB. Det bemærkes, at med hensyn til udpakningshastighed og tilfældig adgang til filer, er Pack også foran andre arkivere, mens den bruger mindre RAM. ZIP: 253 MB, 146 s 7z: 135 MB, 54.2 s hurtigere ZIP 2.7 gange tar.gz: 214 MB, 28.5 sx 5.1 RAR: 235 MB, 27.5 sx 5.3 tjære: 1345 MBx, 4.7 MBs, 31 MB: SX 194

Der er ingen omtale af effekten af ​​filcachen på testresultaterne. Sandsynligvis skyldes den lave hastighed i ZIP den rækkefølge, testene blev lanceret i uden hensyntagen til datacache i hukommelsen - testen med zip blev lanceret med en kold cache, og resten af ​​testene med en varm cache. Under normale forhold udviser Zstandard 3-5 gange hurtigere kompressionshastigheder end zlib og 10 gange hurtigere dekompression med 15-XNUMX% højere kompressionsniveauer.

Tilføjelse: En lignende idé om at gemme komprimerede filer i form af blobs i en SQLite-database blev implementeret i 2014 i sqlar-arkivet, skabt af SQLite-udviklerne som et eksperiment for at evaluere effektiviteten af ​​lagring af blobs i SQLite. sqlar bruger zlib til komprimering, og filstørrelsen er omkring 2% større end ZIP-værktøjet.

Kilde: opennet.ru

Tilføj en kommentar