En este momento estás viendo Comprimir ficheros con ZStandard en Linux

Comprimir ficheros con ZStandard en Linux

Comprimir ficheros con ZStandard en Linux

En este artículo vamos a ver la herramienta ZStandard para comprimir ficheros en sistemas GNU/Linux, y complementar las vistas en un artículo anterior: bzip2, gzip, xz y zip. La última versión es Zstandard v1.5.5, liberada el 4 de abril de 2023.

Sumario

  • Que es ZStandard
  • Por qué usar ZStandard
  • Instalación
  • Comprimir archivos con ZStandard
  • Como usar el diccionario de compresión

Que es ZStandard

Zstandard, también conocido como zstd, es un algoritmo de compresión lossless rápido que proporciona altas relaciones de compresión, creado por Yann Collet, un desarrollador de Facebook, en 2015.

Escrito en C y Python, también ofrece un modo especial para datos pequeños, llamado compresión de diccionario. La biblioteca de referencia permite un equilibrio entre velocidad y compresión. La biblioteca Zstandard se proporciona como software de código abierto mediante una licencia BSD. Su formato es estable y está publicado como IETF RFC 8878.

Puedes consultar «Smaller and faster data compression with Zstandard», donde Yann Collet y Chip Turner, nos dan información sobre los niveles de compresión (22 niveles), ratios, velocidad de compresión y descompresión y uso de memoria.

Logo de Zstandad
Logo de Zstandad

Por qué usar ZStandard

Seguramente estarás más familiarizado con el uso de compresores como gzip, bzip o xz, pero si necesitas una mayor tasa de compresión y mayor velocidad, prueba ZStandard.

Esta característica se debe a que, muchos de los algoritmos utilizados hoy en día, se centran en una de las métricas anteriores o intentan lograr un equilibrio entre ellas. ZStandard pulveriza las velocidades de operación de las demás herramientas.

Zstandard está siendo adoptado por grandes empresas para la compresión de enormes cantidades de datos, además de recibir un apoyo total por parte de distribuciones como Arch Linux, que cambió la compresión de sus paquetes xz a Zstandard.

Las bases de datos nos proporcionan un motivo de uso interesante. Sistemas como MySQL, PostgreSQL y MongoDB almacenan datos destinados al acceso en tiempo real. Las recientes mejoras del hardware, especialmente los dispositivos flash (SSD), han cambiado el equilibrio entre tamaño y rendimiento: ahora vivimos en un mundo donde las IOP (operaciones de entrada y salida «IO» por segundo) son bastante altas, pero la capacidad de nuestros dispositivos de almacenamiento es más baja que cuando los discos duros mecánicos dominaban el mercado.

Disco duro y de estado sólido
Disco duro y de estado sólido

En una prueba obtenida sobre la compresión de un archivo de 1350 Megabytes, con respecto a otros algoritmos se han obtenido los siguientes resultados. Datos de Sololinux.

Comparativa de compresión y velocidad. Datos de Sololinux
Comparativa de compresión y velocidad. Datos de Sololinux

Observamos que el punto fuerte de zstd es la velocidad y este es el factor más importante a la hora de comprimir y descomprimir ficheros para acceder a los datos.

Pocas distribuciones GNU/Linux lo implementan por defecto, pero sí que lo encontrarás en sus repositorios oficiales. Así que empezaremos por instalarlo.

Instalación

Para instalarlo en Debian y derivados, Ubuntu, Linux Mint, etc., ejecuta:

sudo apt install zstd

En Fedora, CentOS, Alma, Rocky y derivados:

sudo dnf  -y install zstd
# o
sudo yum -y install zstd

En Arch Linux, Manjaro y derivados:

sudo pacman -S zstd

Lo instalamos en Debian para probarlo. Como siempre primero actualizamos la lista de paquetes de los repositorios.

Actualización del sistema
Actualización del sistema

E instalamos la herramienta

sudo apt install zstd
Instalación de Zstandard
Instalación de Zstandard

Comprimir archivos con ZStandard

Vamos con un ejemplo para ver lo sencillo que es el uso de la herramienta. Utilizamos un fichero creado para el artículo «Compresion de ficheros bzip2, gzip, xz y zip en GNU/Linux», con nombre «FichGrande«.

zstd FichGrande
Compresión de fichero con zstd
Compresión de fichero con zstd

Observa que añade la extensión «.zst«. Para descomprimirlo utilizaremos la opción -d

zstd -d FichGrande.zst
Descompresión de fichero con zsdt
Descompresión de fichero con zsdt

Al igual que pasa con otros algoritmos de compresión, al descomprimir sobreescribe el fichero original.

Como hemos comentado arriba, dispone de múltiples niveles de compresión. Para elegirlos tenemos que añadir la opción -# y el nivel de compresión. Disponemos de 19 niveles de compresión, por defecto usará el nivel 3. Aunque con la opción –ultra, podemos habilitar niveles de compresión del 19 al 22, ten en cuenta que necesitará más memoria.

Para consultar todas las opciones disponibles ejecuta el comando con las opciones

zstd -h    #para obtener ayuda
# o
zstd -H    #para una ayuda más completa
Opciones de la herramienta
Opciones de la herramienta

También puedes acceder al código fuente y más información de ZStandard en github

Página de zstd en Github
Página de zstd en Github

Como usar el diccionario de compresión

Con las bases de datos bajo una presión cada vez mayor para entregar más y más solicitudes, la elección original de bloques de 16 KB hay que ponerla en duda. Con esta herramienta, tenemos la oportunidad de reducir el tamaño de los bloques para ofrecer una latencia menor y por tanto más rapidez al acceder a un único elemento del bloque. Pero reducir el tamaño del bloque afecta negativamente la relación de compresión, lo que genera costos de almacenamiento inaceptables. Con zstd, tenemos una manera de mitigar ese efecto, llamada compresión de diccionario.

El diccionario funciona si establecemos alguna correlación en una familia de pequeñas muestras de datos. Entrenamos zstd con algunas muestras que se guardan en un fichero llamado diccionario. Cuanto más específico sea un diccionario, más eficiente será (no existe un diccionario universal). Por lo tanto, implementar un diccionario por tipo de datos, proporcionará mayores beneficios.

El uso del diccionario proporciona unas ganancias que son más efectivas en las primeras KB. Luego, el algoritmo de compresión, irá utilizando gradualmente contenido previamente decodificado para comprimir mejor el resto del fichero.

Zstd admite los tipos de datos SMALLINT, INTEGER, BIGINT, DECIMAL, REAL, DOUBLE PRECISION, BOOLEAN, CHAR, VARCHAR, DATE, TIMESTAMP y TIMESTAMPTZ. Funciona especialmente bien para las columnas CHAR y VARCHAR que almacenan una gran variedad de cadenas de caracteres largas y cortas, como descripciones de productos, comentarios de usuarios, registros o cadenas JSON.

Para habilitar el diccionario

zstd --train RutaCompletaAlDiccionario/* -o NombreDiccionario

Comprimir con el diccionario

zstd -D NombreDiccionario Fichero

Descomprimir con el diccionario

zstd -D NombreDiccionario --decompress Fichero.zst

Si tienes algún comentario que hacer sobre este artículo, al pie del post tienes un formulario para hacerlo.

Si quieres contactar conmigo por cualquier otro asunto relacionado con el sitio, en la página de contacto, tienes un formulario más adecuado.

Y para suscribirte y recibir las novedades publicadas, tienes un enlace en pie de la página o desde aquí mismo.

Deja una respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.