11 puntos por xguru 2021-03-16 | 4 comentarios | Compartir por WhatsApp
  • Los archivos creados con tar de macOS resultan ser 15 veces más grandes que los creados con la función tarfile de Python

  • Causa: BSD/GNU tar mete los archivos dentro del comprimido sin un orden determinado, por lo que, según el tipo de archivos, la tasa de compresión puede empeorar

→ La función tarfile de Python usa ordenamiento por defecto

  • En GNU tar, es posible usar la opción --sort para ordenarlos por name/inode antes de incluirlos → al aplicar el ordenamiento, se obtiene la misma tasa de compresión

4 comentarios

 
deadcat 2021-03-16

No lo entiendo del todo, pero ¿por qué cambia la tasa de compresión al aplicar ordenamiento? La tasa de compresión de cada archivo individual debería ser la misma.

 
dalinaum 2021-03-22

El algoritmo que se está usando es Deflate. Este guarda en una ventana deslizante el contenido que ya se usó para la compresión. Si esta vez procesó 10 bytes, esos 10 bytes procesados actualmente se agregan al final de la ventana deslizante, y el tamaño de la ventana se mantiene fijo.

Cuando se encuentra contenido igual al que está guardado en la ventana deslizante, se comprime escribiendo en su lugar un LLD (Literal, Length, Distance). Distance indica desde qué punto de la ventana deslizante empieza el contenido coincidente, Length la longitud de esa coincidencia dentro de la ventana deslizante, y Literal el primer carácter que no coincide.

Como en Deflate es importante qué contenido hay dentro de la ventana deslizante, también importa si vio contenido similar justo antes; si ha visto archivos parecidos, es posible que comprima mejor.

 
dalinaum 2021-03-22

Para ver cómo se comprime de esa manera, consulta la siguiente diapositiva. (gzip también se basa en Deflate.)

https://speakerdeck.com/dalinaum/…

 
xguru 2021-03-16

Como el contenido de archivos con el mismo nombre o nombres parecidos dentro de la misma carpeta será similar, la tasa de compresión probablemente será mayor.

Parece que se refiere a que, como el rango en el que se buscan esas coincidencias al comprimir no es tan amplio, si se ordenan los archivos, es más probable que esos similares queden juntos y se compriman mejor.