7zip
Domovská stránka programu je www.7-zip.org, vlastní projekt je umístěn na Source Forge, kde najdete i jeho portabilní verzi.
7zip je zajímavý ze dvou hledisek:
- Umí velmi dobře komprimovat data. Algoritmus LZMA dosahuje nejvyššího mně známého kompresního poměru.
- Je to všeuměl, který si kromě vlastního formátu 7Z umí poradit i se soubory RAR, CAB, ZIP, GZIP, TAR, BZIP2, RPM, DEB, CPIO, ARJ. Formáty RAR, CAB, ARJ, DEB, RPM umí však pouze rozbalovat.
Použité algoritmy
Nativní algoritmus 7-zipu je modifikace Lempel-Ziv metody nazývaná LZMA. Program implementuje i metody převzaté z jiných programů. Za zmínku stojí modifikace metody PPMd převzaté ze stejnojmenného programu. Tato metoda má poskytovat výborné výsledky při komprimaci textových souborů.
Druhá metoda, která stojí za zmínku, je Deflate64. Deflate64 je vylepšením metody Deflate, která je známá především z rodiny komprimačních programů odvozených od PKZIPu 2.0. Tato metoda se používá jako preferovaná u zip archivů s rozšířením zip64, v dnešní době se však ona ani takto rozšířené archivy prakticky nepoužívají. 7zip tak nabízí jediný možný prostředek k jejímu otestování v prostředí UNIXu.
Třetí věcí, která mne zaujala, je preprocesor. Každý kvalitnější komprimační program, např. rar nebo ace, obsahuje několik preprocesorů, které po auto detekci vstupního formátu data upravují do lépe komprimovatelného tvaru. Obyklé jsou preprocesory pro obrazová, zvuková či textová data. 7-zip nic takového sice nemá, ale má dva preprocesory pro komprimaci Intel binárek. Jednoduší verze BCJ upravuje CALL a JUMP instrukce, rožšířená verze BCJ2 přidává navíc instrukci JCC.
Test č. 1 – zdrojové texty
Při komprimaci zdrojových textů je nejdůležitější maximalizovat kompresní poměr, abychom následně minimalizovali počet přenesených dat po síti a výdaje s tím spojené. Doba komprese v tomto případě nehraje moc velkou roli. Uživatelé však musí mít možnost dekomprimovat námi zabalené archivy na různých platformách. Open Source komprimační program je v tomto případě holou nutností.
Uživatelé jsou ale často velmi konzervativní. Ze své zkušenosti mohu potvrdit, že při nabídce jednoho programu v několika formátech (gzip, rzip, bzip2) si vybírají tradiční gzip, i když bzip2 je dnes nainstalován na každém Linuxu. Poté, co jsem nabídku gzipů zrušil, počet downloadů se snížil a zvýšil se až poté, co jsem tam gzipy vrátil.
postgresql 7.4.1 tarball 36444160 bajtu
program | čas (sec) | spotřeba paměti v KB | výsledná velikost |
gzip –6 default | 37 | 860 | 8238797 128% |
gzip –7 | 46 | 856 | 8200570 128% |
7z -tzip -mm=Deflate64 | 166 | 4076 | 7100731 111 |
7z -mx=1 fast | 79 | 3588 | 6936458 108 |
bzip2 –9 default | 101 | 7200 | 6407883 100% |
rzip –6 default | 89 | 77828 | 5905714 92% |
7z -m0=PPMd:mem=24 | 65 | 20472 | 5743255 89 |
7z -m0=PPMd:mem=25 | 64 | 36940 | 5799877 90 |
7z -m0=PPMd:mem=26 | 65 | 69740 | 5841941 91 |
rar -m4 -md4096 | 90 | 52152 | 5374120 84% |
7z -mx=5 default | 524 | 28024 | 4746513 74% |
7z -mx=7 max | 929 | 86608 | 4553791 71 |
7z -mx=9 extreme | 4569 | 343MB | 4424120 69 |
Přepínač –7 je poslední u gzipu, který se ještě vyplatí. Vyšší stupně komprese podstatně prodlouží čas komprimování, a tak je lepší použít místo gzipu bzip2, který to zvládne lépe a rychleji. U Bzipu2 jsou nižší stupně komprese výhodné jen při nedostatku operační paměti. 7zip dosahuje o stupeň lepšího komprimačního poměru ve srovnání s RARem, je však o dost pomalejší. Pomalost 7zip je pravděpodobně hlavním důvodem, proč je ve warez komunitě doposud preferován Rar3. 7zip v režimu fast se nevyplatí, místo toho je lepší použít bzip2 a nekomplikovat si život s 7z formátem. Zajímavé je, že čas metody PPMd je konstantní a nezávisí na nastavené velikosti dictionary size. Metoda Deflate64 ukázala, že ostatním metodám dnes již nestačí.
Test č. 2 – filesystém dump
Filesystémové dumpy se obvykle komprimují přes pipe. Pokud program tuto možnost neposkytuje (7z, rzip), stává se pro tento účel nepoužitelným. Komprimační program navíc musí být natolik rychlý, aby se na něj nemuselo při zálohování zbytečně čekat. V praxi se zálohování optimalizuje za účelem dosažení co nejkratší zálohovací doby, nikoliv minimálního objemu uložených dat. Komprimace se provádí především proto, aby se data vešla na požadovaný nosič. Různé druhy páskových zálohovacích zařízení umějí provádět vlastní kompresi. Kompresní poměr bývá 2:1.
Nekomprimovaná velikost 55521280
program | čas (sec) | spotřeba paměti v KB | výsledná velikost |
gzip –7 | 111 | 884 | 20420529 114 |
bzip2 –9 | 148 | 7184 | 17924456 100 |
rzip –6 | 132 | 96464 | 15877056 89 |
7z -m0=PPMd:mem=26 | 282 | 69720 | 15283004 85 |
rar -m4 -md4096 | 197 | 43928 | 13975960 78 |
7z -mx=5 | 500 | 28000 | 12778160 71 |
Test č. 3 – pgsql databázový dump
Tato databáze neobsahovala žádné položky typu řetězec. Soubor obsahoval pouze čísla v ascii kódování. Nekomprimovaná velikost 98072648 Bajtů.
Jak probíhá zálohování databází v praxi
Výše zmíněná databáze o cca dvou milionech řádků zabírá na disku 189 MB. Její dump má však velikost pouze 98 MB. Dumpovat indexy není potřeba, ty lze znovu jednoduše vytvořit po importu dat. Každá řádka navíc obsahuje kromě vlastních dat také interní databázové struktury, jejichž overhead je značný, zejména pokud ukládáme krátké řádky. Numerické řádky jsou krátké. Databáze navíc obsahují transakční žurnály a temporary tablespace, které se rovněž nedumpují. V našem případě do velikosti nejsou započítány. Jejich velikost je minimálně dalších 50 MB. Takže provedením dumpu zmenšíme objem dat v poměru o něco větším než 2:1. Tato data se pak zakomprimují, což jak dále uvidíte, jde velmi snadno. Obyčejný gzip je smrskne v poměru 10:1. Já doporučuji používat k jejich kompresi rar. Kromě lepšího komprimačního poměru 20:1 umí přidávat do archivu media recovery data, která se používají v případě chyb při čtení. Výsledkem akce jsou data slisovaná v poměru více než 40:1. Tento objem dat lze již bez problémů napálit na DVD. Právě jste si přečetli další díl mého seriálu o databázích mírně ztrátově zkomprimovaný.
program | čas (sec) | spotřeba paměti v KB | výsledná velikost | komp. poměr |
gzip –7 | 28 | 824 | 7475305 | 13.11 |
rzip –6 | 84 | 137896 | 6766400 | 14.49 |
7z -mx=5 | 514 | 27864 | 6002845 | 16.33 |
7z -mx=7 | 1047 | 27864 | 5748889 | 17.05 |
7z -m0=PPMd:mem=26 | 89 | 52484 | 4966140 | 19.74 |
bzip2 –9 | 64 | 86332 | 4919690 | 19.93 |
rar -m4 -md4096 | 142 | 51884 | 4511392 | 21.73 |
Tady se již PPMd algoritmus hezky vytáhl. Osobně jsem byl překvapen těsným rozdílem bzip2/rar, který bývá většinou mnohem větší.
Dekomprese
program | čas | paměť |
rar | 53 | 25284 |
7z | 20 | 5224 |
bzip2 | 21 | 4264 |
Závěr
Ve warez komunitě 7zip moc velký úspěch nezaznamenal. Uvidíme, jak si povede v Open Source komunitě. Komprimační poměr má výborný. Bohužel je ve srovnání s bzipem2 při komprimaci o dost pomalejší. Jak se říká, není růže bez trní. Své místo by však určitě našel při distribuci velkých balíků, jako např: Open Office, Mozilla, Firebird, Linux kernel, protože tam doba komprese není tak podstatná a v dekompresi se bzipu2 vyrovná.