Spoločnosť Meta* predstavila nástroj na kompresiu a dekompresiu dát OpenZL, ktorý v porovnaní s formátmi Zstd a XZ vykazuje vyššiu úroveň kompresie a rýchlosť práce. OpenZL je navrhnutý na efektívnu kompresiu štruktúrovaných súborov dát, napríklad tých, ktoré sa používajú pri strojovom učení, a tiež úložísk, ktoré obsahujú polia s rôznymi opakujúcimi sa typmi informácií. Kód OpenZL je napísaný v C/C++ a je otvorený pod licenciou BSD.
Pri kompresii databázy s astronomickým katalógom hviezd SAO umožnil nástroj OpenZL znížiť veľkosť dát 2,06-krát, zatiaľ čo algoritmus zstd skomprimoval informácie 1,31-krát a XZ 1,64-krát. Pri tom OpenZL prekonal zstd dvojnásobne v rýchlosti kompresie (203 MB/s oproti 115 MB/s) a XZ 65-krát (203 MB/s oproti 3,1 MB/s). Dekomprimácia v OpenZL bola len nepatrne pomalšia ako zstd (822 MB/s oproti 890 MB/s) a 27-krát rýchlejšia ako XZ.

OpenZL nie je algoritmus všeobecného použitia a vykazuje dobré výsledky iba pre dáta s vopred známou štruktúrou. Práca OpenZL spočíva v adaptívnej generácii kompresora na základe dodaného opisu dát. V dôsledku toho sa vytvorí kód na kompresiu optimalizovaný pre konkrétny formát dát. Na dekompresiu sa používa univerzálny dekompresor, kompatibilný so všetkými generovanými kompresormi.
Kompresia a dekompresia sa vykonáva pomocou jedného nástroja „zli“ alebo knižnice libopenzl. Štruktúra dát sa opisuje vo forme profilov. Počas inštalácie je zahrnutý súbor preddefinovaných profilov, ktoré popisujú typické formáty úložiska. Napríklad profil pre formát CSV alebo dáta uložené vo forme poľa 64-bitových čísel. Kompresia spočíva vo výbere profilu príkazom „zli list-profiles“ a spustení procesu kompresie príkazom „zli compress —profile meno_profily“. Na dekompresiu stačí spustiť „zli decompress“.
Pre špecifické formáty je potrebné vytvoriť vlastný profil pomocou príkazu „zli train“, ktorý odhaľuje vzory v údajoch a vytvára profil s optimálnou úrovňou kompresie. Pomocou možnosti „—pareto-frontier“ je možné vytvorený profil modernizovať na urýchlenie balenia alebo rozbalenia, za cenu zníženia úrovne kompresie. Na opísanie zložitých formátov s vnorenými štruktúrami a určenie rozloženia formátov údajov v štruktúrach sa môže použiť jazyk SDDL (Simple Data Description Language).
Metóda vytvárania optimálnych balíčkov je založená na použití súboru primitívnych kódovačov, z ktorých každý je najúčinnejší pre jednotlivé typy a sekvencie údajov. Na kompresiu sa vytvára orientovaný acyklický graf spracovania údajov, ktorého uzlami sú kodeky a hranami — varianty údajov v spracovávanom formáte. V závislosti od typu údajov vstupujúcich do systému sa vyberá reťazec kodekov, ktorý optimálne komprimuje prijatý prvok údajov. Pri takejto organizácii sa hlavička súboru komprimuje jedným kodekom, pole s celočíselnými údajmi — druhým, pole s rastúcim číslom — tretím a pole s reťazcovými údajmi — štvrtým.

Zdroj: opennet.ru
