Który algorytm kompresji jest najbardziej wydajny między xz, gzip i bzip2?


16

Który algorytm kompresji zapewnia między xz, gzip i bzip2 najmniejszy rozmiar pliku i największą prędkość podczas kompresji dość dużych plików tar?


„najlepszy” jak w „co powoduje najmniejszy rozmiar pliku”?
Hennes

Nie wiem, próbowałem znaleźć odpowiedź na pytanie, aby dodać test. Nie mam też pojęcia, dlaczego ta sprawa została zamknięta. @Karan
Nathan2055

1
Och, dlaczego to było tak łatwe. „Najlepsze” jest wysoce subiektywne i zwykle prowadzi do dyskusji lub niekonstruktywnych odpowiedzi. Najlepszą kompresją może być najmniejszy rozmiar pliku, najszybsza kompresja, najmniejsze zużycie energii do kompresji (np. Na laptopie), najmniejszy wpływ na system podczas kompresji (np. Starożytne programy z pojedynczą ścieżką, wykorzystujące tylko jeden rdzeń), ... lub kombinacja wszystkich tych.
Hennes,

Ciekawym artykułem do przeczytania jest tomshardware.com/reviews/winrar-winzip-7-zip-magicrar,3436.html (oparty na systemie Windows i koncentrujący się na 7zip, magicRAR, WinRAR i WinZip zamiast xz, gz lub bz, ale wciąż interesujący i dostarczanie informacji ogólnych).
Hennes

@Hennes - posprzątałem post, aby jak najlepiej zastąpić dokładnie to, czego szukałem. Również dzięki za wspomniany artykuł przeczytam go dzisiaj.
Nathan2055 11.04.13

Odpowiedzi:


15

W teście warunków skrajnych skompresowałem 464 megabajty danych przy użyciu trzech wymienionych formatów. Gzip zwrócił plik 364 MB. Bzip2 zwrócił plik 315 MB. Xz zwrócił plik 254 MB. Zrobiłem również prosty test prędkości:

Kompresja:

1: Gzip

2: Xz

3: Bzip2 (w tym czasie mój wentylator dmuchał dość mocno, co wskazuje, że mój Athlon II był dość napięty)

Dekompresja:

1: Xz

2: Gzip

3: Bzip2

Należy pamiętać, że wszystkie te testy zostały wykonane z najnowszą wersją 7-Zip.

Xz jest najlepszym formatem dla dobrze zaokrąglonej kompresji, a Gzip jest bardzo dobry dla szybkości. Bzip2 jest przyzwoity ze względu na swój współczynnik kompresji, chociaż prawdopodobnie zamiast niego należy użyć xz.


2
Dobre badania. Czy wypróbowałeś różne opcje poziomu kompresji oferowane przez (przynajmniej) bzip2, np. bzip2 -9 <file>?
Aaron Miller,

@AaronMiller - Nie, czy można ich używać przez 7-Zip?
Nathan2055

Wydaje się, że tak, choć nie jestem pewien do jakiego stopnia: patrz dotnetperls.com/7-zip-examples , sekcja „Switch m”.
Aaron Miller

7
Z ciekawości, jakiego rodzaju danymi był plik testowy?
GeminiDomino,

Należy pamiętać, że różne typy danych będą powodować różne skompresowane rozmiary. Zobacz tutaj przykłady.
Ploni

4

Zrobiłem własny test porównawczy na obrazie vmdk instalacji Linuksa w wersji 1.1GB:

rar    =260MB   comp= 85s   decomp= 5s
7z(p7z)=269MB   comp= 98s   decomp=15s
tar.xz =288MB   comp=400s   decomp=30s
tar.bz2=382MB   comp= 91s   decomp=70s
tar.gz =421MB   comp=181s   decomp= 5s

wszystkie poziomy kompresji na maks., procesor Intel I7 3740QM, pamięć 32 GB 1600, źródło i miejsce docelowe na dysku RAM

Generalnie używam rar lub 7z do archiwizacji normalnych plików, takich jak dokumenty.
a do archiwizacji plików systemowych używam .tar.gz lub .tar.xz za pomocą rolki plików lub tar z opcjami -z lub -J wraz z --preserve, aby kompresować natywnie za pomocą tar i zachować uprawnienia (także alternatywnie .tar.7z lub można użyć .tar.rar)

aktualizacja: ponieważ tar zachowuje tylko zwykłe uprawnienia, a nie listy ACL, również można użyć zwykłego .7z oraz kopii zapasowych i przywracania uprawnień i list ACL ręcznie za pośrednictwem getfacl i sefacl, co wydaje się być najlepszą opcją zarówno do archiwizacji plików, jak i tworzenia kopii zapasowych plików systemowych, ponieważ będzie pełna zachować uprawnienia i listy ACL, ma sumę kontrolną, test integralności i możliwość szyfrowania, jedyną wadą jest to, że p7zip nie jest dostępny wszędzie


Student, jakie były opcje rar? Dlaczego nie wypróbować lrzip przez kolivas , powinien on dobrze działać w przypadku obrazów dysków wirtualnych.
osgx

Przeprowadzam migrację z RAR do Git i tarballi na moje pliki tekstowe i btrfs na wszystko inne; moim powodem używania RAR nie jest wydajność, używam go z powodu takich funkcji, jak rekord odzyskiwania, osobna 256-bitowa suma kontrolna na poziomie pliku dla każdego pliku i ...
Sudoer

3

Myślę, że ten artykuł zapewnia bardzo interesujące wyniki.

http://pokecraft.first-world.info/wiki/Quick_Benchmark:_Gzip_vs_Bzip2_vs_LZMA_vs_XZ_vs_LZ4_vs_LZO

Najbardziej wydajnymi formatami są xz i lzma, oba z przekazanym parametrem -e.

Najszybszym algorytmem są zdecydowanie lzop i lz4, które mogą wytworzyć poziom kompresji niezbyt daleko od gzip w 1,3 sekundy, podczas gdy gzip zajął 8,1 sekundy. Współczynnik kompresji wynosi 2,8 dla lz4 i 3,7 dla gzip.

Oto kilka wyników, które wyodrębniłem z tego artykułu:

  • Gzip: 8,1 s przy 3,7

  • lz4: 1,3 s przy 2,8

  • xz: 32,2s przy 5,43

  • xz -e: 6m40 przy 7,063

  • xz: 4m51s przy 7,063

Więc jeśli naprawdę desperacko potrzebujesz prędkości, lz4 jest niesamowity i nadal zapewnia współczynnik kompresji 2.8.

Jeśli desperacko potrzebujesz zaoszczędzić bajt, xz przy maksymalnym poziomie kompresji (9) wykonuje najlepszą robotę dla plików tekstowych takich jak źródło jądra. Jest jednak bardzo długi i zajmuje dużo pamięci.

Dobrym, gdy jest to potrzebne, aby zminimalizować wpływ na czas ORAZ przestrzeń, jest gzip. To jest to, którego użyłbym do ręcznego codziennego tworzenia kopii zapasowych środowiska produkcyjnego.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.