Meta* heeft OpenZL geïntroduceerd, een toolkit voor datacompressie en -decompressie die hogere compressiesnelheden en -snelheden biedt dan de Zstd- en XZ-formaten. OpenZL is ontworpen voor efficiënte compressie van gestructureerde datasets, zoals die worden gebruikt in machine learning, en voor datastores met velden met verschillende herhalende soorten informatie. OpenZL is geschreven in C/C++ en is open source onder de BSD-licentie.
Bij het comprimeren van een database met de astronomische sterrencatalogus van SAO reduceerde OpenZL de datagrootte met een factor 2.06, terwijl het zstd-algoritme de data comprimeerde met een factor 1.31 en XZ met een factor 1.64. Bovendien overtrof OpenZL zstd qua compressiesnelheid met een factor 2 (203 MB/s versus 115 MB/s) en XZ met een factor 65 (203 MB/s versus 3.1 MB/s). Decompressie in OpenZL was iets langzamer dan zstd (822 MB/s versus 890 MB/s) en 27 keer sneller dan XZ.

OpenZL is geen algemeen algoritme en levert alleen goede resultaten op voor data met een bekende structuur. De werking van OpenZL bestaat uit het adaptief genereren van een packer op basis van de opgegeven databeschrijving. Dit genereert compressiecode die geoptimaliseerd is voor een specifiek dataformaat. Voor de decompressie wordt een universele unpacker gebruikt die compatibel is met alle gegenereerde packers.
Inpakken en uitpakken gebeurt met één hulpprogramma, "zli", of de libopenzl-bibliotheek. De datastructuur wordt beschreven in de vorm van profielen. Dit omvat een set vooraf gedefinieerde profielen die typische opslagformaten beschrijven. Bijvoorbeeld een profiel voor het CSV-formaat of gegevens opgeslagen als een 64-bits array. Compressie is net zo eenvoudig als het selecteren van een profiel met de opdracht "zli list-profiles" en het starten van het compressieproces met de opdracht "zli compress --profile profile_name". Om uit te pakken, voert u simpelweg "zli decompress" uit.
Voor specifieke formaten moet een aangepast profiel worden gemaakt met de opdracht "zli train". Deze identificeert patronen in de data en genereert een profiel met een optimaal compressieniveau. Met de optie "--pareto-frontier" kan het gemaakte profiel worden geoptimaliseerd om compressie of decompressie te versnellen, ten koste van de compressie. Simple Data Description Language (SDDL) kan worden gebruikt om complexe formaten met geneste structuren te beschrijven en de lay-out van dataformaten binnen structuren te definiëren.
De methode voor het creëren van optimale packers is gebaseerd op een set primitieve encoders, die elk het meest effectief zijn voor specifieke gegevenstypen en -reeksen. Voor compressie wordt een gerichte acyclische gegevensverwerkingsgrafiek gevormd, met codecs als knooppunten en datavarianten in het verwerkte formaat als randen. Afhankelijk van het invoergegevenstype wordt een keten van codecs geselecteerd die het binnenkomende data-element optimaal comprimeert. In deze configuratie wordt de bestandsheader gecomprimeerd met één codec, het integer-gegevensveld met een tweede codec, het incrementele tellerveld met een derde codec en het string-gegevensveld met een vierde codec.

Bron: opennet.ru
