Co jest bardziej wydajne - kompresja tar lub zip? Jaka jest różnica między smołą a zamkiem?

68

Pracuję w środowisku Linux i chcę wiedzieć o poleceniach tar i zip.

Który jest bardziej wydajny - smoła lub zip? Muszę także znać różnice między poleceniami tar i zip. Czy ktoś może mi je wyjaśnić?

rekha_sri
źródło

Odpowiedzi:

77

tartworzy tylko jeden plik z wielu plików, nie dokonuje kompresji, chyba że połączy program kompresji, taki jak gziplub bzip2(który można wywołać od wewnątrz tar, używając odpowiednio opcji -zlub -j). zipłączy zarówno archiwizację, jak i kompresję w jednym programie.

Wim
źródło
60

smoła

  • Zakłada, że ​​będziesz czytać od jednego końca do drugiego - „ARCHIWUM TAŚMY”. (Wiek polecenia pokazuje ...)
  • Nie wykonuje kompresji, ale można skompresować cały wynikowy strumień, przesyłając go np. Przez gzip i bzip2 (wykonane wewnętrznie za pomocą -z lub -j)
  • Przechowuje atrybuty plików unix : uid, gid, permissions (przede wszystkim wykonywalny). Wartość domyślna może zależeć od twojej dystrybucji i może być przełączana z opcjami.

zamek błyskawiczny

  • Przechowuje atrybuty MSDOS . (Archiwum, Tylko do odczytu, Ukryty, System)
  • Kompresuje każdy plik, a następnie dodaje go do archiwum
  • Zawiera tabelę plików na końcu pliku
  • a w wyniku poprzednich dwóch pozwala na odczyt tylko tych części, których potrzebujesz.

Fakt, że zip oddzielnie kompresuje pliki, wpłynie na współczynniki kompresji, szczególnie w przypadku wielu małych podobnych plików.

(Przynajmniej tak było dziesięć lat temu).

MaHuJa
źródło
22

Smoła zachowuje znacznie więcej metadanych niż Zip, zobacz moje porównanie (jest nieco nieaktualne):

wprowadź opis zdjęcia tutaj

(Kliknij, aby powiększyć)

Smoła przechodzi 65% testów, podczas gdy Zip przechodzi tylko 17%. Udostępniłem pakiet testowy na github na licencji BSD , abyś mógł sam spróbować, jeśli masz komputer Mac. W przypadku Linuksa nie jestem pewien, czy są jakieś metadane, więc te testy mogą nie być odpowiednie.

neoneye
źródło
Ciekawy! +1 za to. Ale z drugiej strony był to ogromny program. Czy napisałeś to w innym celu? Po prostu ciekawy.
CppLearner,
Testy napisałem dla menedżera plików, nad którym pracowałem kilka lat temu. Nigdy go nie wypuściłem.
neoneye
1
Linux ma również metadane, więc powinno na to działać.
zeitue
14

Wydajność można mierzyć na różne sposoby:

  1. Jak długo trwa ten proces?
  2. Jak duże są pliki wynikowe?

Istnieją również inne pytania, takie jak „Jak często narzędzia do manipulowania wynikowymi archiwami?”

Na przykład bzip2tworzy mniejsze pliki gzip, ale może to znacznie potrwać. Ponadto z mojego doświadczenia gzipwynika, że ​​jest uniwersalny w systemach uniksopodobnych, ale bzip2nadal nie jest (chociaż jest bardzo powszechny i ​​zwykle łatwo dostępny).

Telemachus
źródło
3
7zip ( 7-zip.org ) to kolejna dobra opcja uzyskania doskonałej kompresji kosztem czasu procesora. Rzadziej niż bzip2 (nie jest instalowany domyślnie w żadnym miejscu, o którym wiem), ale łatwy do zainstalowania w większości miejsc (jest w standardowych repozytoriach dla większości dystrybucji Linuksa i istnieje prosty pakiet instalatora dla systemu Windows. Podobnie jak tar + gzip, przenosi okno kompresji między plikami wejściowymi, dzięki czemu zyskuje jeszcze większe oszczędności w stosunku do zip, gdy
dołącza się
3
Wydajność można również zmierzyć na podstawie tego, jak dobrze chroni dane, patrz moja odpowiedź na to pytanie. Smoła jest znacznie lepsza niż zip w zachowaniu danych.
neoneye
1
jeszcze jeden pomiar może być zgodny poza UNIX. Windows jest w porządku z zip (wbudowany w Windows), zwykle może łatwo przetwarzać tar.gz za pomocą shareware, ale bzip2 jest rzadko spotykany. Niestety w oryginalnym pytaniu nie wspomniano o tych kryteriach, więc nie mogę sprawdzić, czy są one odpowiednie.
Rich Homolka,
1
Kiedyś dokładnie przeanalizowałem stosunek kompresji do czasu wymaganego dla niektórych popularnych kompresorów i który byłby najbardziej wydajny w zależności od tego, jak cenisz przestrzeń w czasie: blog.grandtrunk.net/2004/07/practical-compressor-test
Wim
9

Jak zauważył Wim, sama smoła się nie kompresuje. Jeśli dodasz skompresuj tar (np. Aby uzyskać plik .tar.gz lub .tar.bz2), kompresujesz cały plik tar jednocześnie. Natomiast zip kompresuje każdy plik osobno.

Wydajność zależy od obciążenia pracą. W szczególności zip umożliwia bezpośredni dostęp do poszczególnych plików. W przypadku tar musisz najpierw przeszukać niechciane (skompresowane) pliki. Wydajność kompresji zależy od tego, co kompresujesz. tarz bzip2jest często lepszy dla dużej liczby podobnych plików (np. katalogu źródłowego). zipmogłoby być lepiej, jeśli każdy plik ma bardzo inną zawartość.

Matthew Flaschen
źródło
4
... z drugiej strony musisz uzyskać cały plik zip, aby uzyskać dostęp do zawartości, ponieważ toc jest umieszczony na końcu. przeciwnie, możesz rozpakować smołę tak szybko, jak przybywają bajty ...
akira,
6

Archiwa zip zawierają na końcu centralny katalog ich zawartości (najprawdopodobniej unikniesz konieczności wcześniejszego utworzenia katalogu, w którym nie wiesz jeszcze, co będzie w środku). Pozwala to na szybkie wyodrębnianie pojedynczych plików bez konieczności rozpakowywania całego archiwum: po prostu przeczytaj katalog archiwum i wyodrębnij tylko to, co jest potrzebne. Wymaga to jednak dostępu do całego archiwum i dostępu losowego, który jest dostępny tylko na urządzeniach blokowych (dyskietki, dyski twarde). Ponadto katalog archiwum jest podatny na atak: jeśli archiwum zostanie z jakiegoś powodu obcięte, wymaga ono silnego czarodziejstwa, aby wyodrębnić wszystko przydatne z archiwum.

Archiwa Zip zostały utworzone na użytek BBS, gdzie ważna była możliwość spakowania zawartości katalogu do jednego pojedynczego (i skompresowanego) pliku --- zamiast konieczności pobierania prawdopodobnie tysięcy pojedynczych plików. Podobnie jak większość stron internetowych nawet dzisiaj pobiera pakiety z tych samych powodów.

Archiwa tar zostały opracowane do pakietowego tworzenia kopii zapasowych, które mają być używane dla napędów taśm, a więc do sekwencyjnego dostępu . Nie ma centralnego katalogu; zamiast tego archiwum zawiera bloki nagłówków w regularnych odstępach czasu, które wskazują, które pliki pojawią się w kolejnych kilku blokach. Archiwa tar mają być czytane jednym zamachem; jeśli ma zostać wyodrębniony tylko jeden plik, archiwum jest odczytywane sekwencyjnie, od samego początku aż do znalezienia żądanego pliku (który równie dobrze może znajdować się na samym końcu). Ponadto stosuje się kompresję; każdego z różnych programów kompresji, które są stosowane do archiwum tar ( compress, gzip,bzip2itp.) są kompresorami strumieniowymi i nie zmieniają sekwencyjnego charakteru archiwum w żadnej sprawie. W najgorszym przypadku potrzebujesz nieco więcej bloków, aby rozpocząć rozpakowywanie.

Może to zabrzmieć jak banalna różnica, ale w rzeczywistości reprezentuje przeciwne przeciwieństwo w filozofii. W przypadku archiwów zip zawsze trzeba mieć pod ręką cały plik, aby zrobić z nim coś pożytecznego, podczas gdy archiwum tar można przesyłać strumieniowo do potoku. Mogę pobrać duże archiwum tar i rozpakować je od samego początku, jak tylko pojawi się kilka pierwszych bloków (i może przerwać pobieranie, jak tylko otrzymam plik, którego szukam). W przypadku archiwum Zip muszę poczekać, aż pojawi się katalog archiwum, który znajduje się na samym końcu archiwum. Ale kiedy zrobić mieć cały plik pod ręką, wydobywając z niego zawartość częściowych będzie znacznie szybciej z pliku tar.

Oba formaty mają jedną bardzo mocną stronę, w zależności od tego, gdzie i jak są używane. Ponieważ potoki (a zatem pojęcie przesyłania danych z jednego procesu do drugiego) naprawdę istnieją tylko w świecie uniksowym, główna zaleta archiwów tar jest tracona w innych systemach, dlatego archiwa Zip są tam znacznie bardziej popularne. Ale archiwa tar są bardziej elastyczne, dlatego wolę je, kiedy mam wybór.

Vucar Timnärakrul
źródło
5

Jak już wspomniano, tar tworzy duży „blok” wszystkich plików, które można skompresować za pomocą procesora strumieniowego takiego jak gzip lub bzip2.

Wadą tego jest to, że musisz zdekompresować cały plik, aby uzyskać dostęp do jednego pliku w archiwum.

Zaletą tego jest to, że współczynnik kompresji jest zwykle wyższy, szczególnie gdy skompresowane pliki są bardzo podobne.

Inne pakery, takie jak „rar”, mają „tryb blokowy” (lub podobny), aby mieć ten sam efekt.

IanH
źródło