====== LZ4: Šampion v rychlosti komprese ====== **LZ4** vytvořil Yann Collet (který stojí i za algoritmem ZSTD) v roce 2011. Jeho hlavní filozofií je, že dekomprese by měla probíhat rychlostí blízkou limitům propustnosti paměti RAM. ===== 1. Princip fungování (Byte-oriented LZ77) ===== LZ4 pracuje na principu vyhledávání duplicitních sekvencí v datech pomocí posuvného okna (sliding window). * **Literály:** Pokud algoritmus nenajde shodu, zapíše data přímo jako "literál". * **Reference (Match):** Pokud najde stejnou sekvenci, kterou už viděl, zapíše pouze dvojici **(offset, length)** – tedy informaci "vrať se o X bajtů zpět a zkopíruj Y bajtů". ==== Proč je tak rychlý? ==== * **Žádná entropická komprese:** Na rozdíl od [[ZFS|GZIP]] nebo ZSTD, LZ4 nepoužívá Huffmanovo kódování ani aritmetické kódování na konci procesu. To dramaticky snižuje zátěž [[CPU]]. * **Optimalizace pro moderní CPU:** Formát dat je navržen tak, aby minimalizoval větvení v kódu (branching) a umožnil efektivní využití instrukcí procesoru. ===== 2. Klíčové vlastnosti ===== * **Extrémní dekomprese:** Rychlost dekomprese často dosahuje několika GB/s na jedno jádro procesoru. * **Asymetrie:** Komprese je o něco pomalejší než dekomprese, ale stále patří k nejrychlejším na trhu. * **Paralelizace:** LZ4 lze snadno rozdělit do bloků a komprimovat/dekomprimovat více vlákny současně. ===== 3. Praktické využití ===== ==== Souborové systémy a úložiště ==== V systémech jako **[[ZFS]]** nebo Btrfs je LZ4 často výchozím kompresním algoritmem. * **Zvýšení výkonu:** Paradoxně může zapnutí LZ4 zrychlit zápis na pomalé disky. Procesor data zkomprimuje tak rychle, že na disk se fyzicky zapisuje méně dat, což trvá kratší dobu než zápis nekomprimovaných dat. ==== Linux Kernel ==== * **zRam / zSwap:** Linux používá LZ4 pro kompresi dat v paměti RAM, čímž efektivně zvětšuje dostupnou paměť za cenu minimální režie CPU. * **Bootování:** Jádro Linuxu zkomprimované pomocí LZ4 se načítá nejrychleji ze všech dostupných metod. ==== Big Data a Sítě ==== * Používá se v protokolech jako **Apache Cassandra**, **Hadoop** nebo při přenosu dat v reálném čase, kde je latence kritickým faktorem. ===== 4. Srovnání výkonu ===== ^ Algoritmus ^ Rychlost komprese ^ Rychlost dekomprese ^ Kompresní poměr ^ | **LZ4** | 10/10 (Extrémní) | 10/10 (Extrémní) | 4/10 (Nízký) | | **ZSTD** | 7/10 (Vysoká) | 8/10 (Velmi vysoká) | 8/10 (Vysoký) | | **GZIP** | 3/10 (Pomalá) | 6/10 (Střední) | 7/10 (Vysoký) | --- > **Zajímavost:** Existuje i varianta **LZ4_HC** (High Compression), která obětuje rychlost komprese (stává se mnohem pomalejší), aby dosáhla lepšího kompresního poměru, ale zachovává si bleskovou rychlost dekomprese. Je ideální pro data, která se "jednou zapíšou a často čtou". //Související: [[ZFS]], [[Linux]], [[I/O]], [[JavaScript]]//