Eksperimenter med SQLite som en beholder for arkivering av filer

Pack-prosjektet forsøkte å lage et filarkiveringsformat basert på SQLite-biblioteket og ZSTD (Zstandard) komprimeringsalgoritmen. Den forberedte prototypen, skrevet i Pascal og distribuert under Apache 2.0-lisensen, overgikk de vanligste arkiverne i hastigheten på å lage arkiver, til tross for at arbeidet var begrenset til å lese data, komprimere dem med libzstd-biblioteket og utføre SQL-operasjoner for å legge til komprimerte data til en fil med en database SQLite.

Når du komprimerte en katalog med 81 tusen filer med en total størrelse på 1.25 GB, var pakken 112 ganger raskere enn ZIP-verktøyet, og fullførte operasjonen på 1.3 sekunder mot 146 sekunder for ZIP. Arkivstørrelsen for pakken var 23 % mindre (194 MB for Pack og 253 MB for ZIP). Til sammenligning fullførte tjæreverktøyet pakkingen på 4.7 sekunder uten komprimering og på 28.5 sekunder med gzip-komprimering fullførte RAR-arkiveren testen på 27.5 sekunder, og 7z på 54.2 sekunder. Arkivstørrelsene var: tar.gz - 214 MB, RAR - 235 MB, 7z - 135 MB. Det bemerkes at når det gjelder hastighet på utpakking og tilfeldig tilgang til filer, er Pack også foran andre arkivere, samtidig som den bruker mindre RAM. ZIP: 253 MB, 146 s 7z: 135 MB, 54.2 s raskere ZIP 2.7 ganger tar.gz: 214 MB, 28.5 sx 5.1 RAR: 235 MB, 27.5 sx 5.3 tar: 1345 MBx, 4.7 MB, 31 MB ​​s. SX 194

Det er ingen omtale av effekten av filbufferen på testresultatene. Sannsynligvis skyldes den lave hastigheten til ZIP i hvilken rekkefølge testene ble lansert uten hensyn til databufring i minnet - testen med zip ble lansert med en kald cache, og resten av testene med en varm cache. Under normale forhold viser Zstandard 3-5 ganger høyere kompresjonshastigheter enn zlib og 10 ganger raskere dekompresjon, med 15-XNUMX% høyere kompresjonsnivåer.

Tillegg: En lignende idé om å lagre komprimerte filer i form av blobs i en SQLite-database ble implementert i 2014 i sqlar-arkivet, opprettet av SQLite-utviklerne som et eksperiment for å evaluere effektiviteten av å lagre blobs i SQLite. sqlar bruker zlib for komprimering og filstørrelsen er omtrent 2% større enn ZIP-verktøyet.

Kilde: opennet.ru

Legg til en kommentar