Episode 2: Zstandard im Vergleich mit anderen KompressionsverfahrenEpisode 2: Zstandard im Vergleich mit anderen KompressionsverfahrenZST, ZIP, GZIP, Brotli, LZ4 und XZ im VergleichIn Episode 1 haben wir gesehen, wie Zstandard Wiederholungen erkennt und durch kürzere Verweise ersetzt.Zstandard ist jedoch nur eines von mehreren Kompressionsverfahren. ZIP, GZIP, Brotli, LZ4 und XZ verfolgen dasselbe grundlegende Ziel: Sie sollen Dateien verkleinern, ohne deren Inhalt zu verändern.
Die Verfahren setzen dabei unterschiedliche Schwerpunkte.
Einige komprimieren besonders schnell. Andere erzeugen besonders kleine Dateien. Wieder andere sind vor allem deshalb verbreitet, weil sie von fast jedem Gerät geöffnet werden können.
Dateiformat und Kompressionsverfahren
Bevor wir die Verfahren vergleichen, müssen wir zwei Dinge auseinanderhalten:
*Ein Dateiformat legt fest, wie die komprimierten Daten gespeichert werden. Das Kompressionsverfahren legt fest, wie die Daten verkleinert werden.*Bei einer ZST-Datei ist die Zuordnung einfach:
Dateiformat .zst
Kompressionsverfahren ZstandardBei ZIP und GZIP ist es etwas komplizierter. Beide verwenden gewöhnlich das ältere Kompressionsverfahren Deflate.
ZIP-Datei Deflate
GZIP-Datei DeflateDas bedeutet nicht, dass ZIP und GZIP dasselbe Format sind.
Eine ZIP-Datei kann mehrere Dateien und Ordner in einem Archiv speichern. Jede Datei kann innerhalb des Archivs einzeln komprimiert werden.
GZIP komprimiert dagegen normalerweise einen einzelnen Datenstrom. Sollen mehrere Dateien gemeinsam gespeichert werden, werden sie deshalb häufig zuerst mit TAR zusammengefasst und anschließend mit GZIP komprimiert.
Mehrere Dateien
↓
TAR fasst sie zusammen
↓
GZIP komprimiert das TAR-Archiv
↓
Archiv.tar.gzNach demselben Prinzip entstehen auch .tar.xz- und .tar.zst-Dateien.
Was bedeutet „besser komprimiert“?
Angenommen, unsere ursprüngliche Datei ist 100 Megabyte groß.
Verfahren A verkleinert sie auf 50 Megabyte. Verfahren B erreicht 35 Megabyte.
Verfahren B komprimiert stärker. Das bedeutet aber noch nicht, dass es für jede Aufgabe die bessere Wahl ist.
Für einen sinnvollen Vergleich müssen mindestens drei Eigenschaften betrachtet werden:
Dateigröße nach dem Komprimieren
Zeit zum Komprimieren
Zeit zum EntpackenHinzu kommen der benötigte Arbeitsspeicher und die Frage, welche Programme das Format unterstützen.
Ein Verfahren kann eine besonders kleine Datei erzeugen, dafür aber lange zum Komprimieren benötigen. Ein anderes erzeugt eine etwas größere Datei, lässt sich jedoch wesentlich schneller entpacken.
ZIP und GZIP
ZIP und GZIP verwenden gewöhnlich Deflate. Dieses Verfahren stammt aus den frühen 1990er-Jahren und kombiniert zwei Ideen:
Zuerst werden Wiederholungen durch Verweise ersetzt. Anschließend werden häufig vorkommende Zeichenfolgen mit kürzeren Codes gespeichert.
Das Grundprinzip ähnelt damit dem aus Episode 1 bekannten Verfahren. Moderne Kompressoren können Wiederholungen jedoch meist gründlicher oder schneller verarbeiten.
Die große Stärke von ZIP ist seine Verbreitung.
ZIP-Dateien lassen sich auf praktisch jedem aktuellen Computer und Smartphone ohne zusätzliche Software öffnen. Außerdem können mehrere Dateien und Ordner direkt in einem Archiv gespeichert werden.
GZIP ist besonders auf Webservern und Unix-Systemen verbreitet. Es wird häufig verwendet, um einzelne Dateien, Datenströme oder TAR-Archive zu komprimieren.
ZIP und GZIP sind deshalb weiterhin sinnvoll, wenn eine möglichst breite Kompatibilität wichtiger ist als die beste Geschwindigkeit oder die kleinste Datei.
Brotli
Brotli wurde vor allem für die Übertragung von Webinhalten entwickelt.
Webseiten enthalten viele wiederkehrende Bestandteile: HTML-Befehle, CSS-Eigenschaften, JavaScript-Ausdrücke und typische Wörter. Brotli besitzt zusätzlich ein eingebautes Wörterbuch mit häufig vorkommenden Zeichenfolgen.
Dadurch können bekannte Bestandteile durch kurze Verweise dargestellt werden.
Brotli kann insbesondere bei Textdateien und Webinhalten sehr kleine Ergebnisse erzeugen. Bei höheren Kompressionsstufen benötigt das Komprimieren allerdings deutlich mehr Zeit.
Das ist bei einer Webseite häufig akzeptabel: Eine JavaScript- oder CSS-Datei wird einmal komprimiert, anschließend aber möglicherweise millionenfach an Besucher übertragen.
LZ4
LZ4 wurde für Geschwindigkeit entwickelt.
Das Verfahren sucht ebenfalls nach bereits vorkommenden Daten. Es investiert jedoch weniger Rechenzeit in die Suche nach der kleinstmöglichen Darstellung.
Dadurch entstehen gewöhnlich größere Dateien als mit Zstandard, Brotli oder XZ. Dafür kann LZ4 sehr schnell komprimieren und noch schneller entpacken.
Das ist nützlich, wenn Daten nur vorübergehend komprimiert werden oder besonders schnell wieder verfügbar sein müssen — beispielsweise in Arbeitsspeichern, Datenbanken, Zwischenspeichern oder laufenden Computersystemen.
LZ4 beantwortet die Frage:
Wie können wir die Daten verkleinern, ohne den Zugriff merklich auszubremsen?### XZ
Eine XZ-Datei verwendet normalerweise das Kompressionsverfahren LZMA2.
LZMA2 sucht sehr gründlich nach Wiederholungen und kann dabei einen großen bereits verarbeiteten Datenbereich berücksichtigen. Anschließend werden die gefundenen Informationen besonders platzsparend codiert.
Das kann sehr kleine Dateien ergeben. Die gründliche Suche benötigt jedoch Zeit und Arbeitsspeicher. Auch das Entpacken ist meist langsamer als bei Zstandard oder LZ4.
XZ eignet sich deshalb besonders für Dateien, die einmal komprimiert, anschließend gespeichert oder häufig verteilt werden.
Ein typisches Beispiel sind Softwarepakete: Die Erstellung des Archivs darf länger dauern, wenn dadurch später Speicherplatz und Übertragungsvolumen eingespart werden.
Zstandard
Zstandard ist auf ein ausgewogenes Verhältnis zwischen Dateigröße und Geschwindigkeit ausgelegt. Es verbindet eine gute Verkleinerung mit hoher Kompressions- und besonders hoher Dekompressionsgeschwindigkeit.
Über die Kompressionsstufe kann vor dem Komprimieren entschieden werden, welcher Schwerpunkt wichtiger ist:
Niedrige Stufe schneller komprimieren
Mittlere Stufe ausgewogenes Verhältnis
Hohe Stufe kleinere DateiDie ZST-Datei enthält bereits alle Informationen, die zum Entpacken benötigt werden. Das entpackende Programm muss deshalb nicht wissen, mit welcher Stufe sie erstellt wurde.
Zstandard unterstützt außerdem Wörterbücher für viele kleine, ähnlich aufgebaute Dateien. Dieses Verfahren haben wir in Episode 1 kennengelernt.
Ein Vergleich unter gleichen Bedingungen
Geschwindigkeitsangaben sind nur sinnvoll, wenn alle Verfahren mit denselben Daten und auf demselben Computer getestet werden.
Die folgenden Werte stammen aus einem Benchmark des Zstandard-Projekts. Getestet wurde der gemischte Silesia-Datensatz auf einem Core i7–9700K. Alle Verfahren wurden auf demselben Computer mit demselben Benchmark und nur einem Prozessorkern gemessen. Die verwendeten Kompressionsstufen sind auf hohe Geschwindigkeit ausgerichtet und entsprechen nicht der jeweils stärksten möglichen Kompression.
*Quelle: [*Offizieller Zstandard-Benchmark](https://github.com/facebook/zstd#benchmarks)
Verfahren Faktor Komprimieren Entpacken
Zstandard, Stufe 1 2,896 510 MB/s 1.550 MB/s
Brotli, schnelle Stufe 2,883 290 MB/s 425 MB/s
Deflate/zlib, Stufe 1 2,743 105 MB/s 390 MB/s
LZ4 2,101 675 MB/s 3.850 MB/s*LZ4 komprimiert und entpackt extrem schnell, erzeugt dafür aber die größte Datei. Brotli erreicht eine ähnlich starke Kompression wie Zstandard, arbeitet dabei jedoch deutlich langsamer. Deflate, das gewöhnlich von ZIP und GZIP verwendet wird, ist sowohl beim Komprimieren als auch beim Entpacken langsamer und erzeugt eine etwas größere Datei. Zstandard bietet in diesem Vergleich das ausgewogenste Verhältnis aus Dateigröße, Kompressionsgeschwindigkeit und Dekompressionsgeschwindigkeit.*XZ fehlt bewusst in dieser Tabelle. Es gehört zu den langsameren Verfahren und wurde im dargestellten Vergleich schneller Kompressoren nicht mitgemessen.Ein Kompressionsfaktor von 2,896 bedeutet:
Ursprüngliche Größe ÷ 2,896
↓
Komprimierte GrößeAus einer 100 Megabyte großen Datei würden in diesem Test also ungefähr 34,5 Megabyte.
Warum gibt es nicht den einen Sieger?
Das Ergebnis hängt stark vom Inhalt ab.
Eine Textdatei enthält andere Wiederholungen als eine Datenbank. Programmdateien unterscheiden sich von Fotos, Musik und Videos.
Auch die gewählte Kompressionsstufe verändert das Ergebnis. Zwei Verfahren dürfen deshalb nicht allein anhand ihrer höchsten Stufennummer verglichen werden. Die Stufen haben bei jedem Verfahren eine andere Bedeutung.
Hinzu kommt der Verwendungszweck.
Muss eine Datei nur einmal komprimiert, aber sehr häufig heruntergeladen werden, darf die Kompression länger dauern. Muss ein Server fortlaufend neue Daten komprimieren, ist die Geschwindigkeit wichtiger.
Welches Verfahren eignet sich wofür?
ZIP Für unkomplizierten Austausch und breite Unterstützung
GZIP Für einzelne Dateien und TAR-Archive auf Unix-Systemen
Brotli Für HTML, CSS und JavaScript im Web
LZ4 Für extrem schnelles Komprimieren und Entpacken
XZ Für besonders kleine Archive, wenn Zeit weniger wichtig ist
Zstandard Für gute Kompression bei hoher GeschwindigkeitDas sind keine festen Regeln. Sie zeigen lediglich, welchen Schwerpunkt die Verfahren gewöhnlich besitzen.
Warum wird Zstandard immer häufiger verwendet?
LZ4 ist schneller, erzeugt aber größere Dateien. XZ kann kleinere Dateien erzeugen, benötigt dafür jedoch mehr Zeit. ZIP und GZIP sind sehr kompatibel, basieren aber meist auf dem älteren Deflate-Verfahren.
Zstandard liegt zwischen diesen Extremen.
Es kann schnell genug für laufende Systeme sein, stark genug für Backups und Archive komprimieren und die Daten sehr schnell wieder bereitstellen. Seine Kompressionsstufen erlauben es Anwendungen, dieses Verhältnis an ihren jeweiligen Zweck anzupassen.
Das Zstandard-Format ist offen dokumentiert und als RFC 8878 standardisiert.
Zusammenfassung
Alle beschriebenen Verfahren komprimieren verlustfrei. Nach dem Entpacken entsteht exakt die ursprüngliche Datei.
Der Unterschied liegt nicht darin, ob sie richtig funktionieren, sondern wie sie ihre Arbeit verteilen:
LZ4 höchste Geschwindigkeit
Zstandard ausgewogenes Verhältnis
Brotli starke Kompression für Webinhalte
XZ kleine Dateien bei höherem Zeitaufwand
ZIP/GZIP sehr breite UnterstützungWelches Format das beste ist, hängt deshalb nicht allein von der kleinsten Dateigröße ab.
Die eigentliche Frage lautet:
Wie klein muss die Datei werden, wie schnell muss sie erstellt werden und wie schnell müssen wir wieder auf ihren Inhalt zugreifen?*ZST-Dateien lassen sich mit **unpackZST* öffnen:
Top comments (0)