Meta* het OpenZL bekendgestel, 'n datakompressie- en dekompressie-gereedskapskis wat hoër kompressietempo's en spoed bied as die Zstd- en XZ-formate. OpenZL is ontwerp vir doeltreffende kompressie van gestruktureerde datastelle, soos dié wat in masjienleer gebruik word, sowel as databergings wat velde met verskillende herhalende tipes inligting bevat. OpenZL is geskryf in C/C++ en is oopbron onder die BSD-lisensie.
Wanneer 'n databasis wat die SAO-sterrekatalogus bevat, saamgepers is, het OpenZL die datagrootte met 'n faktor van 2.06 verminder, terwyl die zstd-algoritme die data met 'n faktor van 1.31 en XZ met 'n faktor van 1.64 saamgepers het. Boonop het OpenZL zstd in kompressiespoed met 'n faktor van 2 (203 MB/s teenoor 115 MB/s) en XZ met 'n faktor van 65 (203 MB/s teenoor 3.1 MB/s) oortref. Dekompressie in OpenZL was effens stadiger as zstd (822 MB/s teenoor 890 MB/s) en 27 keer vinniger as XZ.

OpenZL is nie 'n algemene algoritme nie en toon slegs goeie resultate vir data met 'n bekende struktuur. OpenZL se werking bestaan uit die aanpasbare generering van 'n pakker gebaseer op die verskafde databeskrywing. Dit genereer kompressiekode wat geoptimaliseer is vir 'n spesifieke dataformaat. 'n Universele uitpakker, versoenbaar met alle gegenereerde pakkers, word vir dekompressie gebruik.
Pak en uitpak word uitgevoer met behulp van 'n enkele hulpmiddel, "zli," of die libopenzl-biblioteek. Die datastruktuur word beskryf in die vorm van profiele. Dit sluit 'n stel voorafbepaalde profiele in wat tipiese stoorformate beskryf. Byvoorbeeld, 'n profiel vir die CSV-formaat of data wat as 'n 64-bis-skikking gestoor word. Kompressie is so eenvoudig soos om 'n profiel met die "zli list-profiles"-opdrag te kies en die kompressieproses met die "zli compress --profile profile_name"-opdrag te begin. Om uit te pak, voer eenvoudig "zli decompress" uit.
Vir spesifieke formate moet 'n persoonlike profiel geskep word met behulp van die "zli train"-opdrag, wat patrone in die data identifiseer en 'n profiel met 'n optimale kompressievlak genereer. Deur die "--pareto-frontier"-opsie te gebruik, kan die geskepte profiel geoptimaliseer word om kompressie of dekompressie te versnel, ten koste van kompressie. Simple Data Description Language (SDDL) kan gebruik word om komplekse formate met geneste strukture te beskryf en die uitleg van dataformate binne strukture te definieer.
Die metode vir die skep van optimale pakkers is gebaseer op 'n stel primitiewe enkodeerders, wat elkeen die doeltreffendste is vir spesifieke datatipes en -reekse. Vir kompressie word 'n gerigte asikliese dataverwerkingsgrafiek gevorm, met kodeke as nodusse en datavariante in die verwerkte formaat as rande. Afhangende van die invoerdatatipe word 'n ketting van kodeke gekies wat die inkomende data-element optimaal komprimeer. Met hierdie rangskikking word die lêerkop saamgepers met behulp van een kodek, die heelgetaldataveld met behulp van 'n tweede kodek, die toenemende tellerveld met behulp van 'n derde kodek, en die stringdataveld met behulp van 'n vierde kodek.

Bron: opennet.ru
