Esiste un formato di compressione che supporta le operazioni di coda?


12

Sto cercando un formato di compressione che supporti l' tailedizione. Ciò significa che non è necessario leggere l'intero file per ottenere gli ultimi X byte non compressi. È possibile con uno qualsiasi dei formati come bzip2, xz, lzma, ecc?

Una volta ho codificato qualcosa usando gzip che poteva farlo. Fondamentalmente a un livello molto alto, quello che ha fatto è stato quello di cat insieme più blocchi gzip, quindi ho avuto un programma di utilità che poteva cercare indietro dalla fine del file fino a quando è iniziato l'ultimo blocco. Questi file erano completamente leggibili dalle utility standard di gzip, ma spero che ci sia qualcosa di un po 'più standardizzato disponibile.

Lo scopo finale di questo è per i file di registro che posso scrivere compressi, e quindi essere in grado di tailloro (anche quando non sono stati completamente scritti; cioè streaming) senza dover aspettare che tutto venga letto dal disco o dalla rete.

Risposte:


5

gzip ha un'opzione --rsyncable che fa essenzialmente lo stesso . La parte non standard sarebbe l'utilità "ztail" che riconosce gzip-block, ma sembra che tu l'abbia già risolto.


2
Naturalmente questa opzione ti limita effettivamente a qualcosa come -0,5 livello di compressione, anche se specifichi -9.
psusi,

dove stai ottenendo la versione di gzip che supporta questo? Se questa era un'opzione a un certo punto, sembra essere stata rimossa.
Patrick,

Le distribuzioni basate su Debian ce l'hanno - questo è da Ubuntu 10.04: root @ backup1: ~ # gzip -V gzip 1.3.12 root @ backup1: ~ # gzip -h | egrep rsync --rsyncable Crea un archivio rsync-friendly
the-wabbit

Apparentemente, alcuni altri manutentori della distribuzione (ad esempio Fedora) sembrano aver incluso anche le patch. E qui c'è una patch per un vecchio gzip: samba.org/netfilter/diary/gzip.rsync.patch che potrebbe applicarsi a una versione più recente con lievi modifiche, se hai davvero bisogno di autocompilare.
the-wabbit,

A proposito, le discussioni suggeriscono che l'impatto sulla compressione è piuttosto trascurabile (entro il 2-3%), sebbene il chilometraggio per un set di dati specifico possa variare. Se hai bisogno di una compressione "disponibile" con algoritmi adattativi come deflate, non c'è quasi modo di resettare l'algoritmo di tanto in tanto - ovviamente questo indurrà un colpo di efficienza di compressione.
the-wabbit,

0

FWIW: Ho sviluppato uno strumento da riga di comando sul codice sorgente zran.c di zlib che crea indici per i file gzip: https://github.com/circulosmeos/gztool

Può fare una coda continua di un file gzip con l' -Topzione. O solo una coda degli ultimi contenuti e basta, con -t(Molte altre opzioni disponibili).

Si noti che per ognuna di queste azioni gztoolverrà creato un file indice intercalato con quell'azione.

Gli indici possono essere interrotti in qualsiasi momento e riutilizzati e / o completati in seguito. E come si gztoolpuò semplicemente comandare per estrarre i dati da qualsiasi posizione nel file e creare l'indice intercalato con quell'azione, non c'è mai tempo perso quando lo si utilizza.

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.