zstd
Zstandard, comúnmente conocido por el nombre de su implementación de referencia zstd, es un algoritmo de compresión de datos sin pérdidas desarrollado por Yann Collet en Facebook. Zstd es la implementación de referencia en C. La versión 1 de esta implementación se lanzó como software de código abierto el 31 de agosto de 2016.
Características
Zstandard fue diseñado para brindar una relación de compresión comparable a la del algoritmo DEFLATE (desarrollado en 1991 y utilizado en los programas ZIP y gzip originales), pero más rápido, especialmente para la descompresión. Se puede ajustar con niveles de compresión que van desde 7 negativo (el más rápido) hasta 22 (el más lento en velocidad de compresión, pero con la mejor relación de compresión).
El paquete zstd incluye implementaciones paralelas (multiproceso) de compresión y descompresión. A partir de la versión 1.3.2 (octubre de 2017), zstd implementa opcionalmente búsqueda y deduplicación de muy largo alcance (--long
ventana de 128 MiB) similar a rzip o lrzip.
La velocidad de compresión puede variar en un factor de 20 o más entre los niveles más rápido y más lento, mientras que la descompresión es uniformemente rápida, variando menos del 20 % entre los niveles más rápido y más lento. La línea de comandos de Zstandard tiene un modo "adaptable" (--adapt
) que varía el nivel de compresión según las condiciones de E/S, principalmente qué tan rápido puede escribir la salida.
Zstd en su nivel de compresión máximo brinda una relación de compresión cercana a lzma, lzham y ppmx, y funciona mejor que lza o bzip2. Zstandard alcanza la frontera de Pareto actual, ya que descomprime más rápido que cualquier otro algoritmo disponible actualmente con una relación de compresión similar o mejor.
Los diccionarios pueden tener un gran impacto en la relación de compresión de archivos pequeños, por lo que Zstandard puede usar 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. En particular, se puede cargar un diccionario para procesar grandes conjuntos de archivos con redundancia entre archivos, pero no necesariamente dentro de cada archivo, por ejemplo, archivos de registro.
Diseño
Zstandard combina una etapa de comparación de diccionarios (LZ77) con una ventana de búsqueda grande y una etapa de codificación de entropía rápida. Utiliza tanto la codificación Huffman (utilizada para las entradas en la sección de Literales) como la entropía de estado finito (FSE), una versión tabulada rápida de ANS, tANS, utilizada para las entradas en la sección de Secuencias. Debido a la forma en que FSE traslada el estado entre símbolos, la descompresión implica el procesamiento de símbolos dentro de la sección Secuencias de cada bloque en orden inverso (del último al primero).
Uso
Extensión de nombre de archivo | .zst |
---|---|
tipo de medio de internet | aplicación/zstd |
número mágico | 28 b5 2f fd |
tipo de formato | Compresión de datos |
Estándar | RFC 8478 |
Sitio web | github.com /facebook /zstd /blob /dev /doc /zstd _compresión _formato.md |
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.
En 2017, Allan Jude integró Zstandard en el kernel de FreeBSD y, posteriormente, se integró como una opción de compresor para volcados de núcleo (tanto programas de usuario como kernel panic). También se utilizó para crear un método de compresión OpenZFS de prueba de concepto que se integró en 2020.
Las bases de datos de AWS Redshift y RocksDB incluyen compatibilidad con 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. En comparación con la compresión xz de paquetes deb, zstd en el nivel 19 se descomprime significativamente más rápido, pero a costa de archivos de paquete un 6 % más grandes. El desarrollador de Debian, Ian Jackson, prefirió esperar varios años antes de la adopción oficial.
En 2018, el algoritmo se publicó como RFC 8478, que también define un tipo de medio asociado "aplicación/zstd", una extensión de nombre de archivo "zst" y una codificación de contenido HTTP "zstd".
Arch Linux agregó soporte para zstd como método de compresión de paquetes en octubre de 2019 con el lanzamiento del administrador de paquetes pacman 5.2 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 13 veces más rápida, la memoria de descompresión aumentó en 50 MiB cuando se usan varios subprocesos, la memoria de compresión aumenta pero se escala con la cantidad de subprocesos utilizados. Más tarde, Arch Linux también cambió a zstd como algoritmo de compresión predeterminado para el generador de ramdisk inicial de mkinitcpio.
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 (Fedora 31). En Fedora 33, el sistema de archivos está comprimido por defecto con zstd.
La implementación completa del algoritmo con una opción para elegir el nivel de compresión se usa en los formatos de archivo.NSZ/.XCZ desarrollados por la comunidad homebrew para la consola de juegos híbrida Nintendo Switch. Del mismo modo, también es uno de los muchos algoritmos de compresión admitidos en el formato de archivo de imagen de disco.RVZ Nintendo Wii y Nintendo GameCube.
En 2020, Zstandard se implementó en la versión 6.3.8 del formato de archivo zip con el códec número 93. El número anterior 20 de la versión 6.3.7 quedó obsoleto, por lo que hay disponible un segundo formato de archivo con zip para los archivos Zstandard. Las nuevas versiones de los programas zip suelen admitir esta nueva función.
Tino Reichardt desarrolla 7-Zip ZS, una bifurcación de 7-Zip FM compatible con Zstandard (y otros formatos). Actual está aquí soporte de Zstandard 1.5.0.
Modern7z, un complemento de Zstandard (y otros formatos) para 7-Zip FM, fue desarrollado por Denis Anisimov (TC4shell).
p7zip también soporta en una nueva versión Zstandard 1.4.9.
Licencia
La implementación de referencia tiene la licencia BSD, publicada en GitHub. Desde la versión 1.0, tenía una concesión adicional de derechos de patente.
A partir de la versión 1.3.1, esta concesión de patente se eliminó y la licencia se cambió a una licencia dual BSD + GPLv2.
Contenido relacionado
Ward Cunningham
Kerberos (protocolo)
Almacenamiento conectado en red