Kompresja danych (zip,gzip,bzip2,lzma,7z)

Dziś chciałem spakować trochę plików aby nie zajmowały miejsca. Był to „projekt” badawczy, polegał na sprawdzeniu jaka kompresja jest najlepsza. Praktycznie nie ma to znaczenia bo zawsze można dokupić kolejne 500GB dysku ale aby zaspokoić swoją ciekawość wykonałem test.

Procedura

Test postanowiłem wykonać na plikach tekstowych. Mając dane, uruchamiałem poszczególne polecenia sprawdzając jak długo trwały, oraz jaki był wynik testu.

Pliki tekstowe

Nasz katalog to „data”, zawiera w sobie 168MB danych w plikach tekstowych. Aby skompresować dane do ariwum gzip, bzip2, lzma należy wcześniej utworzyć plik tar

tar -cvf data.tar data

Na moim kompie zajmuje to ok 1.5 sekundy.

Czasy wykonywania kompresji

zip: 4.073s
gzip: 4.770s*
7z: 45.191s
bzip2: 58.270s*
lzma: 1m31.994s*

*-trzeba doliczyć 1.5 sekundy na stworzenie pliku tar.

Objętość i poziom kompresji

Jak widać zip jest najszybszy jeżeli chodzi o operacje, a oto ile zajmują skompresowane pliki.
Nazwa/objętość/kompresja

data.7z		6M	96,3%
data.tar.bz2	9M	94,44%
data.tar.gz  	22M	86,42%
data.tar.lzma	5,6M	96,54%
data.zip      	26M	83,95%

Z analizy danych wynika, że najlepszą kompresję uzyska się stosując 7z. Plik jest prawie najmniejszy, a czas kompresji jest znacznie krótszy niż przy użyciu lzma (który uzyskał lepszą kompresję).

Podsumowanie

7z rządzi :). Od dziś w aplikacjach będę korzystał tylko z tego kompresora :)

 

Tagi: , ,

Komentarze: 6 do “Kompresja danych (zip,gzip,bzip2,lzma,7z)”

  1. 1 Lame

    LAME !

  2. 2 ja

    Co to za szajs? Chyba nie wiesz co piszesz. To są rzetelnie zmierzone czasy kompresji, chłopaczku?

  3. 3 Mateusz Żeromski

    Witam Ciebie @ja, szkoda że nie masz odwagi podpisać się imieniem i nazwiskiem pod swoją wypowiedzią – sam widzisz, że jest na dość niskim poziomie, szkoda że odwiedziłeś tego bloga – piszę dla ludzi inteligentnych.

    Jakbyś zrozumiał artykuł to byś zauważył że:
    1. Czasy: Piszę o różnicach rzędu wielkości czyli 10 a 100, 1 a 10, nie jest istotne czy 4.073 albo 4.077 bo jest to o rząd wielkości mniej niż 45.191, 58.270 – W tych przypadkach nie ma już znaczenia co kompresujesz – jest różnica o rząd wielkości, dokładność nie ma tutaj znaczenia. Poczytaj mojego bloga – zobacz artykuł http://blog.zeromski.com.pl/2008/12/mysql-tabele-tymczasowe-optymalizacja-zapytan/, czy tu też czasy są nierzetelne? Operacje jakie były wykonywane w okolo 0.60 s, skróciłem do 0.05 – czy ma znacznie czy to bylo 0.65, 0.67 albo 0.054, 0.056 ? Jeżeli dla Ciebie ma to gratuluje – pokaż swojego bloga i udowodnij, że nieznaczne różnice mają znaczenie.
    Jeżeli umiesz wykonać polecenia 7z, tar, zip itp – wykonaj test i się przekonaj jakie są wyniki – jak osiągniesz inne różnice – tzn 7z będzie gorszy – to napisz konkretnie a nie byle jak, nie wzoruj się na Polskich politykach…

    2. Objętości: Wyniki mówią same za siebie – zobacz, sytuacja podobna jak wyżej, tylko mniejsze są różnice z powodu technologii, tu już nie ma znaczenia maszyna – tylko algorytm. Dla Ciebie chyba powinienem podać rozmiar w bajtach…

    3. Testy były przeprowadzane na nie obciążanej maszynie – do każdego kompresowania były używane te same dane wejściowe

    Drodzy czytelnicy @ja jest osobą którą nie objęła reforma wprowadzenia gimnazjum do szkół – bo dopiero od tego momentu uczyli ludzi czytać ze zrozumieniem.

  4. 4 inny ja


    Drodzy czytelnicy @ja jest osobą którą nie objęła reforma wprowadzenia gimnazjum do szkół – bo dopiero od tego momentu uczyli ludzi czytać ze zrozumieniem.

    Taki komentarz jest nie na miejscu. Nie sądzę, żebyś miał poparcie takiej tezy. Równie dobrze mógłbyś napisać, że właśnie wprowadzenie gimnazjów doprowadziło do spadku poziomu zrozumienia czytanego tekstu – i byłaby to taka sama bzdura.
    Skoro uważasz, że wprowadzenie gimnazjów było dobrym pomysłem, to Twoja sprawa, ale nie krytykuj poprzednich systemów, jeśli ich nie znasz.

    Co do artykułu, to nie jest on zbyt odkrywczy. Na przyszłość polecałbym bardziej szczegółowo opisywać metodologię badań, np. sposób pomiaru czasu trwania. Tak przedstawione doświadczenie nie ma zbyt wielkiej wartości.

    Sam 7-zip w swoim formacie 7z ma 4 metody kompresji: Deflate, Deflate64, BZip2 i LZMA. Której z nich użyłeś? Jakie parametry podawałeś do narzędzi kompresujących. Jakie były parametry maszyny służącej do testów?

    Jako uzupełnienie artykułu podaję link:
    http://grandtrunk.net/compression/

  5. 5 Mateusz Żeromski

    @inny ja
    1. Jak był mierzony czas?
    Dokładnie tak jak tutaj
    http://en.wikipedia.org/wiki/Time_(Unix)
    time [options] command [arguments...]

    2. Sposób 7z – standardowy 7z – dokładnie nie wiem, ale czy to ma znaczenie?

    3. Czy tekst jest odkrywczy – nie sądzę, jest to tylko udowodnienie iż jest cos o wiele lepszego od zipa. W przypadku bardzo duzych zbiorów plików – lepiej jest uzyć 7z niż zip – tego dowiodłem, taki był mój cel. Fakt ten znałem z doświadczenia ale takiego eksperymentu nie robiłem. Blog to miejsce gdzie takie rzeczy mogę opublikować.

    4. Maszyna – zwykły PC, wszystkie polecenia na tej samej maszynie były wykonywane, jako kryterium lepszego kompresora brałem znaczne różnice, czyli rząd wielkości (jedności, dzięsiątki itp) a nie ms – dlatego nie ma to wielkiego znaczenia.

    Podam jeszcze jedną interpretację testu
    1. najlepszy poziom kompresji posiada lzma , 7z, bzip2, – reszta nie ma znaczenia, jest to inny segment, kompresują o wiele gorzej
    2. najlepszy czas w powyzszym segmencie (w kolejności): 7z, bzip2, lzma.

    Największy poziom kompresji wykazuje lzma. Lecz wygrywa 7z, posiadając poziom kompresji nieznacznie mniejszy od lzma ale wykonujący tę operację dwukrotnie szybciej.

    Dzieki za link i konkretny komentarz, oby takich więcej – niestety takich analiz jakie podlinkowałeś nigdy nie zamieszczę na blogu a naprawdę chciałbym – jest to zbyt czasochłonne :(

    Odnośnie komentarza do @ja – zgadzam się z Tobą, ale już swoich wypowiedzi nie będę cenzurował, ewentualnie bym wyciął wulgaryzmy :)

    pozdraiwam.

  6. 6 Anonim

    w45uye45u

Napisz komentarz



Wersja mobilna