LZ4 1.10: eine Kompressionsbibliothek am Rand der Speicherbandbreite
Zusammenfassung
LZ4 ist eine offene Bibliothek fuer verlustfreie Kompression, gebaut fuer Wege, auf denen Daten nicht warten koennen: mehr als 500 MB je Sekunde pro Kern beim Packen, beim Entpacken einige GB je Sekunde pro Kern, was meist an die Speicherbandbreite stoesst. Das Verhaeltnis wird geopfert, gekauft wird eine Verzoegerung, die in den laufenden Betrieb passt; Fassung 1.10.0 macht Mehrkernigkeit zur unterstuetzten Eigenschaft.
Empfehlen- Name
- LZ4
- Version
- 1.10
- Preis
- Kostenlos
- Open Source
- Open Source
- Betriebssystem
- WindowsmacOSLinux
- Webseite
- https://lz4.github.io/lz4/
- Aktualisiert
- 2026-10-06 15:42
Wenn Geschwindigkeit alles ist
Eine Datenbank, die ihr Protokoll schreibt, eine Warteschlange, die Rahmen weiterreicht, eine Spielmaschine, die Inhalte von der Platte zieht — auf diesen Wegen koennen die Daten nicht sitzen und warten, bis ein Packer nachgedacht hat. Genau fuer diesen Moment wurde diese Bibliothek gebaut. Sie ist eine offene Bibliothek fuer verlustfreie Kompression, die auf einem einzelnen Kern mehr als 500 MB je Sekunde packt und beim Entpacken einige GB je Sekunde pro Kern erreicht, was in der Praxis heisst: die Grenze ist die Speicherbandbreite, nicht der Algorithmus.
Der Tausch wird klar benannt: das Verhaeltnis wird hergegeben, und zurueck kommt eine Verzoegerung, die niedrig genug ist, um in einem laufenden Weg zu sitzen. Das ist der ganze Entwurf, und es erklaert, warum die Bibliothek an Stellen auftaucht, an denen niemand die gesparten Platten nachzaehlt.
Schnell, mit einer Reserve
Es gibt weiterhin Tage, an denen das Verhaeltnis mehr zaehlt als die Uhr. Eine Variante mit hoher Kompression gibt mehr Rechenzeit fuer ein besseres Ergebnis aus, und die Woerterbuch-Kompression steht sowohl ueber die Schnittstelle als auch auf der Kommandozeile bereit; bei kleinen Dateien, in denen die Vorgeschichte in einem Puffer zu kurz ist, ist es das Woerterbuch, das die Zahlen anstaendig macht.
Die Fassung 1.10.0, im Untertitel die Mehrkern-Ausgabe, macht Nebenlaeufigkeit zur eigentlichen Eigenschaft: unter Windows ist sie voreingestellt an, die Zahl der Faeden wird ueber eine Umgebungsvariable gesetzt, und die Woerterbuch-Schnittstelle ist von Versuch zu fest geworden. Die Formvorschrift ist oeffentlich, Rahmen- und Blockformat sind ausfuehrlich beschrieben, und Bindungen gibt es fuer die meisten Sprachen, zu denen man greifen wuerde.
Der unsichtbare Baustein
Die Lizenz ist eine BSD-Lizenz mit zwei Klauseln, der Einbau in ein kommerzielles Produkt bringt also keine Lizenzarbeit mit sich. Diese Freiheit ist der Grund, warum sie schon lange kein Kompressionswerkzeug mehr ist: Datenbanken, Dateisysteme, Kernteile und Archivformate betten sie direkt ein, und das Bibliothekspaket ist in den Repositorien der Verteilungen ein bekannter Anblick. Fuer Entwickler liegt sie naeher an einer Grundlage als an Software — man ruft eine Funktion auf, der Nutzer erfaehrt den Namen nie, und bemerkt wird nur, dass es schnell ist.
Was sie nicht ist, verdient dieselbe Klarheit. Sie erzeugt nicht die kleinste Datei; geht es um Bandbreite oder Plattenplatz, gewinnt ein schwererer Algorithmus und sollte auch genommen werden. Sie ist kein Sicherungsformat, kein Archivverwalter und nichts, womit ein Mensch umgeht. Ihre Aufgabe ist, im Programm eines anderen zu verschwinden.
Eine Messung ehrlich lesen
Solche Zahlen laden zum Missbrauch ein, deshalb gehoert dazu, was sie bedeuten. Ein Durchsatz auf einem Kern beschreibt den Algorithmus, nicht Ihre Anwendung: echte Wege haben Kopien, Sperren, Netzsprunge und Umsetzung dabei, und sobald Daten durch eine Verbindung gehen, schrumpft der Vorsprung des Packers. Ehrlich bewertet man, indem man den Weg misst, den man wirklich faehrt, und ehrlich waehlt man, indem man zuerst fragt, ob der Engpass die Zeit oder der Platz ist.
Wie sie in einem echten Projekt gewaehlt wird
Die Entscheidung ist selten ein Wettbewerb zwischen Bibliotheken. Sie kommt meist als ein Satz in einer Entwurfsrunde: das Protokoll muss nicht klein sein, es muss geschrieben sein, bevor die naechste Transaktion bestaetigt wird. Sobald das die Anforderung ist, ist die Debatte vorbei, denn die Kandidaten mit den kleineren Dateien sind genau die, die in der verfuegbaren Zeit nicht fertig werden.
Der Einbau ist entsprechend bescheiden: ein Puffer hinein, ein Puffer hinaus, dazwischen ein Rahmenformat, das andere Werkzeuge schon verstehen — ein stiller Vorteil einer oeffentlichen Vorschrift, denn eine heute geschriebene Datei laesst sich von einem Programm in einer anderen Sprache lesen. Wenn etwas schiefgeht, ist es meist eine Groesse oder eine Fassung, die nicht passt, und kein Raetsel; um drei Uhr morgens ist das viel wert.
Wo die Obergrenze wirklich liegt
Es lohnt die Wiederholung: die Obergrenze ist die Maschine, nicht der Algorithmus. Speicher und Platte sind so schnell geworden, dass ein Packer dieser Art einen guten Teil seiner Zeit damit verbringt, auf Bytes zu warten; weiter zu schieben braechte also weniger, als es aussieht. Der Rest des Spielraums liegt im umgebenden Programm, nicht in dieser Bibliothek.
Das erklaert auch die Form des Projekts ueber die Jahre. Die interessante Arbeit ist vom schnelleren Kern zum leichteren richtigen Benutzen gewandert: Nebenlaeufigkeit, eine stabile Woerterbuch-Schnittstelle, Formate so beschrieben, dass eine zweite Umsetzung moeglich ist. Bei einer Grundlage sind langweilig und verlaesslich dasselbe Lob.
Beim Packen ging es immer um Geschwindigkeit gegen Verhaeltnis, und diese Bibliothek drueckt die Waage ganz auf die Seite der Geschwindigkeit und verteidigt die Stelle mit einer freizuegigen Lizenz und ueber zehn Jahren stetiger Pflege. Wo Bandbreite oder Platte gespart werden soll, ist sie nicht die beste Antwort; wo Zeit gespart werden soll, ist sie fast immer der erste Kandidat.