2012-02-25

7z vs zip na przykładzie plików tekstowych

Kwantowomechaniczne pakiety obliczeniowe tworzą dane wyjściowe w postaci plików tekstowych. Niekiedy są to pliki bardzo duże - kilka/kilkanaście/kilkadziesiąt MB czystego tekstu. Ostatnio postanowiłem zrobić porządki w katalogach (by zaoszczędzić trochę przestrzeni dyskowej) i skompresować niektóre katalogi zawierające duże pliki tekstowe. Postanowiłem przy okazji sprawdzić który z dwóch rozpowszechnionych formatów - zip i 7z, charakteryzuje się lepszą kompresją plików tekstowych.

Rozmiar bez kompresji (MB)Archiwum zip (MB)Archiwum 7z (MB)Archiwum rar (MB)
Katalog 1 (tylko pliki tekstowe)193,738,82,43,5
Katalog 2 (tylko pliki tekstowe)633,7128,65,98,5
Katalog 3 (pliki tekstowe i binarne)699,6153,399,7144,4

Wyniki są trochę zaskakujące, ponieważ dla czystych plików tekstowych kompresja 7z pozwala stworzyć archiwum o rozmiarze ~100 razy mniejszym niż rozmiar plików nieskompresowanych (i kilka razy mniejszym niż archiwum zip).

Aktualizacja: Za namową Ominousa dodałem także kolejny popularny format kompresji - rar.

10 komentarzy:

  1. A użyłeś w tym 7zipie algorytmu lzma czy ppmd ?
    Przy danych tekstowych lepiej spisuje się ppmd w pozostałych przypadkach lepszy jest lzma (i on jest używany domyślnie jak nie poda się żadnego parametru).

    Jeśli kompresowałeś te pliki tekstowe na domyślnych ustawieniach możesz się trochę zdziwić gdy mu dasz -m0=ppmd

    OdpowiedzUsuń
  2. Użyłem algorytmu domyślnego.
    Zachęciłeś mnie do pobawienia się parametrami. Testowo kompresowałem plik tekstowy o rozmiarze 32,4 MB. Wyniki testu:
    7z a test.7z test.txt -> 228 KB
    7z a -m0=ppmd test1.7z test.txt -> 2,2 MB
    7z a -m9=ppmd test2.7z test.txt -> 262 KB
    7z a -m0=lzma test3.7z test.txt -> 228 KB
    7z a -m9=lzma test4.7z test.txt -> 258 KB
    Jak dla mnie ustawienia domyślne są bardzo dobre.
    Dla porównania:
    zip test.zip test.txt -> 6,3 MB

    OdpowiedzUsuń
  3. Hmmm, jeżeli dobrze widzę to kompresja LZMA z wyższym poziomem dała plik o większym rozmiarze. Zadziwiające :)
    Jak wygląda poziom redundancji danych wejściowych?

    OdpowiedzUsuń
  4. @Bulba
    W pliku tekstowym powtarzają się pewne fragmenty, jak to przy procedurach iteracyjnych.
    Jak chcesz się pobawić to mogę ci podesłać plik na maila.

    OdpowiedzUsuń
  5. a może by tak porównać jeszcze z innymi kompresjami np. tar, rar i kgb?

    OdpowiedzUsuń
  6. Na przykładzie powyższego pliku tekstowego o rozmiarze 32,4 MB:
    tar.gz -> 6,3 MB
    tar.bz -> 6,3 MB
    tar.xz -> 216 KB
    tar.lzma -> 215 KB
    rar -> 313 KB
    Archiwizera KGB nie posiadam.

    OdpowiedzUsuń
  7. KGB to tak naprawdę stary program PAQ6 w którym ktoś zmienił nazwę i się pod nim podpisał, szkoda tracić na niego czasu, lepiej po testuj coś z serii PAQ8

    To są programy konkursowe, raczej nie przeznaczone do normalnego użytku (za wolno działają) ale stopień kompresji naprawdę niesamowity link do strony ich autora http://cs.fit.edu/~mmahoney/compression/ można pobrać różne wersje łącznie ze źródłami.

    OdpowiedzUsuń
  8. A może by tak poszerzyć kolumnę i dodać tam .rar. Typowo na plikach 193,7; 633,7; 699,6. Jak się Autor na to zapatruje?

    OdpowiedzUsuń
  9. @Ominous
    Autor się na to pozytywnie zapatruje, tylko musiał wcześniej rozpakować spakowane katalogi i spakować je ponownie :-)

    OdpowiedzUsuń
  10. @Karol Kozioł
    Dziękuje za pozytywne rozpatrzenie wniosku ;)

    OdpowiedzUsuń