Skip to main content

Estudio de compresores: Tiempo & Ratio por tipo de archivo

La compresión de datos hoy en dia es una tecnologia altamente usada. Ya que siempre buscamos el crecimiento exponencial del almacenaje de datos: soportes de almacenamiento mayores con archivos menores (Mp3, DivX...). En este artículo no vamos a tratar con compresiones del estilo Mp3, que tienen pérdida de cualidad y solo sirven para un tipo de datos. Trataremos con los genericos: rar, zip, 7z, bzip y gzip. Los estudiaremos teniendo en cuenta dos factores distintos: Ratio de compresión y Tiempo de compresión. También con tipos de datos distintos: Texto, Audio, Imagen, Binario...


Candidatos

La máquina utilizada es un Core2 Duo 6430 con 2GB. Seguidamente una lista de los programas utilizados para cada compresión.

Compresor Comando utilizado Multiproceso (SMP)
Bzip2 bzip2 -zc9 entrada > salida No
PBzip2 pbzip2 -zc9 entrada > salida Si
Gzip gzip -9c entrada > salida No
P7z (7z) 7za a -t7z salida entrada Si
P7z (zip) 7z a -tzip salida entrada Si
Rar rar a -m5 salida entrada No

El hecho de que soporten multiproceso, favorece los ordenadores de doble núcleo y/o procesador.

Tipo de datos

Los distintos algoritmos de compresión, pueden funcionar mejor o peor según el tipo de datos que estemos comprimiendo. Por ejemplo, no es lo mismo comprimir 100M de texto (donde las repeticiones son numerosas) que un binario o archivo de audio. La siguiente tabla muestra los tipos de archivo que hemos utilizado.

Tipo Tamaño (KB) Descripción
Código Fuente 278276 El código fuente de Linux empaquetado: linux-2.6.25.4.tar
Audio 320796 Un archivo de audio no comprimido: musica.wav
Binario 203736 Binario generado con: "cat /usr/bin/* > binario.bin [CTRL+C]"
ISO (comprimido) 163556 Archivo ISO de Debian: debian-40r3-i386-netinst.iso Generalmente comprimido
Texto de Zeros 2045432 Archivo de texto con solo zeros: "cat /dev/zeros > zeros [CTRL+C]"
Imagen 20688 Imagen sin comprimir: imagen.bmp

Resultados (tabla)

Tiempo

Tiempo que ha tardado la compresión en segundos.

bzip2 pbzip2 gzip 7z (7z) 7z (zip) rar
Código 51,74 29,47 39,02 198,3 67,28 89,76
Audio 23,43 13,72 10,61 48,06 26,02 54,04
Binario 41,2 24,09 88,95 86,33 43,62 54,04
ISO 48,46 34,32 10,98 60,55 14,25 133,64
Zeros 51,78 46,58 21,76 224,49 207,9 211,86
Imagen 4,23 2,73 1,97 12,58 4,07 4,81

Ratio

Ratio de compresion sobre 100: 100-(Tamaño_Comprimido/Tamaño_original)*100
Ratio = "Se ha reducido un X% del tamaño original"
Ej: Se ha reducido un 80% del tamaño original: 300*80/100=240 El nuevo archivo ocupa 60

bzip2 pbzip2 gzip 7z (7z) 7z (zip) rar
Código 82,93 82,85 78,39 85,4 79,05 85,6
Audio 86,71 86,7 86,77 87,39 86,74 88,61
Binario 63,04 62,86 59,53 59,53 60,56 75,57
ISO 2,88 2,88 3,24 3,99 3,22 4,18
Imagen 48,88 48,86 33,49 49,52 37,43 60,83

Nota: En el estudio del ratio se ha decidido prescindir del archivo "Zeros", ya que todos los ratios superan el 99,99%
Seguidamente se muestra el tamaño del archivo Zeros comprimido

Tamaño original de Zeros: 2045432KB = 2GB

Compresor Tamaño comprimido (KB)
bzip 4
pbzip 4
gzip 1988
7z (7z) 296
7z (zip) 2404
rar 144

Resultados (Gráficos)

Tiempo de compresión

Tiempo de compresión para cada compresor, menor es mejor.

Como podemos ver, el compresor más rápido es Pbzip2 seguido muy de cerca por Gzip. Hay que tener en cuenta que pbzip2 tiene soporte SMP, mientras que gzip no. Esto hace pensar que una versión de gzip con soporte multiproceso, se llevaría la palma.
El más lento, es claramente 7z con su propia compresión 7z. Donde da peor resultado es en la compresión de texto (código y zeros).
El archivo de zeros es en general, el que más tiempo requiere. Aunque hay que tener en cuenta la grandaria de los datos (2GB) Y el enorme ratio de compresión que se consigue. No obstante, esta gráfica no sirve para comparar el tiempo de los distintos archivos. Ya que cada uno tiene un tamaño distinto.

Ratio de compresión

Ratio de compresión para cada compresor, mayor es mejor.

En el ratio de compresión, rar es quien obtiene mejores resultados. Sobretodo para el binario y la imagen, en relación al resto. Mientras que gzip se queda levemente en última posición, siguiendo muy de cerca a zip. Sosprendentemente el tipo de archivo que obtiene más compresión es el de audio, y en segundo lugar, como es de esperar el código fuente.
La imagen ISO es la que ofrece peor ratio, ya que generalmente es un archivo comprimido.

Relación Ratio/Tiempo

Estas gráficas relación el tiempo con el ratio de compresión. De esta manera puede verse cual es el mejor compresor ratio/tiempo
Menor es mejor

En las dos primeras posiciones encontramos Pbzip2 y Gzip. Como podemos observar en las gráficas anteriores, superan al resto en tiempo, mientras que en el ratio no son los mejores pero se mantienen. El peor es claramente 7z, aunque ofrece ratios bastante buenos demora excesivo tiempo.

Esta gráfica no nos sirve para comparar los parámetros ratio/tiempo entre los distintos tipos de archivos, ya que cada uno de ellos tiene un tamaño distinto, y por lo tanto el tiempo no es comparable

¿Que tipo ofrece mejor ratio?

Para finalizar, un pequeño gráfico donde observamos que tipo de archivo ofrece un mejor ratio de compresión.
Se ha calculado la media, Mayor es mejor.

Realmente todos, menos la ISO, ofrecen un buen ratio de compresión. Sobretodo el Audio (86%) y el Código fuente (83%).

Conclusiones

Este estudio puede ofrecer una idea de los ratios y tiempos, pero lo ideal sería hacerlo con varios archivos del mismo tipo. Ya que estamos generalizando todos los archivos de Audio (por ejemplo) en uno solo. Y no todos son iguales.

A la pregunta: "¿Segun esto cual es el mejor compresor?", le respondo que "Depende". Si lo que buscas es velocidad cosa que puede ser útil en por ejemplo un juego que necesita constantemente descomprimir texturas lo más rápido posible: pbzip2 o gzip.
Si lo que se busca es ratio de compresión para (p.e) enviar un archivo via internet, rar.
El ratio también depende del tipo de archivo, según los datos con que hemos hecho el estudio, para binarios, imagenes y audio el mejor es rar. Mientras que para código fuente 7z.

Si tenemos que decir cual es el mejor en la relación tiempo/compresión, me quedo con GZIP. Teniendo en cuenta que es monoproceso, ofrece una velocidad más que excelente. Además de buenos ratios (no los mejores, pero se mantiene cerca de la media). Además existe ya un proyecto para añadirle soporte SMP llamado pigz
Y el peor ZIP. Aunque no se queda excesivamente atrás, en general ofrece los peores resultados.