Ettevõte Meta* on tutvustanud OpenZL andmete tihendamise ja lahtitõmbamise tööriistu, mis demonstreerib võrreldes Zstd ja XZ formaatidega kõrgemat tihendustaset ja töökiirus. OpenZL on välja töötatud efektiivseks struktureeritud andmekogude tihendamiseks, näiteks masinõppes kasutatavate andmete ja ladustamiste jaoks, mis sisaldavad erinevat tüüpi korduvaid andmeid. OpenZL kood on kirjutatud C/C++ ja jagatakse BSD litsentsi alusel.
SAO tähtede astronoomilise katalooge tihendades võimaldas OpenZL tööriist vähendada andmemahu 2,06 korda, samas kui zstd tihendas teavet 1,31 korda ja XZ 1,64 korda. Tihendamise kiirusest rääkides ületas OpenZL zstd kaks korda (203 MB/s võrreldes 115 MB/s) ja XZ-d 65 korda (203 MB/s võrreldes 3.1 MB/s). OpenZL lahtitõmbamine osutus zstd-iga võrreldes pisut aeglasemaks (822 MB/s võrreldes 890 MB/s) ja XZ-st 27 korda kiiremaks.

OpenZL ei ole üldotstarbeline algoritm ja näitab häid tulemusi vaid eelnevalt teadaoleva struktuuriga andmete puhul. OpenZL tööpõhimõte seisneb kohanduva pakkuja genereerimises edastatud andmete kirjelduse põhjal. Tulemuseks on tihendamiseks genereeritud kood, mis on optimeeritud konkreetse andmeformaadi jaoks. Lahtitõmbamisel kasutatakse universaalset lahtitõmbajat, mis on kooskõlas kõigi genereeritud pakkujatega.
Pakendamine ja lahtitõmbamine toimub lingitud „zli” utiliidi või libopenzl teegi abil. Andmestruktuur kirjeldatakse profiilide kujul. Komplekt sisaldab juba eeldefineeritud profiile, mis kirjeldavad tüüpilisi ladustamisvormate, näiteks CSV formaadi profiil või 64-bitiste arvude massiivina salvestatud andmete profiil. Tihendamine toimub profiili valitamisega käsuga „zli list-profiles” ja pakendamisprotsessi käivitamisega käsuga „zli compress —profile profiili_nimi”. Lahtitõmbamiseks piisab käsu „zli decompress” käivitamisest.
Spetsiifiliste formaatide jaoks on vaja luua oma profiil, kasutades käsku „zli train“, mis tuvastab andmetes mustreid ja loob profiili optimaalse pakkimise tasemega. Kasutades valikut „—pareto-frontier”, saab loodud profiili täiustada pakkimise või lahtipakkimise kiirusel, mis toob kaasa pakkimise taseme languse. Kompleksete formaatide jaoks, mis sisaldavad pesasid, ja andmestruktuuride vormindamise määratlemiseks võib rakendada SDDL (Simple Data Description Language) keelt.
Optimaalsete pakkijate loomise meetod põhineb primitiivsete kodeerijate komplekti kasutamisel, millest igaühel on kõige tõhusam toime erinevate andmetüüpe ja järjestuste puhul. Pakkimise käigus luuakse suunatud mitte-ringjooneline andmetöötlusgraaf, mille sõlmedeks on kodeerijad ja servad - andmevariandid töödeldavas formaadis. Sõltuvalt siseneva andmetüübi tüübist valitakse kodeerijate ahel, mis optimaalselt tihendab sisenevat andmeelementi. Sellise korralduse korral tihendab faili pealkirja üks kodeerija, täisarvudega valdkonda teine, suureneva loenduri valdkonda kolmas ja stringide valdkonda neljas.

Allikas: opennet.ru
