Come posso valutare la migliore scelta del formato di archivio per la compressione dei file?


24

In generale, ho osservato quanto segue:

  • I file o gli strumenti Linux-y usano bzip2 o gzip per distribuire archivi
  • I file o gli strumenti di Windows-y utilizzano ZIP per distribuire archivi
  • Molte persone usano 7-Zip per creare e distribuire i propri archivi

Domande:

  • Quali sono i vantaggi e gli svantaggi di questi formati, che sembrano tutti formati aperti? Quando / perché dovrei sceglierne uno (diciamo 7-Zip) piuttosto che un altro (diciamo ZIP)?
  • Perché la tendenza di cui sopra sembra reggere, anche se tutti questi sono formati portatili? Ci sono dei vantaggi particolari nell'utilizzare un particolare formato di archivio su una particolare piattaforma?



@Sathya, @Andreas: grazie per i collegamenti, sono stati utili e hanno risposto a parti della mia domanda. :)
Mehrdad,

1
La compressione è un campo piuttosto complesso, e nessun algoritmo può produrre risultati ottimali per tutto - inoltre, è un problema a cui puoi dedicare risorse e ottenere risultati migliori, ma anche uno che può essere fatto quasi altrettanto in meno tempo. Alcuni algoritmi si concentrano sull'essere veloci e sulla memoria, alcuni si concentrano sulla produzione del file più piccolo possibile indipendentemente dal tempo impiegato o dalla necessità di 12 GB di RAM (non esagerata) per farlo, ecc.
Phoshi,

1
@Phoshi, questa dovrebbe essere una risposta.
Yitzchak,

Risposte:


16

Sono disponibili numerosi formati e metodi di compressione, alcuni non si comprimono affatto e sono progettati per archiviare un numero di file in un archivio e altri compressori sperimentali più recenti ( basati su PAQ ) sono progettati per comprimere il più aggressivamente possibile, indipendentemente dal tempo necessario per eseguire detta operazione.

È necessario valutare le funzionalità richieste dalla scelta del metodo di compressione e considerare anche il contesto in cui verrà utilizzato.

Diverse caratteristiche e considerazioni includono:

  • Capacità di compressione : riduce il file in modo significativo?
  • Facilità d'uso - Se il file viene indirizzato a un altro utente, l'archivio sarà facile da estrarre o richiederà l'installazione di più software?
  • Protezione con password e / o crittografia : sono necessarie queste misure di sicurezza?
  • Supporto di più volumi : se il supporto di destinazione richiede la suddivisione del file in blocchi appropriati, il formato lo supporta in modo elegante. Ad esempio, 650 MB per un CD.
  • Riparazione e ripristino - Se il file diventa parzialmente corrotto, offre un record di ripristino per facilitare il ripristino dei dati?
  • Supporto Unicode - L'archiviatore supporta nomi di file internazionali o solo ASCII standard?
  • Requisiti di sistema - I moderni compressori come 7-Zip offrono la possibilità di aumentare l'efficienza della compressione utilizzando un dizionario più grande (un dizionario è un riferimento ai dati comunemente ripetuti in un file compresso), ma questo a sua volta aumenta il consumo di memoria sia a compressione che a tempo di decompressione.
  • Supporto per l'estrazione automatica : l'archivio può essere convertito in un file eseguibile che fornisce facilità d'uso a chiunque ne abbia bisogno? (Ricorda inoltre che puoi creare un autoestraente solo per una singola piattaforma. In genere un autoestraente Windows non funzionerà su Linux per impostazione predefinita, a meno che non attraversi un livello di compatibilità come Wine).
  • Attributi del file system : il compressore memorizza i metadati e le autorizzazioni del file system pertinenti che è possibile preservare al momento dell'estrazione?

In genere ZIP è il formato più diffuso, ma le dimensioni superiori a 4 GB non sono generalmente supportate (se non del tutto), il supporto per la sicurezza è generalmente considerato scadente (la password standard può essere compromessa con un attacco di testo normale e l'ulteriore crittografia è generalmente implementato come derivato non ufficiale del formato da parte di venditori di software ZIP commerciali).

A parte questo, la maggior parte degli altri formati popolari avrà una qualche forma di supporto su tutti i sistemi operativi installando più software.

La mia scelta personale è 7-Zip , in quanto ha una compressione grande e flessibile; nonostante abbia una peculiare interfaccia utente su Windows. Esistono de-compressori per Linux e Mac OS X (sebbene non basati sulla GUI come standard).


3
Se l'archivio è destinato alla distribuzione, è anche importante considerare il pubblico di destinazione e utilizzare un formato supportato per impostazione predefinita sulla loro piattaforma. L'accessibilità può essere più importante delle altre considerazioni in questo caso.
Hammar,

+1 grazie per l'informazione, anche se sarebbe stato ancora meglio menzionare quali formati supportano quei punti elenco. :)
Mehrdad,

Ero tentato, ma ci sono una moltitudine di formati disponibili, che richiederebbe molto tempo per elencarli. Wikipedia ha una buona matrice di formati di compressione che può aiutare: en.wikipedia.org/wiki/Comparison_of_archive_formats
Ruairi Fullam

1
La storia insegna una lezione importante quando si tratta di file di archivio autoestraenti. Esistono archivi autoestraenti di due decenni fa che le persone non possono più autoestraire perché le loro macchine non possono eseguire programmi MS / PC-DOS, o perché i programmi autoestraenti si arrestano in modo anomalo a causa di modifiche del processore o perché l'auto- gli estrattori lamentano che i dischi sono pieni quando non lo sono poiché non si aspettano che i dischi siano così grandi, o ...
JdeBP

Quel punto è certamente discutibile, non ho riscontrato quel particolare problema ma posso vederlo accadere; Suppongo che sia tutta una questione dell'obiettivo finale della creazione dell'archivio e della longevità prevista dell'uso dei file. Certamente se si dispone di un vecchio archivio che è difficile estrarre dall'era DOS, è possibile utilizzare DOSBox o persino creare una macchina virtuale, se necessario.
Ruairi Fullam,

8

Una cosa che viene in mente è un post sul blog (di due anni) di Jeff Atwood: File Compression in the Multi-Core Era . In quell'articolo scopre che bzip2 supera 7-zip quando esegue più di due core.


+1 omg! Non lo sapevo. Tuttavia, il rapporto di compressione sembra non valerne la pena. :)
Mehrdad,

2
Quel post ha più di 2 anni. 7-zip non funziona meglio con più di due core ora?
Cregox,

BZIP2 si comprime in modo più efficiente su più core perché si comprime in blocchi da 100-900 KB, quindi può distribuire blocchi su core separati, ma l'efficienza di compressione viene persa poiché questi blocchi vengono considerati distinti tra loro.
Ruairi Fullam,

4

Alla prima domanda, 7-Zip è un archiviatore che può utilizzare molti algoritmi per comprimere e decomprimere i dati.

Alla tua seconda domanda, assicurati solo che la piattaforma supporti strumenti che supportano il formato specificato. Ad esempio, eviterei di usare RAR su un Mac. Sebbene sia possibile utilizzarlo e ci sono utility gratuite che lo supportano, mancano dell'interfaccia molto più ricca delle utility di Windows che supportano RAR (nella mia esperienza).


Mentre odio personalmente i programmi grafici rar e utilizzo sempre la riga di comando, anche su Windows.
CarlF

4

Come altri hanno già detto, la scelta di un particolare formato di compressione dipende fortemente dall'uso e dal pubblico previsto.

  • Gli archivi .tar.gz e tar.bz2 sono ideali per l'uso su sistemi Linux (e per estensione per la condivisione di file con utenti Linux) perché gli strumenti tar, gzip e bzip2 sono ampiamente onnipresenti sulla piattaforma e perché il formato .tar è pieno supporto per permessi Unix e altre proprietà specifiche della piattaforma. La scelta tra gzip e bzip2 per comprimere l'archivio tar è principalmente una decisione sulla velocità rispetto al rapporto di compressione, con bzip2 che fornisce file più piccoli ma con una velocità di compressione molto più lenta. Gli svantaggi di questi formati includono una minore compatibilità con Windows e la (potenziale) necessità di decomprimere l'intero archivio per estrarre un singolo file.

  • Gli archivi ZIP possono essere estratti sulla maggior parte delle piattaforme utilizzando strumenti nativi, quindi è la scelta ideale per inviare un archivio a un utente non tecnico che sarebbe a disagio con l'installazione di software di archivio di terze parti come 7-Zip. Il livello di compressione non è buono come algoritmi più avanzati e non supporta le autorizzazioni Unix, ma è un formato eccellente se, ad esempio, si desidera inviare un archivio di foto delle vacanze a tua nonna. ZIP offre anche una protezione di base della password e può estrarre rapidamente un file da qualsiasi punto dell'archivio.

  • 7-Zip è buono se vuoi i migliori rapporti di compressione possibili. Come ZIP, non supporta i permessi o la proprietà dei file Unix e non è installato di default sulla maggior parte delle piattaforme, il che rende leggermente più lavoro da usare, ma può valerne la pena su Windows se i guadagni del rapporto di compressione sono importanti. In un ambiente tutto Linux sarebbe meglio usare gli strumenti di compressione 'xz' o 'lzma' insieme a tar, che funzionano esattamente allo stesso modo di 'gzip' e 'bzip2' ma usano l'algoritmo LZMA più avanzato come 7 -Cerniera lampo.


2

Come esempio, utilizzo i formati menzionati in questi casi:

  • File di testo (in particolare i registri): bz2
  • Raccolta di file da distribuire (ad es. Codice sorgente): gz (tar.gz davvero).
  • File assortiti: 7zip. Posso comprimere quasi tutto in modo molto efficiente. Crittografia multipiattaforma, open source, stabile, leggera, di file (intestazione e dati), ... Puoi chiedere qualcos'altro? :)

Evito del tutto il RAR e ogni volta che ricevo il file RAR da qualcuno che conosco, gli dico di smettere di usare quel formato poiché è propietario e che probabilmente sta usando un software senza licenza (la maggior parte delle persone scarica la versione di prova di WinRAR e continua a usare per sempre).

PS: eseguo Ubuntu (principalmente) e Windows (sia dual boot che VirtualBox).


1

Esistono almeno quattro lavori separati che sono spesso confusi insieme perché gli strumenti popolari li integrano:

  1. Archiviazione: la possibilità di combinare più file (compresi i metadati) in un singolo file, preservando quante più cose possibile. Nel mondo Linux / Unix, l'archiviazione viene tradizionalmente eseguita in formato file TAR.
  2. Compressione: la capacità di ridurre al minimo le dimensioni di un flusso di dati binari. Nel mondo Linux / Unix, questo è tradizionalmente fatto da GZip e BZip2.
  3. Crittografia: la possibilità di mescolare i dati con le chiavi
  4. Checksum: la capacità di rilevare (e possibilmente correggere) errori.

L'ubiquità di .tar.gz e .tar.bz corrisponde alla filosofia Unix di piccoli strumenti che fanno bene un singolo lavoro, rispetto a un singolo strumento che fa tutto. Il formato del file TAR non supporta la compressione o la crittografia, ma può essere ulteriormente compresso da qualsiasi compressore (incluso come .tar.zip o .tar.7z). Il lavoro di GZip e BZip2 è semplicemente quello di comprimere un flusso di file in un altro filestream, il livello di compressione non deve preoccuparsi di come conservare i metadati o la crittografia o il checksum. Nel corso del tempo, tuttavia, nel tarprogramma sono state create diverse scorciatoie per lavorare in modo più conveniente con un compressore.

In formato zip e 7z, questi lavori separati vengono eseguiti da un singolo programma in un unico formato super file.

Perché la tendenza di cui sopra sembra reggere, anche se tutti questi sono formati portatili? Ci sono dei vantaggi particolari nell'utilizzare un particolare formato di archivio su una particolare piattaforma?

Poiché è stato fatto così, i codici sorgente del programma sono tradizionalmente distribuiti come .tar.gz o .tar.bz2, perché preservare i permessi dei file, i tempi di modifica, ecc. Sono importanti per vari strumenti usati per la programmazione (es. Make).

La fase separata di archiviazione e compressione ha funzionato per anni molto bene, ha un chiaro vantaggio di poter mescolare e abbinare liberamente archiviazione e compressione e il suo svantaggio (un processo di compressione in 2 fasi) può essere facilmente aggirato sviluppando strumenti più intelligenti ( il più moderno programma di compressione linux comprime direttamente in .tar.gz o .tar.bz2, nascondendo il passaggio intermedio).

Non vi è alcun motivo valido per passare ad altri formati di file, i compressori più recenti non hanno un tasso di compressione significativamente migliore per giustificare la rottura della tradizione e tar può preservare tutto abbastanza bene.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.