Jak mogę ocenić najlepszy wybór formatu archiwum do kompresji plików?


24

Ogólnie zaobserwowałem:

  • Pliki lub narzędzia Linux-y używają bzip2 lub gzip do dystrybucji archiwów
  • Pliki Windows-y lub narzędzia używają ZIP do dystrybucji archiwów
  • Wiele osób korzysta z 7-Zip do tworzenia i dystrybucji własnych archiwów

Pytania:

  • Jakie są zalety i wady tych formatów, z których wszystkie wydają się być formatami otwartymi? Kiedy / dlaczego powinienem wybrać jeden (powiedzmy 7-Zip) zamiast drugiego (powiedzmy ZIP)?
  • Dlaczego powyższy trend wydaje się utrzymywać, mimo że wszystkie są formatami przenośnymi? Czy są jakieś szczególne zalety korzystania z określonego formatu archiwum na konkretnej platformie?



@Sathya, @Andreas: Dzięki za linki, są one pomocne i odpowiadają na części mojego pytania. :)
Mehrdad

1
Kompresja jest dość złożoną dziedziną i żaden algorytm nie jest w stanie zapewnić optymalnych rezultatów dla wszystkich - ponadto jest to problem, na który można rzucić zasoby i uzyskać lepsze wyniki, ale także taki, który można wykonać prawie równie dobrze w znacznie krótszym czasie. Niektóre algorytmy koncentrują się na szybkości i lekkości pamięci, inne na tworzeniu najmniejszego możliwego pliku, niezależnie od tego, ile to zajmuje lub czy potrzebujesz 12 GB pamięci RAM (nie przesadzając), aby to zrobić, i tak dalej.
Phoshi,

1
@ Phoshi, to powinna być odpowiedź.
Icchak

Odpowiedzi:


16

Dostępnych jest wiele różnych formatów i metod kompresji, niektóre nie kompresują się wcale i są przeznaczone do przechowywania wielu plików w jednym archiwum, a inne nowsze eksperymentalne kompresory ( oparte na PAQ ) są zaprojektowane tak, aby kompresować tak agresywnie, jak to możliwe, niezależnie od czasu potrzebnego do wykonania tej operacji.

Musisz ocenić funkcje wymagane przy wyborze metody kompresji, a także wziąć pod uwagę kontekst, w którym zostanie użyta.

Różne funkcje i uwagi obejmują:

  • Kompresja - czy plik znacznie zmniejsza plik?
  • Łatwość użycia - jeśli plik trafi do innego użytkownika, czy archiwum będzie łatwe do wypakowania, czy będzie wymagało zainstalowania większej ilości oprogramowania?
  • Ochrona hasłem i / lub szyfrowanie - Czy wymagane są te środki bezpieczeństwa?
  • Obsługa wielu woluminów - jeśli docelowy nośnik wymaga podzielenia pliku na odpowiednie porcje, czy format obsługuje to elegancko. Na przykład 650 MB na płytę CD.
  • Naprawa i odzyskiwanie - jeśli plik zostanie częściowo uszkodzony, czy oferuje zapis odzyskiwania, który pomaga przywrócić dane?
  • Obsługa Unicode - czy archiwizator obsługuje międzynarodowe nazwy plików, czy tylko standardowe ASCII?
  • Wymagania systemowe - Nowoczesne kompresory, takie jak 7-Zip , oferują możliwość zwiększenia wydajności kompresji za pomocą większego słownika (słownik jest odniesieniem do często powtarzanych danych w skompresowanym pliku), ale to z kolei zwiększa zużycie pamięci zarówno przy kompresji, jak i czas dekompresji.
  • Obsługa samorozpakowania - czy można zrolować archiwum do pliku wykonywalnego, który zapewnia łatwość użycia każdemu, kto musi go użyć? (Należy również pamiętać, że można utworzyć samorozpakowujący tylko dla jednej platformy. Ogólnie rzecz biorąc, samorozpakowujący system Windows nie będzie domyślnie działał w systemie Linux, chyba że zostanie uruchomiony przez warstwę zgodności, taką jak Wine)
  • Atrybuty systemu plików - czy kompresor przechowuje odpowiednie metadane systemu plików i uprawnienia, które warto zachować w punkcie pobierania?

Ogólnie rzecz biorąc, ZIP jest najbardziej wszechobecnym formatem, ale rozmiary powyżej 4 GB nie są ogólnie obsługiwane (jeśli w ogóle), wsparcie bezpieczeństwa jest ogólnie uważane za słabe (standardowe hasło może zostać naruszone przez atak zwykłym tekstem, a dalsze szyfrowanie jest generalnie wdrażany jako nieoficjalna pochodna formatu przez komercyjnych dostawców oprogramowania ZIP).

Oprócz tego większość innych popularnych formatów będzie miała jakąś formę wsparcia we wszystkich systemach operacyjnych, instalując więcej oprogramowania.

Mój osobisty wybór to 7-Zip , ponieważ ma świetną i elastyczną kompresję; pomimo tego, że ma osobliwy interfejs użytkownika w systemie Windows. Istnieją dekompresory dla systemów Linux i Mac OS X (chociaż nie są oparte na GUI w standardzie).


3
Jeśli archiwum jest przeznaczone do dystrybucji, ważne jest również, aby wziąć pod uwagę odbiorców docelowych i użyć formatu, który jest domyślnie obsługiwany na ich platformie. W tym przypadku dostępność może być ważniejsza niż inne względy.
hammar

+1 dzięki za informację, choć byłoby jeszcze lepiej wspomnieć, które formaty obsługują te punkty. :)
Mehrdad

Kusiło mnie, ale dostępnych jest wiele formatów, których sporządzenie zajęłoby dużo czasu. Wikipedia ma dobrą matrycę formatów formatów kompresji, które mogą pomóc: en.wikipedia.org/wiki/Comparison_of_archive_formats
Ruairi Fullam

1
Historia uczy ważnej lekcji, jeśli chodzi o samorozpakowujące się pliki archiwów. Istnieją archiwa samorozpakowujące się sprzed dwudziestu lat, których ludzie nie mogą już samorozpakowac, ​​ponieważ ich komputery nie mogą uruchamiać programów MS / PC-DOS, lub ponieważ programy samorozpakowujące ulegają awarii w wyniku zmian procesora lub ponieważ ekstraktorzy narzekają, że dyski są pełne, gdy nie są, ponieważ nie spodziewają się, że dyski będą tak duże, lub…
JdeBP

Ta kwestia jest z pewnością dyskusyjna, nie spotkałem się z tym konkretnym problemem, ale widzę, że się pojawia; Przypuszczam, że to wszystko jest kwestią ostatecznego celu utworzenia archiwum i oczekiwanej żywotności plików. Z pewnością, jeśli masz stare archiwum, które trudno wyodrębnić z epoki DOS, możesz użyć DOSBox, a nawet utworzyć maszynę wirtualną, jeśli to konieczne.
Ruairi Fullam

8

Jedną z rzeczy, które przychodzą mi na myśl, jest (dwuletni) post na blogu Jeffa Atwooda: Kompresja plików w erze wielordzeniowej . W tym artykule stwierdza, że ​​bzip2 przewyższa 7-zip, gdy działa na więcej niż dwóch rdzeniach.


+1 omg! Nie wiedziałem tego Jednak współczynnik kompresji nie jest tego wart. :)
Mehrdad

2
Ten post ma ponad 2 lata. Czy 7-zip nie działa teraz lepiej z więcej niż dwoma rdzeniami?
cregox

BZIP2 kompresuje się bardziej efektywnie na wielu rdzeniach, ponieważ kompresuje się w bloki 100-900 KB, dzięki czemu może rozłożyć bloki na osobne rdzenie, ale wydajność kompresji jest tracona, ponieważ bloki te są uważane za odrębne od siebie.
Ruairi Fullam

4

Na pierwsze pytanie, 7-Zip jest archiwizatorem, który może używać wielu algorytmów do kompresji i dekompresji danych.

Na drugie pytanie upewnij się, że platforma obsługuje narzędzia obsługujące dany format. Na przykład unikałbym używania RAR na Macu. Chociaż można go używać i istnieją bezpłatne narzędzia, które go obsługują, brakuje im znacznie bogatszego interfejsu, który mają narzędzia Windows obsługujące RAR (z mojego doświadczenia).


Podczas gdy osobiście nienawidzę graficznych programów rar i zawsze używam wiersza poleceń, nawet w systemie Windows.
CarlF,

4

Jak wspomnieli inni, wybór konkretnego formatu kompresji zależy w dużym stopniu od zastosowania i zamierzonych odbiorców.

  • Archiwa .tar.gz i tar.bz2 są idealne do użytku w systemach Linux (i przez rozszerzenie do udostępniania plików użytkownikom Linuksa), ponieważ narzędzia tar, gzip i bzip2 są w dużej mierze wszechobecne na platformie, a format .tar jest pełny obsługa uprawnień Unix i innych właściwości specyficznych dla platformy. Wybór pomiędzy gzip i bzip2 do kompresji archiwum tar jest głównie decyzją o stosunku szybkości do kompresji, przy czym bzip2 dostarcza mniejsze pliki, ale z dużo wolniejszą prędkością kompresji. Wady tych formatów obejmują mniejszą zgodność z systemem Windows i (potencjalną) potrzebę rozpakowania całego archiwum w celu wyodrębnienia jednego pliku.

  • Archiwa ZIP można wyodrębnić na większości platform przy użyciu rodzimych narzędzi, dlatego jest to idealny wybór do wysłania archiwum do nietechnicznego użytkownika, który nie czułby się komfortowo z instalacją oprogramowania do archiwizacji innych firm, takiego jak 7-Zip. Poziom kompresji nie jest tak dobry jak bardziej zaawansowane algorytmy i nie obsługuje uprawnień uniksowych, ale jest to doskonały format, jeśli chcesz na przykład wysłać archiwum zdjęć z wakacji do babci. ZIP zapewnia również podstawową ochronę hasłem i może szybko wyodrębnić plik z dowolnego miejsca w archiwum.

  • 7-Zip jest dobry, jeśli potrzebujesz najlepszych możliwych współczynników kompresji. Podobnie jak ZIP, nie obsługuje uprawnień do plików Unix ani własności, a także nie jest domyślnie instalowany na większości platform, co sprawia, że ​​jest nieco bardziej pracochłonny w użyciu, ale może być warto w systemie Windows, jeśli ważne jest zwiększenie współczynnika kompresji. W środowisku opartym na wszystkich systemach Linux lepiej byłoby użyć narzędzi kompresji „xz” lub „lzma” wraz z programem tar, które działają dokładnie tak samo jak „gzip” i „bzip2”, ale używają bardziej zaawansowanego algorytmu LZMA, takiego jak 7 -Zamek błyskawiczny.


2

Jako przykład używam wymienionych formatów w następujących przypadkach:

  • Pliki tekstowe (zwłaszcza logi): bz2
  • Zbiór plików do dystrybucji (np. Kod źródłowy): gz (tar.gz naprawdę).
  • Różne pliki: 7zip. Mogę skompresować prawie wszystko w bardzo wydajny sposób. Wieloplatformowe, otwarte, stabilne, lekkie szyfrowanie plików (nagłówków i danych) ... Czy możesz poprosić o coś jeszcze? :)

Całkowicie unikam RAR i za każdym razem, gdy otrzymuję plik RAR od kogoś, kogo znam, mówię mu, aby przestał używać tego formatu, ponieważ jest on zastrzeżony i że prawdopodobnie używa on nielicencjonowanego oprogramowania (większość osób pobiera wersję próbną WinRAR i nadal używa na zawsze).

PS: uruchamiam Ubuntu (głównie) i Windows (zarówno dual boot, jak i VirtualBox).


1

Istnieją co najmniej cztery oddzielne zadania, które często są ze sobą mylone, ponieważ popularne narzędzia je integrują:

  1. Archiwizacja: możliwość łączenia wielu plików (w tym metadanych) w jeden plik, zachowując jak najwięcej rzeczy. W świecie Linux / Unix archiwizacja odbywa się tradycyjnie w formacie pliku TAR.
  2. Kompresja: zdolność do bezstratnego minimalizowania rozmiaru strumienia danych binarnych. W świecie Linux / Unix jest to tradycyjnie wykonywane przez GZip i BZip2.
  3. Szyfrowanie: możliwość szyfrowania danych za pomocą kluczy
  4. Suma kontrolna: zdolność do wykrywania (i ewentualnie poprawiania) błędów.

Wszechobecność .tar.gz i .tar.bz odpowiada filozofii uniksowych małych narzędzi wykonujących jedno zadanie dobrze, w stosunku do jednego narzędzia, które robi wszystko. Format pliku TAR nie obsługuje kompresji ani szyfrowania, ale może być dalej kompresowany przez dowolny kompresor (w tym jako .tar.zip lub .tar.7z). Zadaniem GZip i BZip2 jest po prostu kompresja strumienia pliku do innego strumienia plików, warstwa kompresji nie musi dbać o to, jak zachować metadane, szyfrowanie lub sumę kontrolną. Z czasem jednak w tarprogramie wprowadzono kilka skrótów do wygodniejszej pracy ze sprężarką.

W formacie zip i 7z te osobne zadania są wykonywane przez jeden program w jednym super formacie.

Dlaczego powyższy trend wydaje się utrzymywać, mimo że wszystkie są formatami przenośnymi? Czy są jakieś szczególne zalety korzystania z określonego formatu archiwum na konkretnej platformie?

Ponieważ tak się dzieje, kody źródłowe programów są tradycyjnie dystrybuowane jako .tar.gz lub .tar.bz2, ponieważ zachowanie uprawnień do plików, czas modyfikacji itp. Są ważne dla różnych narzędzi używanych do programowania (np. Make).

Oddzielny etap archiwizacji i kompresji działał bardzo dobrze od lat, ma wyraźną zaletę polegającą na swobodnym mieszaniu i dopasowywaniu archiwizacji i kompresji, a jego wadę (2-etapowy proces kompresji) można łatwo obejść, opracowując inteligentniejsze narzędzia ( najnowszy program do kompresji linuksa skompresuje bezpośrednio do .tar.gz lub .tar.bz2, ukrywając etap pośredni).

Nie ma silnego powodu, aby przejść do innych formatów plików, nowsze kompresory nie mają znacznie lepszego współczynnika kompresji, aby uzasadnić złamanie tradycji, a tar może zachować wszystko wystarczająco dobrze.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.