¿Qué es Zstandard (zst)? El algoritmo de compresión de Facebook
La versión corta: Qué es Zstandard en realidad
Zstandard —a menudo abreviado como zstd con una extensión de archivo .zst— es un algoritmo de compresión de datos sin pérdida creado por Yann Collet en Facebook (ahora Meta). Fue lanzado como código abierto en 2016 y rápidamente encontró su lugar; el kernel de Linux lo adoptó en la versión 5.16. Facebook mismo confía en zstd en toda su vasta infraestructura, comprimiendo desde instantáneas de bases de datos hasta archivos de registro. El formato es ahora un estándar oficial de internet, completamente documentado en el RFC 8878. Internamente, zstd combina un enfoque LZ77 basado en diccionario con un moderno codificador de entropía llamado Asymmetric Numeral Systems (ANS). En términos prácticos, esto significa que comprime y descomprime datos a velocidades increíbles, a menudo sin sacrificar mucha relación de compresión en comparación con algoritmos más lentos y tradicionales. La extensión .zst significa el formato comprimido de un solo flujo. También verás .tar.zst, que es simplemente un archivo tar comprimido con zstd, al igual que los familiares .tar.gz o .tar.bz2. Si has descargado un paquete de Linux, una copia de seguridad de base de datos o un gran conjunto de datos recientemente, es muy probable que haya sido un archivo .zst o .tar.zst.
Cómo se compara Zstandard con gzip, bzip2 y xz
Cuando eliges una herramienta de compresión, siempre estás equilibrando tres factores: qué tan pequeña es la salida (relación de compresión), qué tan rápido comprime y qué tan rápido descomprime. Zstandard fue diseñado desde cero para superar al venerable gzip en los tres frentes a la vez, una afirmación que suena demasiado buena para ser verdad, pero que en gran medida se sostiene. Los propios benchmarks de Facebook en el corpus Silesia, una suite de pruebas estándar, muestran que zstd en su nivel predeterminado (nivel 3) alcanza una relación de 2.884x a una velocidad de compresión de 500 MB/s y más de 1.600 MB/s de descompresión. Para comparar, el nivel predeterminado de gzip obtiene una relación de 2.743x a aproximadamente 130 MB/s de compresión y 400 MB/s de descompresión. Los números no mienten: zstd es más rápido en ambas direcciones y comprime los archivos un poco más por defecto. Otras herramientas como bzip2 pueden lograr una mejor relación (alrededor de 3.0x), pero a paso de tortuga, a menudo por debajo de 20 MB/s para la compresión. Y aunque xz empuja las relaciones más allá de 3.2x, su velocidad de compresión de menos de 10 MB/s lo convierte en una opción inviable para cualquier cosa sensible al tiempo. El verdadero poder de Zstd proviene de sus 22 niveles de compresión. El nivel 1 se enfoca en la velocidad, perfecto para comprimir el tráfico de red en tiempo real. En el otro extremo, los niveles 19-22 (los modos "ultra") compiten con la relación de compresión de xz mientras que aún descomprimen un orden de magnitud más rápido. La mayoría de la gente se queda en el rango de 3-9. En Linux, puedes controlar esto fácilmente: `zstd -9 myfile.tar` tomará más tiempo de CPU pero producirá un archivo más pequeño que el predeterminado `zstd -3 myfile.tar`.
Entrenamiento de diccionario: La característica que la mayoría de la gente omite
La compresión por diccionario es una de las características más potentes —y más pasadas por alto— de zstd. Los algoritmos de compresión estándar funcionan encontrando patrones repetitivos dentro de un solo archivo. Pero, ¿qué pasa si el archivo es diminuto, como una carga útil JSON de 2 KB? Simplemente no hay suficientes datos para que el algoritmo construya un modelo útil de lo que se repite, por lo que la relación de compresión suele ser terrible. En algunos casos, el archivo 'comprimido' puede incluso terminar siendo más grande que el original. El entrenamiento de diccionario es la solución. Puedes alimentar a zstd con una gran muestra de tus datos —por ejemplo, miles de archivos de registro pequeños similares u objetos JSON— y generará un único archivo de diccionario que captura todos sus patrones comunes. Luego, tanto el compresor como el descompresor usan este diccionario compartido como punto de partida. Facebook informó haber logrado una compresión de 6x en pequeños blobs JSON que de otra manera apenas se comprimían, utilizando esta misma técnica. Para probarlo tú mismo desde la línea de comandos, primero entrenas un diccionario: `zstd --train /path/to/samples/* -o mydict.zst-dict`. Luego lo usas para comprimir un archivo: `zstd -D mydict.zst-dict smallfile.json`. El único inconveniente es que el descompresor también necesita exactamente el mismo archivo de diccionario. Esto lo convierte en un desafío operativo; tienes que almacenar y distribuir el diccionario junto con tus datos. Entonces, ¿quién usa esto realmente? Es un cambio de juego para los ingenieros de bases de datos, los desarrolladores backend que comprimen respuestas de API y cualquiera que maneje enormes volúmenes de archivos pequeños estructuralmente similares. Para el usuario promedio que simplemente comprime una carpeta, el zstd estándar es más que suficiente.
Dónde encuentras realmente archivos .zst
Probablemente ya has usado zstd sin siquiera darte cuenta. El algoritmo se ha extendido mucho más allá de los servidores de Facebook y ahora es una parte crítica del panorama moderno del software. Aquí tienes algunos lugares concretos donde encontrarás archivos .zst en la práctica: **Administradores de paquetes de Linux.** Arch Linux hizo el cambio de .tar.xz a .tar.zst en 2020, citando mejoras masivas en la velocidad de instalación de paquetes. Fedora ha seguido su ejemplo desde entonces. Cuando ejecutas `pacman -S` o `dnf install`, estás descargando y descomprimiendo archivos comprimidos .zst. **El kernel de Linux mismo.** Desde la versión 5.16, la imagen del kernel (bzImage) y el initramfs pueden comprimirse con zstd. Algunas distribuciones ahora envían kernels comprimidos con zstd por defecto para un tiempo de arranque notablemente más rápido. **Sistemas de bases de datos y almacenamiento.** RocksDB de Facebook tiene soporte nativo para zstd, al igual que ClickHouse, una popular base de datos analítica donde zstd es un códec recomendado. PostgreSQL 15 incluso agregó soporte para zstd para sus mensajes de replicación lógica. **Grandes descargas de conjuntos de datos.** Visita Hugging Face u otros archivos académicos, y encontrarás que muchos conjuntos de datos de aprendizaje automático ahora se distribuyen como archivos .zst o .tar.zst. Incluso el conjunto de datos Common Crawl, históricamente famoso por sus archivos .warc.gz, está viendo más exportaciones .zst. **Activos de juegos y distribución de software.** Mozilla utiliza zstd para entregar actualizaciones de Firefox de manera más eficiente, y algunos motores de juegos lo usan internamente para la transmisión rápida de activos durante el juego. La buena noticia es que para la mayoría de estos escenarios, no necesitas hacer nada especial. Si solo necesitas abrir o extraer el archivo, las herramientas modernas de tu sistema, como 7-Zip (la versión 19.00 y posteriores soportan .zst), lo manejarán automáticamente.
Abrir y convertir archivos .zst sin la línea de comandos
Seamos honestos, no todo el mundo quiere vivir en la terminal o memorizar banderas de compresión. Si te han enviado un archivo .zst y solo necesitas obtener su contenido, tienes varias opciones sencillas dependiendo de tu sistema operativo. **Windows:** 7-Zip es tu mejor amigo aquí. Agregó soporte completo para zstd en la versión 22.00 (lanzada en julio de 2022). Simplemente haz clic derecho en el archivo .zst, navega a '7-Zip > Extraer aquí', y listo. Si no funciona, es probable que tengas una versión anterior; todo lo que necesitas hacer es actualizarla. **macOS:** La Utilidad de Archivo incorporada aún no puede manejar .zst (a partir de macOS Sequoia), pero el excelente y gratuito archivador Keka lo hace perfectamente. Alternativamente, si usas Homebrew, un rápido `brew install zstd` seguido de `zstd -d file.zst` en la Terminal resuelve el problema. **Linux:** Es casi seguro que estás cubierto. La herramienta de línea de comandos `zstd` probablemente ya esté instalada o esté disponible en tu gestor de paquetes. Para descomprimir, simplemente ejecuta `zstd -d file.zst`. Para un archivo tar, `tar --use-compress-program=zstd -xf file.tar.zst` es el comando clásico, aunque muchos sistemas modernos también admiten el más simple `tar -I zstd -xf file.tar.zst`. **Conversión basada en navegador:** Aquí es donde una herramienta como CocoConvert brilla. Si necesitas descomprimir un archivo .zst sin instalar ningún software, puedes subirlo a CocoConvert y extraer su contenido directamente en tu navegador. Esto es ideal para archivos .zst de un solo flujo de un tamaño razonable. Para archivos masivos de varios gigabytes .tar.zst o archivos que dependen de un diccionario personalizado, una herramienta local será más práctica. CocoConvert es transparente al respecto: está diseñado para manejar los casos comunes de manera brillante, no todos los casos extremos posibles.
Crear archivos .zst: Cuándo tiene sentido y cuándo no
Zstandard es una opción fantástica cuando comprimes archivos para audiencias específicas: desarrolladores, administradores de sistemas o sistemas automatizados que ya lo soportan. Es perfecto para archivos internos, distribuir software o transferir datos donde la descompresión rápida en el otro extremo es una prioridad. Pero es absolutamente la elección incorrecta si le envías un archivo a una persona no técnica que lo abrirá en una máquina Windows estándar. Para ese trabajo, Zip sigue siendo el rey. Todos los sistemas operativos modernos manejan archivos .zip de forma predeterminada, sin preguntas, sin necesidad de software adicional. Si bien zstd está ganando terreno, aún no está ahí para el intercambio casual de archivos. Quédate con lo que funciona. Para archivar tus propios archivos, sin embargo, la historia es diferente. Usar zstd en un nivel superior (como -9) es un compromiso brillante. Cualquiera que haya mirado una pantalla esperando que una carpeta de 10 GB se comprima con xz conoce el dolor: puede tardar de 8 a 12 minutos. La misma carpeta podría tardar solo 90 segundos con `zstd -9`, resultando en un archivo solo ligeramente más grande. Ese es un compromiso que aceptaría cualquier día. Para crear un archivo .zst con CocoConvert, puedes subir tu archivo fuente y elegir .zst como formato de salida. El nivel de compresión predeterminado estará bien para casi todo. Ten en cuenta que CocoConvert comprime archivos individuales. Si quieres agrupar una carpeta completa en un único archivo .tar.zst, deberás crear primero el archivo .tar en tu máquina y luego comprimirlo, o usar un comando local como `tar -I zstd -cf output.tar.zst folder/`.
El resumen honesto: ¿Vale la pena aprender Zstandard?
Seamos claros: Zstandard no es un formato de nicho que podría desaparecer. Está profundamente integrado en el kernel de Linux, utilizado por las principales bases de datos y adoptado por los administradores de paquetes para grandes distribuciones de Linux. Con el respaldo de Meta y una próspera comunidad de código abierto, además de la estandarización oficial RFC, está garantizado que será una parte estable y a largo plazo del ecosistema de software. Para desarrolladores y administradores de sistemas, aprender a usar zstd se está convirtiendo en una habilidad básica. Comprender las compensaciones entre los niveles de compresión, saber cuándo un diccionario puede salvarte y entender la relación entre .zst y .tar.zst te ahorrará directamente tiempo y recursos al gestionar infraestructuras modernas. Para los usuarios cotidianos, la conclusión es mucho más simple. Si ves un archivo .zst, sabes lo que es: un archivo comprimido. No es un video ni un documento extraño, solo un contenedor. Y sabes que tienes formas fáciles de abrirlo, ya sea actualizando 7-Zip en Windows, consiguiendo Keka para macOS o usando una herramienta web como CocoConvert. Pero zstd no lo ha conquistado todo. Su única debilidad restante es el intercambio casual de archivos entre personas. Hasta que Windows y macOS puedan abrir archivos .zst simplemente haciendo doble clic, como lo hacen con .zip, seguirá siendo un formato que requiere un pequeño esfuerzo adicional por parte del destinatario. Para casi todo lo demás —cargas de trabajo de servidores, distribución de software, compresión de bases de datos y archivado a gran escala— zstd ya ha ganado. Es el nuevo valor predeterminado sensato, y por muy buenas razones.