W mojej aplikacji muszę kompresować logi, które są plikami tekstowymi.
Wydaje się, że bzip2
i gzip
mają ten sam współczynnik kompresji.
Czy to jest poprawne?
W mojej aplikacji muszę kompresować logi, które są plikami tekstowymi.
Wydaje się, że bzip2
i gzip
mają ten sam współczynnik kompresji.
Czy to jest poprawne?
Odpowiedzi:
Zwykle bz2 ma lepszy współczynnik kompresji w połączeniu z lepszymi funkcjami odzyskiwania.
OTOH, gz jest szybszy.
Mówi się, że xz jest nawet lepszy niż bz2, ale nie znam zachowania czasowego.
-1
nie jest tak bardzo powolny, ale przy ustawieniach domyślnych wydaje się być dość powolny.
Ostatnia aktualizacja witryny maximumcompression.com to czerwiec 2011 r. (Odpowiedź zaktualizowana w październiku 2015 r.)
Dlatego ta strona internetowa nie wspomina
o aktualnym kompresorze tekstowym na świecie :
cmix
Konkursy / Benchmarki:
cmix
nie jest zwycięzcą, ponieważ wymaga zbyt dużo pamięci RAM, więcej niż 20 GB)Szczegóły:
Byron Knoll aktywnie rozwija się cmix
jako oprogramowanie libre (GPL) od 2013 roku w oparciu o książkę Data Compression Explained autorstwa Matta Mahoneya . Matt Mahoney utrzymuje również niektóre z powyższych testów porównawczych i proponuje ZPAQ ( WP ), przyrostowy archiwizator wiersza poleceń.
Jeśli wolisz bardziej standardowe narzędzie (wymagające mniej pamięci RAM), polecam:
lrzip
lrzip
Jest to ewolucja rzip
przez Con Kolivas .
lrzip
oznacza dwie nazwy: Long Range ZIP i Lzma RZIP .
lrzip
jest często lepszy niż xz
(inne popularne narzędzie do kompresji).
Alexander Riccio również zaleca lrzip
.
Moim ulubionym jest:
zpaq
„Ekspert archiwum” , Matt Mahoney , intensywnie pracował nad PAQ algorytmów przez dziesięć lat i zapewniają najlepszy kompromis pomiędzy CPU / zasobów pamięci i poziomu kompresji.
Jednak ostatnia zpaq
wersja nie jest często spakowana / dostępna w ostatniej dystrybucji :-(
Zawsze kompiluję ją ze źródeł, kiedy mam nową maszynę i potrzebuję bardzo dobrego kompresora: https://github.com/zpaq/zpaq
clone https://github.com/zpaq/zpaq
cd zpaq
g++ -O3 -march=native -Dunix zpaq.cpp libzpaq.cpp -pthread -o zpaq
Być może mógłbyś rzucić okiem na te testy porównawcze , zwłaszcza część testującą kompresję plików dziennika .
Zrobiłem odniesienia do testu do kompresji, co następuje:
folder, 204MB (z plików HTML) 1600
wyników
7zip => 2.38 MB
winrar => 49.5 MB
zip => 50.8 MB
gzip => 51.9 MB
więc 7zip jest najlepszy spośród nich, można go uzyskać tutaj
http://www.7-zip.org/
bz2 ma ściślejszą kompresję, algorytm ma więcej opcji szukania redundancji do skompresowania.
gzip jest w znacznie większej liczbie narzędzi i jest bardziej wieloplatformowy. Więcej narzędzi systemu Windows może obsługiwać pliki .gz. Jest częścią http, więc nawet przeglądarki internetowe mogą to zrozumieć.
W systemie Linux istnieją narzędzia, które pozwalają bezpośrednio pracować na skompresowanych plikach. zgrep i bzgrep mogą wyszukiwać w skompresowanych plikach.
Jeśli tylko na Linuksie, użyłbym bzip2, dla nieco lepszych współczynników kompresji.
xz kompresuje znacznie lepiej niż bz2, ale zajmuje więcej czasu. Tak więc, jeśli Twoim celem jest maksymalna kompresja, a miejsce na dysku twardym jest na wagę złota (tak jest w moim przypadku, gdy jeden dysk jest zapełniony w 98% - podczas gdy reorganizuję systemy plików), możesz uruchomić skrypt, aby wykonać pracę - zrób sobie przerwę i wróć za 5 minut.
Unxz bardzo szybko rozpakowuje się z mojego doświadczenia - co jest dla mnie dobre na co dzień.
bz2 jest szybszy do kompresji niż xz, ale wydaje się, że nie osiąga wyników kompresji xz.
Jedynym sposobem na dokonanie tych ocen jest uruchomienie testów porównawczych dla mieszanki typowych plików, które normalnie skompresowałbyś / zdekompresowałeś i zmienił parametry, aby zobaczyć, co wychodzi na wierzch.