Episode 1: Was in einer ZST-Datei passiertEpisode 1: Was in einer ZST-Datei passiertZST-Dateien begegnen uns immer häufiger bei großen Downloads, Softwarepaketen, Backups und Serverdaten. Sie sind oft deutlich kleiner als die ursprünglichen Dateien und lassen sich trotzdem sehr schnell wieder entpacken.
Doch wie funktioniert das?
Warum werden Dateien komprimiert?
Eine Datei besteht aus Daten. Je mehr Daten sie enthält, desto mehr Speicherplatz wird benötigt und desto länger dauert ihre Übertragung.
Kompression versucht, dieselben Informationen mit weniger Daten darzustellen. Beim späteren Entpacken muss daraus wieder exakt die ursprüngliche Datei entstehen.
Nach dem Entpacken ist die Datei Bit für Bit identisch mit dem Original. Es wird nichts weggelassen und nichts vereinfacht.
Wiederholungen benötigen unnötig viel Platz
Betrachten wir diesen Satz:
Kleine Katzen kuscheln auf kleinen Kissen,
junge Katzen kuscheln auf bunten Kissen
und alte Katzen kuscheln auf weichen Kissen.Die folgenden Teile kommen mehrfach vor:
A = Katzen kuscheln auf
B = KissenWenn wir die wiederkehrenden Textteile durch die Variablen A und B ersetzen, können wir den Satz kürzer darstellen:
Kleine A kleinen B,
junge A bunten B
und alte A weichen B.Damit ist der Text noch nicht vollständig. Zusätzlich müssen wir speichern, wofür A und B stehen:
A = Katzen kuscheln auf
B = KissenAus diesen Informationen lässt sich der ursprüngliche Satz wiederherstellen. Jedes A wird durch Katzen kuscheln auf und jedes B durch Kissen ersetzt.
Das ist bereits die grundlegende Idee der verlustfreien Kompression:
Wiederkehrende Daten werden nicht jedes Mal vollständig gespeichert. Stattdessen werden sie einmal gespeichert und anschließend durch kürzere Verweise ersetzt.### Zstandard verwendet keine Variablen
Unsere Variablen A und B dienen nur dazu, das Prinzip verständlich zu machen.
Zstandard versteht weder Wörter noch Sätze. Es weiß nicht, was Katzen oder Kissen sind. Für das Programm besteht eine Datei lediglich aus einer Folge von Bytes.
Wenn Zstandard eine Bytefolge findet, die bereits kurz zuvor vorkam, kann es einen Verweis auf diese vorhandenen Daten speichern. Dieser Verweis enthält im Wesentlichen zwei Angaben: den Abstand zu den bereits vorhandenen Daten und die Länge der Folge, die übernommen werden soll.
Zstandard speichert also sinngemäß nicht:
A = Katzen kuscheln aufSondern:
Kopiere eine Bytefolge,
die in den bereits verarbeiteten Daten beginnt,
und füge sie an der aktuellen Position ein.Wiederholungen müssen dabei keine vollständigen Wörter sein. Auch Wortteile, Satzzeichen, Dateistrukturen oder andere wiederkehrende Bytefolgen können erkannt werden.
Deshalb funktioniert dieses Verfahren nicht nur mit Texten, sondern auch mit Quellcode, Protokolldateien, Datenbankexporten und vielen anderen Dateitypen.
Wie wird die Datei wieder entpackt?
Beim Entpacken liest Zstandard die gespeicherten Daten der Reihe nach.
Neue Daten werden direkt in die Ausgabedatei geschrieben. Trifft das Programm auf einen Verweis, enthält dieser einen Abstand und eine Länge.
Der Abstand gibt an, wie weit vor der aktuellen Schreibposition die zu kopierende Bytefolge beginnt. Die Länge bestimmt, wie viele Bytes von dort kopiert und an der aktuellen Schreibposition angefügt werden.
Bis zu diesem Punkt wurden folgende Daten entpackt:
Kleine Katzen kuscheln auf kleinen Kissen,
jungeWir zählen nun die darin enthaltenen Bytes:
Bytes 0–5 „Kleine“
Bytes 6–25 „ Katzen kuscheln auf“
Bytes 26–42 „ kleinen Kissen,“ + Zeilenumbruch
Bytes 43–47 „junge“Das Leerzeichen vor Katzen gehört zur gesuchten Bytefolge. Sie beginnt bei Byte 6 und ist 20 Bytes lang:
Byte 6 bis Byte 25
↓
Katzen kuscheln aufNach junge befindet sich die nächste Schreibposition bei Byte 48. Von dort bis zum Anfang der bekannten Bytefolge bei Byte 6 beträgt der Abstand:
48 − 6 = 42 BytesDer Verweis lautet deshalb:
Verweis
Abstand 42 Bytes
Länge 20 BytesZstandard kopiert die 20 Bytes, die 42 Bytes vor der aktuellen Schreibposition beginnen, und fügt sie an dieser Position ein.
Bereits entpackt:
Kleine Katzen kuscheln auf kleinen Kissen,
junge
Kopierte Bytefolge:
Katzen kuscheln aufDas Ergebnis lautet:
Kleine Katzen kuscheln auf kleinen Kissen,
junge Katzen kuscheln aufAnschließend liest Zstandard die nächsten neuen Daten und den nächsten Verweis. So wird die ursprüngliche Datei Schritt für Schritt wiederhergestellt.
Beim Komprimieren musste Zstandard zuerst nach geeigneten Wiederholungen suchen. Beim Entpacken sind Abstand und Länge bereits in der ZST-Datei gespeichert. Die Verweise müssen nur noch gelesen und ausgeführt werden.
Das ist ein wesentlicher Grund dafür, dass Zstandard Daten besonders schnell entpacken kann.
Wie werden die übrigen Daten komprimiert?
Mit den Verweisen haben wir bereits einen wichtigen Teil der Zstandard-Kompression verstanden.
Doch nicht alle Daten wiederholen sich. Die Wörter Kleine, kleinen, junge, bunten, alte und weichen müssen ebenfalls gespeichert werden.
Zstandard untersucht deshalb zusätzlich, welche Werte in den verbleibenden Daten besonders häufig vorkommen.
Häufige Werte können mit kürzeren Darstellungen gespeichert werden als seltene Werte. Dadurch wird die Datei noch einmal kleiner.
Zstandard kombiniert somit zwei grundlegende Möglichkeiten:
- Wiederkehrende Bytefolgen werden durch Abstand und Länge beschrieben.
- Die verbleibenden Daten und Verweise werden zusätzlich kompakt codiert. Die tatsächlichen mathematischen Verfahren sind deutlich komplexer. Für unser Verständnis ist entscheidend: Zstandard spart nicht nur bei vollständigen Wiederholungen Platz. Es stellt auch die übrigen Informationen möglichst platzsparend dar.
Warum ist Zstandard so schnell?
Bevor die Kompression beginnt, wird eine Kompressionsstufe gewählt.
Das kann der Benutzer selbst tun, beispielsweise in den Einstellungen eines Programms oder über einen Befehl im Terminal. Wird keine Stufe angegeben, verwendet das Programm normalerweise eine voreingestellte Standardstufe.
Die Stufe legt fest, wie viel Zeit und Arbeitsspeicher Zstandard für die Suche nach Wiederholungen einsetzen darf.
Eine niedrige Stufe sucht weniger aufwendig. Dadurch wird die Datei besonders schnell komprimiert, möglicherweise aber etwas größer.
Eine höhere Stufe sucht gründlicher nach guten und längeren Übereinstimmungen. Dadurch kann die komprimierte Datei kleiner werden, die Kompression benötigt jedoch mehr Zeit und Arbeitsspeicher.
Die gewählte Stufe verändert nicht den Inhalt. Nach dem Entpacken entsteht unabhängig von der Stufe immer exakt die ursprüngliche Datei.
Sie beeinflusst nur das Verhältnis zwischen Kompressionszeit, Speicherbedarf und Dateigröße.
Zum Entpacken muss die zuvor verwendete Kompressionsstufe nicht ausgewählt oder bekannt sein. Alle gefundenen Verweise und alle weiteren benötigten Informationen befinden sich bereits in der ZST-Datei.
Das Entpacken bleibt deshalb in der Regel sehr schnell: Zstandard muss nicht erneut nach Wiederholungen suchen, sondern lediglich die gespeicherten Informationen lesen und ausführen.
Was ist sonst noch besonders an einer ZST-Datei?
Zstandard verarbeitet größere Dateien in Abschnitten und speichert die komprimierten Daten in Blöcken. Dadurch muss nicht zwangsläufig die gesamte Datei gleichzeitig im Arbeitsspeicher liegen.
Eine ZST-Datei kann außerdem eine Prüfsumme enthalten. Damit lässt sich erkennen, ob die komprimierten Daten beschädigt wurden. Diese Prüfsumme ist jedoch optional und deshalb nicht in jeder ZST-Datei vorhanden.
Was ist ein Zstandard-Wörterbuch?
Unser Beispiel mit A und B erinnert an ein Wörterbuch. Zstandard verwendet für gewöhnliche Verweise jedoch kein solches Verzeichnis. Es beschreibt die bereits vorhandenen Daten durch Abstand und Länge.
Normalerweise kann Zstandard auf Bytefolgen verweisen, die im bereits verarbeiteten Bereich derselben Datei vorkamen. Bei einer sehr kleinen Datei gibt es jedoch nur wenig vorherigen Inhalt, auf den verwiesen werden kann. Selbst wenn viele kleine Dateien ähnlich aufgebaut sind, wird jede Datei zunächst einzeln betrachtet.
Für solche Fälle kann vorab ein Zstandard-Wörterbuch erstellt werden. Es enthält typische Bytefolgen, die aus vielen ähnlichen Dateien bekannt sind. Dadurch kann Zstandard bereits beim ersten Auftreten einer solchen Bytefolge einen kurzen Verweis verwenden.
Zum Entpacken wird dasselbe Wörterbuch benötigt. Bei normalen .zst-Downloads ist ein externes Wörterbuch jedoch üblicherweise nicht erforderlich.
Welche Dateien lassen sich gut komprimieren?
Wie klein eine komprimierte Datei wird, hängt von ihrem Inhalt ab.
Textdateien, Quellcode, Protokolldateien, Datenbankexporte und andere strukturierte Daten enthalten häufig viele Wiederholungen. Sie lassen sich deshalb meist gut komprimieren.
Formate wie JPEG, MP3, MP4 oder ZIP sind dagegen bereits komprimiert. Viele nutzbare Wiederholungen wurden darin schon entfernt. Eine zusätzliche Kompression mit Zstandard kann dann oft nur wenig Platz sparen.
Zstandard kann eine Datei also nicht grundsätzlich auf einen bestimmten Anteil ihrer ursprünglichen Größe reduzieren. Entscheidend ist, wie viel Redundanz die Daten enthalten.
Was ist der Unterschied zwischen ZST und ZIP?
Eine ZIP-Datei kann mehrere Dateien und Ordner enthalten. Sie ist ein Archiv und verwendet zusätzlich Kompression.
Zstandard ist dagegen in erster Linie ein Kompressionsverfahren für einen Datenstrom.
Aus einer einzelnen Datei wird beispielsweise:
Bericht.txt → Bericht.txt.zstNach dem Entpacken entsteht wieder Bericht.txt.
Eine gewöhnliche ZST-Datei verwaltet jedoch nicht selbst mehrere Dateinamen, Ordnerstrukturen und Dateiberechtigungen. Wenn mehrere Dateien gemeinsam verpackt werden sollen, wird Zstandard deshalb häufig mit TAR kombiniert.
Was ist eine TAR-Datei?
TAR fasst mehrere Dateien und Ordner zu einer einzigen Archivdatei zusammen. Es komprimiert die Daten normalerweise nicht.
Zuerst entstehen aus mehreren Dateien ein gemeinsames TAR-Archiv:
Bild.jpg
Text.txt
Dokumente/
↓
Archiv.tarAnschließend kann dieses Archiv mit Zstandard komprimiert werden:
Archiv.tar
↓
Archiv.tar.zstDie Endung .tar.zst beschreibt somit zwei aufeinanderfolgende Schritte:
- .tar bedeutet, dass mehrere Dateien und Ordner zusammengefasst wurden.
- .zst bedeutet, dass dieses TAR-Archiv mit Zstandard komprimiert wurde. Beim Entpacken geschieht der Vorgang in umgekehrter Reihenfolge. Zuerst wird die Zstandard-Kompression entfernt. Danach wird das TAR-Archiv geöffnet und die darin enthaltene Ordnerstruktur wiederhergestellt.
Eine .tar.zst-Datei ist deshalb kein völlig eigenständiges Archivformat. Sie ist ein mit Zstandard komprimiertes TAR-Archiv.
Warum wird Zstandard immer häufiger verwendet?
Zstandard bietet einen sehr guten Kompromiss aus Dateigröße und Geschwindigkeit.
Es kann Daten schnell komprimieren, sehr schnell entpacken und lässt sich über verschiedene Kompressionsstufen an unterschiedliche Anforderungen anpassen.
Das eignet sich besonders für Softwarepakete, Backups, Serverprotokolle, Datenbankexporte, Container, Systemabbilder und große Downloads.
Bei Downloads ist die schnelle Dekompression besonders wertvoll. Eine Datei wird möglicherweise nur einmal erstellt, anschließend aber auf Tausenden Geräten heruntergeladen und entpackt.
Der Anbieter kann deshalb etwas mehr Zeit in die Kompression investieren, während alle Empfänger von einer kleinen Datei und einem schnellen Entpackvorgang profitieren.
Zusammenfassung
Zstandard macht Dateien kleiner, indem es wiederkehrende Daten nicht jedes Mal vollständig speichert. Stattdessen verwendet es kurze Verweise und stellt häufig vorkommende Werte besonders kompakt dar.
Beim Entpacken werden diese Verweise ausgeführt und die ursprünglichen Daten exakt wiederhergestellt.
Zstandard entfernt also keine Informationen. Es findet lediglich eine platzsparendere Darstellung derselben Daten.
Genau diese Kombination aus guter Kompression und sehr schnellem Entpacken macht ZST zu einem zunehmend wichtigen Format für Software, Server und große Downloads.
Zstandard ist jedoch nicht das einzige Kompressionsverfahren. ZIP, GZIP, Brotli, LZ4 und XZ setzen andere Schwerpunkte. In Episode 2 vergleichen wir ihre Dateigröße sowie die Geschwindigkeit beim Komprimieren und Entpacken.### ZST-Dateien auf dem Mac öffnen
macOS kann .zst- und .tar.zst-Dateien nicht von Haus aus im Finder entpacken.
Mit unpackZST lassen sich beide Formate per Drag-and-drop öffnen — ohne Terminal und ohne zusätzliche Einstellungen.
Top comments (0)