Zstandard es un algoritmo de compresión de datos sin pérdida desarrollado por Yann Collet en Facebook. zstd es la implementación de referencia correspondiente en C, publicada como software de código abierto el 31 de agosto de 2016.[2][3]
Zstandard | ||
---|---|---|
![]() | ||
Información general | ||
Tipo de programa | biblioteca de software | |
Licencia |
| |
Información técnica | ||
Programado en | C | |
Versiones | ||
Última versión estable | 1.5.720 de febrero de 2025 | |
Enlaces | ||
Sitio web oficial
Repositorio de código
| ||
zstd | ||
---|---|---|
![]() | ||
github.com/facebook/zstd/blob/dev/doc/zstd compression format.md | ||
Información general | ||
Extensión de archivo |
.zst[1] | |
Tipo de MIME |
application/zstd[1] | |
Número mágico |
| |
Tipo de formato | compresor de archivos y algoritmo de compresión | |
Estándar(es) | RFC 8878 | |
Formato abierto | ? | |
En 2018 el algoritmo se publicó como RFC 8478, que también define un tipo de medio asociado "application/zstd", extensión de nombre de archivo "zst" y codificación de contenido HTTP "zstd". [4]
Zstandard fue diseñado para ofrecer una relación de compresión comparable a la del algoritmo DEFLATE (desarrollado en 1991 y utilizado en los programas originales ZIP y gzip), pero más rápida, especialmente para la descompresión. Se puede ajustar con niveles de compresión que van desde -7 (el más rápido) [5] a 22 (la velocidad de compresión más lenta, pero la mejor relación de compresión).
A partir de la versión 1.3.2 (octubre de 2017), zstd implementa opcionalmente la búsqueda y deduplicación de rango muy largo ( --long
, ventana de 128 MiB) similar a rzip o lrzip.[6]
La velocidad de compresión puede variar en un factor de 20 o más entre los niveles más rápidos y más lentos, mientras que la descompresión es uniformemente rápida, variando en menos del 20% entre los niveles más rápidos y más lentos.[7] La línea de comandos Zstandard tiene un modo "adaptativo" (--adapt
) que varía el nivel de compresión dependiendo de las condiciones de E/S, principalmente qué tan rápido puede escribir la salida.
Zstd en su nivel de compresión máximo proporciona una relación de compresión cercana a lzma, lzham y ppmx, y rinde mejor que lza o bzip2.[8][9] Zstandard alcanza la frontera actual de Pareto, ya que se descomprime más rápido que cualquier otro algoritmo actualmente disponible con una relación de compresión similar o mejor.[10][11]
Los diccionarios pueden tener un gran impacto en la tasa de compresión de archivos pequeños, por lo que Zstandard puede utilizar un diccionario de compresión proporcionado por el usuario. También ofrece un modo de entrenamiento, capaz de generar un diccionario a partir de un conjunto de muestras.[12][13] En particular, se puede cargar un diccionario para procesar grandes conjuntos de archivos con redundancia entre archivos, pero no necesariamente dentro de cada archivo, como en el caso de los archivos de registro.
Zstandard combina una etapa de coincidencia de diccionario (
LZ77) con una gran ventana de búsqueda y una etapa rápida de codificación de entropía. Utiliza tanto la codificación Huffman (usada para las entradas en la sección Literales)[14] como la entropía de estados finitos (FSE), una versión rápida en tablas de ANS, tANS, utilizada para las entradas en la sección Secuencias. Debido a la forma en que FSE transfiere el estado entre símbolos, la descompresión implica procesar los símbolos dentro de la sección Secuencias de cada bloque en orden inverso (del último al primero).
El kernel de Linux ha incluido Zstandard desde noviembre de 2017 (versión 4.14) como método de compresión para los sistemas de archivos btrfs y squashfs.[15][16][17]
En 2017, Allan Jude integró Zstandard en el kernel de FreeBSD,[18] y posteriormente se integró como una opción de compresor para volcados de núcleo (tanto programas de usuario como pánicos de núcleo). También se utilizó para crear un método de compresión OpenZFS de prueba de concepto[7] que se integró en 2020.[19]
Las bases de datos AWS Redshift y RocksDB incluyen soporte para la compresión de campos mediante Zstandard.
En marzo de 2018, Canonical probó el uso de zstd como método de compresión de paquetes deb de forma predeterminada para la distribución Ubuntu Linux.[20] En comparación con la compresión xz de paquetes deb, zstd en el nivel 19 descomprime significativamente más rápido, pero al costo de archivos de paquetes un 6% más grandes. Se agregó soporte a Debian (y posteriormente, a Ubuntu) en abril de 2018 (en la versión 1.6~rc1).[21][20][22]
Fedora agregó soporte ZStandard a RPM en mayo de 2018 (versión 28 de Fedora) y lo usó para empaquetar la versión en octubre de 2019 (versión 31 de Fedora). [23] En Fedora 33, el sistema de archivos está comprimido de forma predeterminada con zstd.[24][25]
Arch Linux agregó soporte para zstd como método de compresión de paquetes en octubre de 2019 con el lanzamiento del administrador de pquetes pacman 5.2[26] y en enero de 2020 cambió de xz a zstd para los paquetes en el repositorio oficial. Arch usa zstd -c -T0 --ultra -20 -
; el tamaño de todos los paquetes comprimidos combinados aumentó en un 0,8 % (en comparación con xz), la velocidad de descompresión es 14 veces más rápida, la memoria de descompresión aumentó en un 50MiB cuando se utilizan varios subprocesos y la memoria de compresión aumenta, pero se escala con la cantidad de subprocesos utilizados.[27][28][29] Posteriormente, Arch Linux también cambió a zstd como el algoritmo de compresión predeterminado para el generador de disco RAM inicial mkinitcpio.[30]
Se utiliza una implementación completa del algoritmo con una opción para elegir el nivel de compresión .NSZ/.XCZ [31] desarrollados por la comunidad homebrew para la consola de juegos híbrida Nintendo Switch. [32] También es uno de los muchos algoritmos de compresión compatibles con el fprmato de archivo de imagen de disco RVZ para Wii y GameCube.
El 15 de junio de 2020, Zstandard se implementó en la versión 6.3.8 del formato de archivo zip con el número de códec 93, desestimando el número de códec anterior 20 tal como se implementó en la versión 6.3.7, lanzada el 1 de junio.[33][34]
En marzo de 2024, la versión 123 de Google Chrome (y los navegadores basados en Chromium como Brave o Microsoft Edge) agregaron compatibilidad con zstd en el encabezado HTTP Content-Encoding
.[35] En mayo de 2024, la versión 126.0 de Firefox agregó compatibilidad con zstd en el encabezado HTTP Content-Encoding
.[36]
La implementación de referencia está licenciada bajo la licencia BSD, publicada en GitHub.[37] Desde la versión 1.0, contó con una concesión adicional de derechos de patente.[38]
A partir de la versión 1.3.1,[39] esta concesión de patente se abandonó y la licencia se cambió a una licencia dual BSD + GPLv2.[40]