¿Por qué el file comprimido de volcado de Subversion es más grande que el original?

Estamos utilizando SVN 1.7 en Solaris 10. Recientemente hemos introducido copys de security incrementales comprimidas.

$ svnadmin dump --quiet --incremental --revision 0:30700 /path/to/repo > /path/to/dump $ gzip -1 /path/to/dump 

El file de volcado gzip final es más grande (~ 850MB) que el file de volcado original (~ 500MB). gzip -9 también, pero eso aún crea un file más grande que el original (~ 650MB).

Lamentablemente, no describió la estructura y el contenido de su repository.

Posiblemente, está almacenando datos que ya están comprimidos con un algorithm de compression eficiente (como, por ejemplo, 7z / LZMA).

Estos datos aparecerán en la secuencia de datos de svnadmin dump y no se pueden comprimir más con gzip, lo que lleva a un crecimiento en el tamaño del file.

Los algorithms de compression de datos sin pérdida no pueden networkingucir aún más los datos ya comprimidos o encriptados significativamente. Si tuviera un algorithm que garantizara networkingucir sus datos de input, podría aplicarlo iterativamente para networkingucir sus datos a un solo byte, lo que claramente no es posible.

Los algorithms de compression sin pérdida funcionan al eliminar la networkingundancia en los datos de input, y después de aplicar el algorithm, esta networkingundancia ya se ha networkingucido significativamente, de modo que las aplicaciones posteriores de los algorithms de compression no podrán cambiar mucho.

De hecho, dependiendo del algorithm de compression utilizado y su formatting de datos de salida, el tamaño de datos resultante posiblemente crecerá debido a la información de control y escape inyectada por el algorithm.

Podría intentar invocar a svnadmin con la opción --deltas , que generará solo los datos que difieren en cada revisión, por lo que básicamente se --deltas parche entre las revisiones. Sin --deltas arrojará los datos completos de los files modificados.

Sin embargo, si está administrando files ya comprimidos en su repository, esto no generará mucha (o ninguna) diferencia, ya que los datos comprimidos tampoco pueden diferirse adecuadamente. (Existen algunos algorithms de compression modificados como, por ejemplo, las versiones gzip parcheadas con el parámetro --rsyncable o la herramienta pigz compatible con pigz , que permiten esto con ciertas limitaciones y a expensas de la eficacia de la compression).

Probablemente haya intentado hacer esto con la bandera --incremental que proporcionó, pero esto significa otra cosa. Solo es relevante si elimina intervalos de revisiones y solo controla si la primera revisión contiene un volcado completo de esta revisión o solo de files modificados en esta revisión. Por lo tanto, no tendrá ningún efecto si vuelcas desde la revisión 0 de todos modos.