Welches Archiv- / Komprimierungsformat?

8

Zip, Rar, 7z, Gzip, BZip2, Tar usw. Ich höre, 7z ist der Geschmack des Monats, warum? Ist es für alle Situationen am besten oder gibt es bessere Möglichkeiten für bestimmte Situationen?

Oder hat der eigentliche Dateiarchivierer, dh WinZip, WinRar, 7Zip usw. (im Gegensatz zum Format), einen größeren Effekt?

In Ihrer Antwort könnten Sie beschreiben, welche Art von Kompromiss zwischen Geschwindigkeit und Komprimierung Ihr erwähntes Format verwendet.

Bitte geben Sie Links zu empirischen Tests an, die Ihre Antwort stützen.

Hintergrund: Ich muss einen benutzerdefinierten Suchindex sichern, der ungefähr 3000 relativ kleine Dateien (weniger als 10 MB) erstellt, die jeweils viele sich wiederholende Daten enthalten.

(Wie üblich hat Wikipedia einen relevanten Artikel, aber der Abschnitt zum Leistungsvergleich ist kurz.)

Vielen Dank

Asche
quelle

Antworten:

14

Compress, Gzip, Bzip, Bzip2 dienen nicht zum Archivieren mehrerer Dateien. Sie komprimieren nur einzelne Dateien. Zur Archivierung werden sie normalerweise mit TAR verwendet. Das Problem mit TAR ist, dass es keine Indextabelle hat . Es ist nur gut, wenn Sie vorhaben, das Ganze wiederherzustellen . Wenn Sie erwarten, dass Sie jemals nur eine begrenzte Anzahl ausgewählter Dateien wiederherstellen müssen, vergessen Sie TAR. Um die letzte Datei zu erhalten aus tar.gzoder tar.bz2archivieren, müssen Sie dekomprimieren und verarbeiten alle davon. Im Fall von zip, rar oder 7-zip wird zur Indextabelle gewechselt, zur relevanten Position des Archivs gesprungen und nur relevante Dateien verarbeitet.

Ok, TAR ist raus, so dass Sie ZIP, RAR und 7-ZIP haben. Von diesen dreien ist ZIP am weitesten verbreitet, fast alles unterstützt es, viele Anwendungen haben integrierte Unterstützung. Und es ist schnell. Auf der anderen Seite ist 7-ZIP auch portabel, die Bibliothek ist LGPL und hat Komprimierungsraten, die viel besser sind als die beiden anderen, was mit einem höheren CPU-Verbrauch verbunden ist. RAR ist dort ein echter Verlierer, weder eine großartige Komprimierung, noch wirklich tragbar oder schnell.

BEARBEITEN: Die beste Option scheint 7-ZIP zu sein, jedoch mit der Komprimierungsmethode bzip2. Auf diese Weise haben Sie nicht die Nachteile von TAR, können jedoch die Multi-Core-Unterstützung von bzip2 nutzen. Siehe diesen Artikel.

vartec
quelle
Hervorragende Informationen, danke. Ich hatte TAR in meinem Spiel mit Linux gesehen, es mir aber nie genau angesehen.
Ash
Ich würde über rar nicht einverstanden sein müssen. Die Komprimierung ist gut (im Vergleich zu mindestens gzip) und die Geschwindigkeit scheint in meinen Anwendungsfällen in Ordnung zu sein. Eine Sache, die ich an rar mag, ist, dass es Streaming-Inhalte oder einzelne Dateien verarbeiten kann und es Ihnen ermöglicht, einen Zeitstempel automatisch in den Dateinamen aufzunehmen ...
Dscoduc
10

Literatur-Empfehlungen:

Dateikomprimierung im Multi-Core-Zeitalter (Jeff Atwood aka CodingHorror, Februar 2009)

Ich habe wieder ein bisschen mit der Dateikomprimierung herumgespielt, da wir täglich einige sehr große Sicherungsdateien auf Stack Overflow generieren.

Wir verwenden die neueste 64-Bit-Version von 7zip (4.64) auf unserem Datenbankserver. Ich bin kein großer Fan von mehr als Dual Core auf dem Desktop, aber es ist ein Kinderspiel für Server. Je mehr CPU-Kerne, desto besser! Dieser Server hat zwei Quad-Core-CPUs, insgesamt 8 Kerne, und ich war etwas enttäuscht zu entdecken, dass weder RAR noch 7zip mehr als 2 zu nutzen schienen.

Selbst wenn nur 2 Kerne zum Komprimieren verwendet werden, ist der 7zip-Algorithmus erstaunlich effektiv und hat sich in den letzten Jahren zu einer respektabel schnellen entwickelt. Früher habe ich RAR gegenüber Zip empfohlen, aber angesichts der gesteigerten Effizienz von 7zip und der Tatsache, dass es kostenlos ist und RAR nicht, ist es jetzt die logische Wahl.

Und in Bezug auf Algorithmen:

Warum kann bzip2 so viel schneller arbeiten als 7zip? [...] Bzip2 verwendet mehr als 2 CPU-Kerne, um seine Arbeit zu parallelisieren.

splattne
quelle
Danke für den Link. Wir wissen sicherlich, dass Jeffs Ansicht auf realen Erfahrungen basiert!
Asche
4

Es geht nicht nur um Effizienz und Geschwindigkeit. Sicher, sie sind wichtig, und Sie können sich die Benchmarks für diese ansehen und mit Bedacht aus den Optionen auswählen (obwohl ich ein einfaches eigenes Benchmarking mit Ihren eigenen Daten auf Ihrem eigenen Server empfehlen würde). Die Archivierung führt jedoch zwangsläufig dazu, dass Sie irgendwann wieder auf Ihre Daten zugreifen (andernfalls warum nicht einfach löschen?). Oder vielleicht werden Sie Jahre später nicht mehr auf die Daten zugreifen, sondern auf Dritte. Wählen Sie etwas aus, das verfügbar ist, wenn Sie auf die Daten zugreifen müssen, und etwas, das die Benutzer erkennen. Ich persönlich verwende 7zip, aber wenn ich Dateien archiviere, die andere möglicherweise benötigen, verwende ich zip. Sie wissen es, viele Werkzeuge können damit umgehen. Es ist vielleicht nicht ganz so schnell oder ganz so klein, aber es hilft beim menschlichen Faktor.

Joshua Hunter
quelle
Guter Punkt. Dieser Suchindex extrahiert Daten direkt aus bestimmten komprimierten Dateien. Aus diesem Grund bin ich interessiert, ob es Formate gibt, die eine konfigurierbare Komprimierungs- / Dekomprimierungsleistung bieten. Ich betrachte also mehr den Komprimierungsaspekt als die Archivierung für den zukünftigen Aspekt.
Asche
3

lzma scheint sowohl im Kompressionsverhältnis als auch in der Geschwindigkeit sehr gut zu funktionieren .

In den folgenden http://tukaani.org/lzma/benchmarks Benchmarks ergab die schnellste Einstellung für lzma die Komprimierungszeiten erheblich schneller als die schnellste bzip2-Option, während die Komprimierung immer noch besser als die langsamste bzip2-Option war:

    Verhältnis bzip2 lzmash
    schnellste 35,8% 31,7%       
    langsamste 34,0% 25,4%

    Zeit bzip2 lzmash  
    schnellste 1m 26s 0m 58s  
    langsamste 2m 37s 12m 20s

    * Komprimieren der vollständigen Installation von OpenOffice.org 1.1.4 für Linux (203 MB) 

Es funktioniert besonders gut mit Binärdaten, aber ich glaube, ich habe einige Benchmarks für Klartext gelesen, bei denen bzip2 die Leistung übertroffen hat.

Die lzma-Manpage ist lesenswert:

   lzma  provides  notably  better compression ratio than bzip2 especially
   with files having other than plain text content. The other advantage of
   lzma  is fast decompression which is many times quicker than bzip2. The
   major disadvantage is that achieving  the  highest  compression  ratios
   requires  extensive  amount of system resources, both CPU time and RAM.
   Also software to handle LZMA  compressed  files  is  not  installed  by
   default on most distributions.
Guy C.
quelle
Ich auch nicht bis letzte Woche, als jemand es auf einer meiner Serverfehlerfragen empfohlen hat. Es sieht beeindruckend aus und es lohnt sich, die Leistung mit einfachem Text zu untersuchen, wenn Sie es dafür verwenden.
Guy C
LZMA ist der Name des in 7-zip verwendeten Algorithmus.
Vartec
2

Schauen Sie sich diesen Wikipedia-Eintrag an . Nach unten "Effizienzvergleich". Sie erhalten ungefähr den Prozentsatz der Komprimierung und die benötigte Zeit. Alle diese Zahlen variieren (in Bezug auf die Geschwindigkeit) je nach Geschwindigkeit der verwendeten Maschine, Speicherplatz usw.

Weitere Komprimierungsbenchmarks:


quelle
Danke, aber ich habe das gelesen und dachte, es sei etwas kurz (siehe meinen Punkt in der Frage). Kennen Sie detailliertere Tests in unterschiedlichen Szenarien?
Asche
Es wurden einige Links hinzugefügt, von denen ich hoffe, dass sie weitere Informationen liefern.
2

Vergleich von zip, 7z, rar mit zwei Fällen

Es hängt davon ab, was genau Sie komprimieren, aber im Allgemeinen nutzt 7z mehrere Prozessoren besser, und das 7z-Komprimierungsformat selbst liefert eine höhere Komprimierung als zip und manchmal eine höhere als rar (obwohl rar und 7z fast gleichwertig sind, rar jedoch nicht nicht frei ...)

Meine Tests vor einigen Monaten ergaben folgende Ergebnisse:

Komprimieren einer einzelnen Datenbankdatei mit 10 MB Zugriff:

Database.mdb 17,240,064 (original)
Database.zip  1,634,794 (Regular zip, 11:1)
Database.rar    262,212 (RAR compression, 66:1)
Database.7z     195,678 (7-zip compression, 88:1)

Das Komprimieren eines Ordners mit mehr als neuntausend Dateien unterschiedlichen Typs (903.488 KB) ergab Folgendes (dies ist eine Kombination aus Quellcode und allen ihn umgebenden Tools für die zu entwickelnde Software):

Type   Time  Size (KB)  Compression
ZIP    7:28   247,529   3.7:1
RAR    8:15   222,232   4.1:1
7z    10:49   181,633   5.0:1

Aus Zeitgründen war dies auf einem Core2 Duo, 2 GHz, 1 GB RAM und einer billigen Festplatte.

7z verbesserte das Kompressionsverhältnis in den beiden Fällen, die ich über den Reißverschluss hinaus getestet habe, erheblich und verbesserte sich sogar gegenüber rar, aber 7z war sicherlich langsamer. Nicht signifikant, aber genug, um bemerkt zu werden.

-Adam

Adam Davis
quelle
Schöne Tests. Diese MDB-Komprimierung ist enorm. Ich bekomme nur 4 zu 1 für die 100k binären Indexwortdateien, auf denen ich getestet habe. Ich denke, es zeigt, wie wichtig es ist, mit Dateien / Daten zu testen, die denen Ihres Systems ähneln.
Ash
Ja, MDB-Dateien sind alle Flusen und keine Substanz. Eine Binärdatei wird weniger (weil sie alle 8 Bit verwendet, während Textdateien etwas mehr als 6 Bit verwenden) und die Chancen stehen gut, dass nicht viel Duplizierung darin vor sich geht. Immer wichtig zu testen. Möglicherweise haben Sie mehr Glück beim Spielen mit den Komprimierungseinstellungen - manchmal können Sie sie für die Verwendung optimieren und besser werden als die Standardeinstellungen.
Adam Davis
0

Ich habe gerade dar installiert (hatte aber noch keine Chance damit zu spielen). Es ähnelt tar mit gzip- oder bzip2-Komprimierung, mit der zusätzlichen Möglichkeit, das Archiv in mehrere Teile aufzuteilen und die Parität so zu berechnen, dass ein oder mehrere Teile, die beschädigt sind, aus den Paritätsdateien rekonstruiert werden können.

pgs
quelle