Compania Meta* a prezentat un instrument pentru comprimarea și decomprimarea datelor OpenZL, care, în comparație cu formatele Zstd și XZ, demonstrează un nivel mai ridicat de compresie și o viteză de operare mai bună. OpenZL a fost conceput pentru a comprima eficient seturi structurate de date, cum ar fi cele utilizate în învățarea automată, precum și depozite care conțin câmpuri cu diverse tipuri repetate de informații. Codul OpenZL este scris în C/C++ și este open source sub licența BSD.
Când a fost comprimată baza de date cu catalogul astronomic de stele SAO, instrumentul OpenZL a redus dimensiunea datelor de 2.06 ori, în timp ce algoritmul zstd a comprimat informația de 1.31 ori, iar XZ de 1.64 ori. În plus, OpenZL a depășit zstd de două ori în ceea ce privește viteza de comprimare (203 MB/s față de 115 MB/s), iar XZ de 65 de ori (203 MB/s față de 3.1 MB/s). Decomprimarea cu OpenZL a fost doar puțin mai lentă decât zstd (822 MB/s față de 890 MB/s) și de 27 de ori mai rapidă decât XZ.

OpenZL nu este un algoritm de uz general și arată rezultate bune doar pentru date cu o structură cunoscută dinainte. Funcționarea OpenZL se reduce la generarea adaptivă a unui compresor pe baza descrierii datelor transmise. Ca rezultat, se formează un cod pentru comprimare, optimizat pentru un format specific de date. Pentru decomprimare se folosește un decompressor universal, compatibil cu toate compresoarele generate.
Comprimarea și decomprimarea se realizează cu ajutorul unei singure utilitare „zli” sau a bibliotecii libopenzl. Structura datelor este descrisă sub formă de profile. Există deja un set de profile predefinite, care descriu formatele standard de stocare. De exemplu, un profil pentru formatul CSV sau pentru datele stocate sub formă de array de numere întregi pe 64 de biți. Comprimarea se reduce la alegerea profilului cu comanda „zli list-profiles” și inițierea procesului de comprimare cu comanda „zli compress —profile numele_profilului”. Pentru decomprimare, este suficient să lansați „zli decompress.”
Pentru formate specifice, este necesar să creați un profil personalizat, folosind comanda «zli train», care identifică tiparele din date și formează un profil cu un nivel optim de comprimare. Folosind opțiunea «—pareto-frontier», profilul creat poate fi modernizat în direcția accelerării împachetării sau desfășurării, în schimbul unei reduceri a nivelului de comprimare. Pentru descrierea formatelor complexe cu structuri înnodată și pentru definirea aranjamentului formatelor de date în structuri, poate fi utilizat limbajul SDDL (Simple Data Description Language).
Metoda de creare a împachetatorilor optimi se bazează pe aplicarea unui set de codificatori primitive, fiecare fiind cel mai eficient pentru tipuri și secvențe de date separate. Pentru comprimare, se formează un graf orientat aciclic pentru procesarea datelor, nodurile fiind codec-uri, iar muchiile varianta de date în formatul procesat. În funcție de tipul de date primit la intrare, se selectează o lanț de codec-uri care comprimă optim elementul de date primit. În această organizare, antetul fișierului este comprimat de un codec, câmpul cu date întregi - de al doilea, câmpul cu un contor incremental - de al treilea, iar câmpul cu date de tip șir - de al patrulea.

Sursa: opennet.ro
