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.
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.
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.
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.
E instalamos la herramienta
sudo apt install zstd
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
Observa que añade la extensión «.zst«. Para descomprimirlo utilizaremos la opción -d
zstd -d FichGrande.zst
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
También puedes acceder al código fuente y más información de ZStandard 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.