Domanda

Questa domanda sull'archiviazione dei PDF mi ha fatto riflettere - se volevo comprimere (a fini di archiviazione) molti file che sono essenzialmente piccole modifiche apportate sopra un modello principale (una carta intestata), sembra un'enorme compressione i guadagni possono essere ottenuti con la compressione tra file.

Qualcuno dei formati standard di compressione / archiviazione supporta questo? AFAIK, tutti i formati più diffusi si concentrano sulla compressione di ogni singolo file.

È stato utile?

Soluzione

Diversi formati eseguono la compressione tra file.

L'esempio più antico è .tar.gz; un .tar non ha compressione ma concatena tutti i file insieme, con le intestazioni prima di ogni file e un .gz può comprimere solo un file. Entrambi sono applicati in sequenza ed è un formato tradizionale nel mondo Unix. .tar.bz2 è lo stesso, solo con bzip2 invece di gzip.

Esempi più recenti sono formati con "solido" opzionale compressione (ad esempio, RAR e 7-Zip), che può concatenare internamente tutti i file prima della compressione, se abilitato da un flag da riga di comando o da un'opzione della GUI.

Altri suggerimenti

Dai un'occhiata a open-vcdiff di Google.

http://code.google.com/p/open-vcdiff/

È progettato per il calcolo di piccoli delta compressi e implementa RFC 3284.

http://www.ietf.org/rfc/rfc3284.txt

Microsoft ha un'API per fare qualcosa di simile, senza alcuna parvenza di standard.

In generale gli algoritmi che stai cercando sono quelli basati su Bentley / McIlroy:

http://citeseerx.ist.psu.edu /viewdoc/summary?doi=10.1.1.11.8470

In particolare, questi algoritmi saranno vincenti se la dimensione del modello è maggiore della dimensione della finestra (~ 32k) utilizzata da gzip o della dimensione del blocco (100-900k) utilizzata da bzip2.

Sono utilizzati internamente da Google all'interno della loro implementazione BIGTABLE per archiviare pagine Web compresse per lo stesso motivo per cui le state cercando.

Poiché la compressione LZW (che praticamente tutti usano) comporta la costruzione di una tabella di caratteri ripetuti mentre si procede, come lo schema che si desidera limiterebbe a dover decomprimere l'intero archivio in una sola volta.

Se questo è accettabile nella tua situazione, potrebbe essere più semplice implementare un metodo che unisce i tuoi file in un unico file prima della compressione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top