Meta* har introduceret OpenZL, et værktøjssæt til datakomprimering og dekomprimering, der tilbyder højere komprimeringshastigheder og -rater end Zstd- og XZ-formaterne. OpenZL er designet til effektiv komprimering af strukturerede datasæt, såsom dem, der bruges i maskinlæring, samt datalagre, der indeholder felter med forskellige gentagne typer information. OpenZL er skrevet i C/C++ og er open source under BSD-licensen.
Ved komprimering af en database, der indeholdt SAO's astronomiske stjernekatalog, reducerede OpenZL datastørrelsen med en faktor 2.06, mens zstd-algoritmen komprimerede dataene med en faktor 1.31 og XZ med en faktor 1.64. Desuden overgik OpenZL zstd i komprimeringshastighed med en faktor 2 (203 MB/s versus 115 MB/s) og XZ med en faktor 65 (203 MB/s versus 3.1 MB/s). Dekompression i OpenZL var en smule langsommere end zstd (822 MB/s versus 890 MB/s) og 27 gange hurtigere end XZ.

OpenZL er ikke en generel algoritme og viser kun gode resultater for data med en kendt struktur. OpenZLs funktion består i adaptivt at generere en pakker baseret på den angivne databeskrivelse. Dette genererer komprimeringskode, der er optimeret til et specifikt dataformat. En universel udpakker, der er kompatibel med alle genererede pakkere, bruges til dekomprimering.
Pakning og udpakning udføres ved hjælp af et enkelt værktøj, "zli", eller libopenzl-biblioteket. Datastrukturen beskrives i form af profiler. Dette inkluderer et sæt foruddefinerede profiler, der beskriver typiske lagringsformater. For eksempel en profil til CSV-formatet eller data gemt som et 64-bit array. Komprimering er så simpelt som at vælge en profil med kommandoen "zli list-profiles" og starte komprimeringsprocessen med kommandoen "zli compress --profile profile_name". For at udpakke skal du blot køre "zli decompress".
For specifikke formater skal der oprettes en brugerdefineret profil ved hjælp af kommandoen "zli train", som identificerer mønstre i dataene og genererer en profil med et optimalt komprimeringsniveau. Ved hjælp af indstillingen "--pareto-frontier" kan den oprettede profil optimeres for at fremskynde komprimering eller dekomprimering på bekostning af komprimering. Simple Data Description Language (SDDL) kan bruges til at beskrive komplekse formater med indbyggede strukturer og definere layoutet af dataformater inden for strukturer.
Metoden til at oprette optimale pakkere er baseret på et sæt primitive encodere, som hver især er mest effektive til specifikke datatyper og sekvenser. Til komprimering dannes en rettet acyklisk databehandlingsgraf med codecs som noder og datavarianter i det behandlede format som kanter. Afhængigt af inputdatatypen vælges en kæde af codecs, der optimalt komprimerer det indgående dataelement. Med denne ordning komprimeres filheaderen ved hjælp af én codec, heltalsdatafeltet ved hjælp af en anden codec, det inkrementerende tællerfelt ved hjælp af en tredje codec og strengdatafeltet ved hjælp af en fjerde codec.

Kilde: opennet.ru
