Znam gzip od lat, ostatnio widziałem, jak bzip jest używany w pracy. Czy są one zasadniczo równoważne, czy też są znaczące zalety i wady jednego z nich w stosunku do drugiego?
Znam gzip od lat, ostatnio widziałem, jak bzip jest używany w pracy. Czy są one zasadniczo równoważne, czy też są znaczące zalety i wady jednego z nich w stosunku do drugiego?
Odpowiedzi:
Gzip i bzip2 są funkcjonalnie równoważne. (Był kiedyś bzip, ale wydaje się, że całkowicie zniknął z powierzchni świata.) Inne popularne formaty kompresji to zip, rar i 7z; te trzy wykonują zarówno kompresję, jak i archiwizację (pakowanie wielu plików w jeden). Oto niektóre typowe oceny pod względem szybkości, dostępności i typowego współczynnika kompresji (zauważ, że te oceny są nieco subiektywne, nie traktuj ich jako ewangelii):
decompression speed (fast > slow): gzip, zip > 7z > rar > bzip2
compression speed (fast > slow): gzip, zip > bzip2 > 7z > rar
compression ratio (better > worse): 7z > rar, bzip2 > gzip > zip
availability (unix): gzip > bzip2 > zip > 7z > rar
availability (windows): zip > rar > 7z > gzip, bzip2
Jak widać, nie ma wyraźnego zwycięzcy. Jeśli chcesz polegać na programach, które prawdopodobnie zostaną już zainstalowane, użyj zipa w systemie Windows (lub, jeśli to możliwe, samorozpakowujących się archiwów, ponieważ Windows nie jest dostarczany z żadnym z nich) i gzip na Uniksie. Jeśli chcesz maksymalnej kompresji, użyj 7z.
Rar ma również wadę, o ile mi wiadomo, nie ma wolnego oprogramowania, które tworzy archiwa rar lub które mogłoby rozpakować wszystkie archiwa rar. Inne formaty mają darmowe wdrożenia i nie mają (poważnych) roszczeń patentowych.
bzip
zniknął, ponieważ korzystał z opatentowanego kodowania algorytmicznego. Ze względu na patent został przeprojektowany, aby zamiast niego używać kodowania Huffmana. Podczas tego przeprojektowywania dodano nowe funkcje i ulepszenia. Podstawowa rzecz, która czyni go unikalnym algorytmem kompresji, transformacja Burrowsa-Wheelera, pozostała taka sama w obu wersjach.
O ile wiem, gzip jest ogólnie szybszy, podczas gdy bzip ogólnie zapewnia lepszą (mniejszą) kompresję.
Algorytmy mają różne kompromisy czasowe, pamięciowe i przestrzenne. Pamiętaj, że te algorytmy zostały napisane już dawno temu, a Twój smartfon ma wiele razy więcej procesora niż komputery stacjonarne tamtych czasów.
Możesz wybrać między uniwersalnością (.gz) a nieco większą kompresją (.bz2). Tylko Ty możesz powiedzieć, na czym Ci zależy.
Jedną z zalet .gz jest to, że może kompresować strumień - sekwencję, w której nie można się obejrzeć. To sprawia, że jest to oficjalny kompresor strumieni HTTP. Musiałem raz użyć gzip z tego powodu, ale mało prawdopodobne, że będziesz musiał o tym pomyśleć.
Oto lista witryn testujących algorytmy kompresji. Aby znaleźć tylko bzip i gzip, musisz wykonać kopanie, ale większość witryn będzie zawierać listę cech algorytmów. W ten sposób możesz porównać to, co jest dla Ciebie ważne, rozmiar (współczynnik kompresji), czas, pamięć, procesor.
http://www.maximumcompression.com/benchmarks/benchmarks.php
Z mojego doświadczenia wynika, że bzip oferuje konsekwentnie lepsze współczynniki kompresji niż gzip. Plus z 7zip jako menedżerem i algorytmem bzip, 7zip może korzystać z procesorów wielordzeniowych.
Według http://tukaani.org/lzma/benchmarks.html gzip kompresuje się dwa razy szybciej niż bzip2, a dekompresuje dziesięć razy szybciej.
Np. Do użytku z buforowaniem s3, na travis itp., Gdzie chcesz prędkości kompresji / dekompresji, a nie tylko małych rozmiarów, gzip może być dobrym kompromisem.