# Lempel-Ziv-Oberhumer

Lempel-Ziv-Oberhumer (kurz LZO) ist ein Algorithmus für verlustfreie Allzweck-Datenkompression, der eine vergleichsweise hohe Geschwindigkeit beim Entpacken erreicht. Es ist ein Wörterbuch-Algorithmus, der von Markus Franz Xaver Johannes Oberhumer auf Basis der Entwicklungen von Abraham Lempel und Jacob Ziv entwickelt wurde.
Eine frühe Variante des Algorithmus wurde erstmals im März 1996 in den Internet-Newsgroups „comp.compression“ und „comp.compression.research“ veröffentlicht.

## Merkmale

Der Algorithmus ist für den Echtzeit-Einsatz ausgelegt und verzichtet auf eine höhere Packrate zugunsten von höchsten Verarbeitungsgeschwindigkeiten. Des Weiteren bietet diese Bibliothek asymmetrische Eigenschaften mit Einstellungen für gründlichere Komprimierung bei gleichbleibender Dekomprimierungsgeschwindigkeit. Weitgehend unabhängig von den Kompressoreinstellungen liefert der Dekompressor typischerweise ein Vielfaches des Datendurchsatzes von gzip.
Die Kompression hat je nach Einstellung zwischen 8 über normalerweise 64 bis hin zu 256 kBytes an Speicherbedarf. Daten werden von LZO in Blöcken à 256 kBytes abgearbeitet.

## Einsatz

Die Referenzimplementierung ist eine kleine (~5 kB), in ISO/ANSI-C geschriebene, threadsichere Programmbibliothek und ein darauf aufbauendes Werkzeug namens lzop („the Lempel-Ziv-Oberhumer Packer“), das sich bis auf wenige Details wie gzip verhält. Beide werden als freie Software auch im Quelltext unter den Bedingungen der GNU General Public License verbreitet. Neben der C-Implementierung der Bibliothek gibt es auch Implementierungen in Perl, Python und Java. Sie ist plattformunabhängig implementiert und wurde auf einer großen Anzahl unterschiedlichster Plattformen erfolgreich kompiliert und betrieben. Unter allen populären Linux-Distributionen kann sie mit der integrierten Paketverwaltung direkt aus den Standard-Paketdepots installiert werden. lzop kann mit der GNU-Implementierung von tar ab Version 1.21 vom 27. Dezember 2008 mit einer eigens geschaffenen Option (--lzop) direkt aus dem Programm heraus verwendet werden. In UPX ist LZO-Komprimierung als Standard-Algorithmus integriert. In Apaches Hadoop-Framework kann LZO-Komprimierung mit einem Zusatzmodul eingebunden werden. Bei vielen komprimierenden Dateisystemen wie btrfs, ZFS und UBIFS kommt LZO zum Einsatz oder ist eine der verfügbaren Optionen. Software wie OpenVPN kann ihre Datenübertragungen durch Rechnernetze mit LZO komprimieren. Der Linux-Kernel unterstützt LZO.
In vielen Fällen kann die LZO-Komprimierung wesentlich schneller sein als der Datendurchsatz anderer Glieder der Verarbeitungskette, sodass der zusätzliche Einsatz im Endeffekt zu einem Leistungsgewinn führt, da die Entlastung der schwächeren Kettenglieder durch vorherige Reduzierung des Datenaufkommens mittels LZO mehr Aufwand einsparen als die LZO-Kompression benötigt. Beispielsweise ist LZO vielfach schneller als gebräuchliche Verschlüsselungsalgorithmen. Besonders gewinnbringend wirkt eine solche (natürlicherweise inhaltsabhängige) Einsparung, wenn ein Flaschenhals entsteht, da andere Glieder der Verarbeitungskette auf das schwächste Glied warten müssen. Da LZO-Dekompression in der Regel deutlich schneller ist als Festplattenlesegeschwindigkeit, können beispielsweise durch den Einsatz von UPX Programmstarts beschleunigt werden.