Das OpenZL-Kompressionssystem übertrifft Zstd und XZ hinsichtlich Geschwindigkeit und Kompressionsrate von strukturierten Daten.

Das Unternehmen Meta* hat ein Toolset zur Kompression und Dekompression von Daten namens OpenZL vorgestellt, das im Vergleich zu den Formaten Zstd und XZ eine höhere Kompressionsrate und Geschwindigkeit demonstriert. OpenZL wurde entwickelt, um strukturierte Datensätze effizient zu komprimieren, die beispielsweise im maschinellen Lernen verwendet werden, sowie für Speicher, die Felder mit verschiedenen sich wiederholenden Informationsarten enthalten. Der Code von OpenZL ist in C/C++ geschrieben und steht unter der BSD-Lizenz.

Bei der Kompression einer Datenbank mit dem astronomischen Katalog der Sterne SAO ermöglichte das Tool OpenZL eine Reduzierung der Datenmenge um das 2,06-fache, während der Algorithmus zstd die Informationen um das 1,31-fache und XZ um das 1,64-fache komprimierte. In Bezug auf die Kompressionsgeschwindigkeit überholte OpenZL zstd um das Doppelte (203 MB/s gegenüber 115 MB/s) und XZ um das 65-fache (203 MB/s gegenüber 3,1 MB/s). Die Dekompression in OpenZL war geringfügig langsamer als bei zstd (822 MB/s gegenüber 890 MB/s) und 27-mal schneller als bei XZ.

Das OpenZL-Kompressionssystem übertrifft Zstd und XZ hinsichtlich Geschwindigkeit und Kompressionsrate von strukturierten Daten.

OpenZL ist kein universeller Algorithmus und zeigt nur bei Daten mit vordefinierter Struktur gute Ergebnisse. Die Funktionsweise von OpenZL basiert auf der adaptiven Generierung eines Packers auf Grundlage der übergebenen Datenbeschreibung. Infolgedessen wird ein für das spezifische Datenformat optimierter Kompressionscode erstellt. Für die Dekompression kommt ein universeller Dekompressor zum Einsatz, der mit allen generierten Packern kompatibel ist.

Die Packung und Dekompression erfolgt mithilfe eines einzigen Tools „zli“ oder der Bibliothek libopenzl. Die Datenstruktur wird in Form von Profilen beschrieben. Dabei sind bereits vordefinierte Profile enthalten, die gängige Speicherformate beschreiben. Beispielsweise ein Profil für das CSV-Format oder Daten, die als Array von 64-Bit-Zahlen gespeichert sind. Die Kompression erledigt man durch die Auswahl eines Profils mit dem Befehl „zli list-profiles“ und startet den Packvorgang mit dem Befehl „zli compress —profile profil_name“. Für die Dekompression genügt es, „zli decompress“ auszuführen.

Für spezifische Formate muss ein eigenes Profil erstellt werden, indem man den Befehl „zli train“ verwendet, der Muster in den Daten erkennt und ein Profil mit optimalem Kompressionsniveau erstellt. Mit der Option „—pareto-frontier“ kann das erstellte Profil in Richtung beschleunigter Kompression oder Dekompression optimiert werden, was jedoch mit einer Verringerung des Kompressionsgrades einhergeht. Zur Beschreibung komplexer Formate mit verschachtelten Strukturen und zur Bestimmung der Anordnung der Datenformate in Strukturen kann die Sprache SDDL (Simple Data Description Language) verwendet werden.

Die Methode zur Erstellung optimaler Packalgorithmen basiert auf der Anwendung einer Reihe primitiver Encoder, von denen jeder für bestimmte Datentypen und -sequenzen am effektivsten ist. Für die Kompression wird ein gerichteter azyklischer Graph verarbeitet, dessen Knoten Codecs und dessen Kanten Datenvarianten im verarbeiteten Format sind. Je nach Art der eingehenden Daten wird eine Kette von Codecs ausgewählt, die das jeweilige Datenelement optimal komprimieren. Bei dieser Organisation wird der Dateikopf mit einem Codec komprimiert, das Feld mit Ganzzahl-Daten mit einem zweiten, das Feld mit steigenden Zählern mit einem dritten und das Feld mit Zeichenfolgendaten mit einem vierten.

Das OpenZL-Kompressionssystem übertrifft Zstd und XZ hinsichtlich Geschwindigkeit und Kompressionsrate von strukturierten Daten.


Quelle: opennet.ru
Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster