Computer / Programmazione · 2 ottobre 2014 0

Quale metodo di compressione scegliere per i nostri archivi?

Spesso dobbiamo spostare da un dispositivo ad un altro molti file contemporaneamente, anche di dimensioni generose. Per risparmiare spazio e per praticità utilizziamo i cosiddetti archivi compressi. Un archivio compresso altro non è se non un unico, grosso file, che contiene al suo interno uno o più file in un formato che permette di risparmiare spazio rispetto alla somma delle dimensioni dei singoli file originali. Molti utenti non si pongono il problema di quale formato utilizzare perché quello attualmente più diffuso è senz’altro lo ZIP. Ma non è l’unico né il più efficiente. Vediamo di effettuare dei test e vedere se le alternative sono più o meno efficienti di esso.

Gli archivi compressi si può dire siano nati insieme ai computer. Fin dall’inizio, infatti, si è sentita la necessità di trovare un modo per ottimizzare lo spazio di archiviazione dato che, un tempo, i supporti di memorizzazione non erano capaci come quelli di oggi. Negli anni ’60 erano diffusi i nastri magnetici, grosse bobine contenenti un nastro magnetico simili alle musicassette degli anni ’80 ma grosse come pizze. Il problema di questi nastri era la non ottimizzazione degli spazi di archiviazione: le informazioni erano memorizzate a blocchi quindi capitava che un blocco potesse contenere veramente pochi dati. Per ovviare a questo problema fu inventato uno dei primi formati di archivio, il TAR, da “TApe aRchive”: i file da archiviare venivano inclusi in un gigantesco contenitore che poi veniva memorizzato sul nastro. Anche i primi floppy disk, che comparvero nel 1971, non offrivano molto spazio: nonostante le generose dimensioni di 8″, non contenevano che poco più di 79 KB di dati. A quell’epoca, però, i programmi erano di ridotte dimensioni perché un normale computer aveva spesso pochi KB di memoria RAM e non si potevano scrivere software molto voluminosi. Quando comparve UNIX, l’uso di TAR continuò anche sui floppy disk perché era comodo avere un unico archivio dove tenere molti singoli file ma non era ancora molto sentito il bisogno di risparmiare spazio. Col tempo, però, i dati che un programma poteva memorizzare potevano crescere in  maniera notevole (si pensi ai programmi per la gestione anagrafica o degli ordini in una ditta, ad esempio): fortunatamente per gli utenti, e per i computer dell’epoca (che non erano molto potenti), la tecnologia dei supporti si evolveva rapidamente così da non far sentire la necessità di un sistema per comprimere i dati. Agli metà degli anni ’80 i floppy disk da 3,5″ offrivano già 720/800/880 KB di capacità, rispettivamente per PC, Apple e Amiga.

Con l’avvento di computer sempre più potenti crescevano anche le dimensioni dei programmi. Si iniziò quindi a sentire seriamente il bisogno di programmi che permettessero di comprimere i file e poterli archiviare e/o trasportare con facilità. Uno dei primi software del genere fu ARC (1985): esso creava archivi compressi con estensione .arc. Nel 1989, quando i PC si erano già affermati come le macchine professionali per eccellenza, fece la sua comparsa sui sistemi MS-DOS un altro programma che, nel giro di pochissimo, tolse ad ARC il ruolo di programma di archiviazione e compressione di riferimento: PKZIP. Era più veloce ed efficiente di ARC: impiegava meno tempo a comprimere e decomprimere i dati e l’algoritmo utilizzato creava archivi di dimensioni ridotte rispetto a quelle degli archivi creati con ARC. I file creati avevano l’estensione .ZIP. Il formato ZIP si diffuse rapidamente e, nel corso degli anni, tutti i principali sistemi operativi hanno integrato al loro interno il supporto per esso: Windows e Mac OS X possono infatti aprire nativamente un file ZIP. Nonostante sia il più utilizzato, non è però l’unico formato di compressione ed archiviazione. Nel corso degli anni sono stati creati diversi formati, alcuni nati su una piattaforma e poi diffusi alle altre, come ad esempio GZIP che è nato sui sistemi UNIX oppure RAR, che invece è nato su Windows. Il formato 7Z è uno degli ultimi formati comparsi, appare infatti intorno al 2000: rispetto ai suoi predecessori è dotato di un rapporto di compressione molto elevato ma per contro è leggermente più lento nell’esecuzione.

Ma qual è il formato migliore? Difficile dirlo. Le prestazioni di un programma di compressione sono influenzate non solo dalle quelle intrinseche dell’algoritmo utilizzato per la compressione ma anche dall’ottimizzazione del codice nonché da livello di compressione scelta. Infine, anche dal sistema su cui stiamo eseguendo l’operazione, dato che la qualità della CPU (velocità e numero di core) impatta in maniera primaria sulle prestazioni. Per capire su che ordine di grandezze temporali ragioniamo ho condotto alcuni test andando a comprimere la cartella dell’IDE di Arduino 1.0.6 versione per Windows senza installer, una cartella composta da 6.686 file per un totale di 263.821.413 byte. Il test misura il tempo per creare un archivio e confronta poi la dimensione dell’archivio per capire qual è il risultato con il miglior rapporto dimensione/tempo. I test sono stati condotti su un iMac con CPU Intel Core i7 a 3,1 GHz e 16 GB di RAM utilizzando il programma KeKa, offerto come freeware (volendo sostenere gli sviluppatori, si può acquistare l’app dall’App Store) che supporta la compressione nei formati 7Z, ZIP, TAR, GZIP e BZIP2 (oltre che .DMG e .ISO). Nel test ho utilizzato i formati 7Z, ZIP, GZIP e BZIP2 perché TAR non comprime. Non ho provato altri formati quali RAR perché sono basati su algoritmi proprietari e necessitano di una licenza per essere utilizzati per cui esistono solo nei programmi a pagamento.

 

Formato Tempo Dimensione

archivio

Velocità Archivio/

file orignali

ZIP
compr. minima
3″ 100.2 MB 33.4 MB/s 37%
ZIP
compr. media
9″ 94.6 MB 10.5 MB/s 35%
ZIP
compr. massima
1′ 8″ 93 MB 1.37 MB/s 34%
7z
compr. minima
14″ 79.8 MB 5.7 MB/s 30%
7z
compr. media
50″ 55 MB 1.1 MB/s 21%
7Z
compr. massima
1′ 4″ 52.6 MB 0.82 MB/s 20%
Gzip 24″ 93 MB 3.87 MB/s 35%
Bzip2 40″ 80 MB 2 MB/s 30%

Come si vede dalla tabella, il formato ZIP è quello che mostra la più alta velocità con rapporti di compressione minimo o medio, arrivando a 33,4 MB al secondo nel primo caso. Ma quando si richiede la massima compressione, le prestazioni calano vistosamente ed a fronte di una velocità molto bassa il guadagno rispetto al rapporto medio è veramente eseguo. In generale, lo ZIP non mostra una elevata capacità di compressione.

Il 7Z paga in termini di velocità ma per contro offre rapporti di compressione veramente notevoli: già al livello minimo l’archivio ottenuto è ben più piccolo di quello generato dallo ZIP al massimo rapporto, per calare ancor di più con un livello di compressione medio. Come nel caso dello ZIP, anche il 7Z offre poco di più al massimo rapporto.

I formato GZIP e BZIP2 sono generalmente poco diffusi, essendo limitati di solito al solo ambito *NIX: il formato GZIP è uno dei più diffusi su queste piattaforme (è il formato più diffuso per distribuire i sorgenti compressi) mentre il BZIP2 è più recente e anche leggermente più performante se si guarda alla dimensione dell’archivio generato.

In definitiva, se potete utilizzate il formato 7Z. Per i vostri archivi la scelta di un archivio compresso con un livello medio è la scelta migliore in rapporto al tempo di esecuzione ed al rapporto di compressione.