Bedrijf Meta* heeft een tool voor het comprimeren en decomprimeren van gegevens genaamd OpenZL geïntroduceerd, die in vergelijking met de formats Zstd en XZ een hogere compressiegraad en snelheid vertoont. OpenZL is ontwikkeld voor de efficiënte compressie van gestructureerde datasets, bijvoorbeeld toegepast in machine learning, evenals opslagplaatsen die velden met verschillende herhalende informatie bevatten. De code van OpenZL is geschreven in C/C++ en is open source onder de BSD-licentie.
Bij het comprimeren van een database met de astronomische sterrencatalogus SAO, stelde de tool OpenZL in staat om de gegevensgrootte met 2,06 keer te verkleinen, terwijl het algoritme zstd de informatie met 1,31 keer en XZ met 1,64 keer heeft gecomprimeerd. Wat betreft de compressiesnelheid overtrad OpenZL zstd met een factor twee (203 MB/s tegenover 115 MB/s) en XZ met 65 keer (203 MB/s tegenover 3,1 MB/s). De decompressie met OpenZL was iets langzamer dan zstd (822 MB/s tegenover 890 MB/s) en 27 keer sneller dan XZ.

OpenZL is geen algoritme voor algemeen gebruik en toont goede resultaten alleen voor gegevens met een vooraf bekende structuur. De werking van OpenZL beperkt zich tot adaptieve generatie van een compressieprogramma op basis van de meegeleverde gegevensbeschrijving. Dit resulteert in code voor compressie die is geoptimaliseerd voor het specifieke gegevensformaat. Voor decompressie wordt een universele decompressor gebruikt die compatibel is met alle gegenereerde compressieprogramma's.
Compressie en decompressie worden gedaan met behulp van ƩƩn hulpprogramma, āzliā, of de bibliotheek libopenzl. De datastructuur wordt beschreven in de vorm van profielen. Er is al een set vooraf gedefinieerde profielen inbegrepen die typische opslagformaten beschrijven. Bijvoorbeeld, een profiel voor het CSV-formaat of gegevens opgeslagen in de vorm van een array met 64-bits gehele getallen. Compressie vindt plaats door het profiel te selecteren met het commando āzli list-profilesā en het compressieproces te starten met het commando āzli compress āprofile profielnaamā. Voor decompressie is het voldoende om āzli decompressā uit te voeren.
Voor specifieke indelingen is het nodig om een eigen profiel te creĆ«ren met behulp van het commando Ā«zli trainĀ», dat patronen in de gegevens identificeert en een profiel vormt met het optimale compressieniveau. Met de optie Ā«āpareto-frontierĀ» kan het gecreĆ«erde profiel worden gemoderniseerd in de richting van versnelde compressie of decompressie, ten koste van een lager compressieniveau. Voor het beschrijven van complexe indelingen met geneste structuren en het bepalen van de indeling van gegevenformaten in structuren kan de SDDL-taal (Simple Data Description Language) worden gebruikt.
De methode voor het creƫren van optimale compressoren is gebaseerd op het gebruik van een set primitieve coderingsmethoden, waarvan elk het meest effectief is voor afzonderlijke typen en reeksen gegevens. Voor compressie wordt een gericht acyclisch gegevensverwerkingsgraf gevormd, waarbij de knooppunten codec's zijn en de randen data-opties in het verwerkte formaat zijn. Afhankelijk van het type gegevens dat binnenkomt, wordt er een keten van codec's gekozen die het binnenkomende gegevenselement optimaal comprimeert. Bij deze organisatie wordt de header van het bestand gecomprimeerd door ƩƩn codec, het veld met gehele getallen door een tweede, het veld met een toenemende teller door een derde, en het veld met tekenreeksgegevens door een vierde.

Bron: opennet.ru
