Zstandard es un algoritmo de compresión de datos sin pérdidas 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. [ 3 ] [ 4 ]
El algoritmo se publicó en 2018 como RFC 8478 , que también define un tipo de medio asociado "application/zstd", la extensión de nombre de archivo "zst" y la codificación de contenido HTTP "zstd". [ 5 ]
Características
Zstandard se diseñó para ofrecer 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ápida, especialmente para la descompresión. Es ajustable con niveles de compresión que van desde -7 (el más rápido) [ 6 ] hasta 22 (el más lento en velocidad de compresión, pero con 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 muy largo alcance ( ventana de --long, 128 MiB) de forma similar a rzip o lrzip . [ 7 ]
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. [ 8 ] La línea de comandos Zstandard tiene un --adaptmodo "adaptativo" ( ) que varía el nivel de compresión dependiendo de las condiciones de E/S, principalmente de la velocidad a la que puede escribir la salida.
Zstandard en su nivel máximo de compresión ofrece una relación de compresión cercana a lzma , lzham y ppmx . [ 9 ] [ 10 ] A partir de 2019, Zstandard alcanza la frontera de Pareto para la descompresión, ya que produce una salida más rápida que cualquier otro algoritmo de código abierto con una relación de compresión similar o mejor. [ 11 ]
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. [ 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 para archivos de registro .
Diseño
Zstandard combina una etapa de coincidencia de diccionario ( LZ77 ) con una ventana de búsqueda grande y una etapa de codificación de entropía rápida . Utiliza la codificación de Huffman junto con la entropía de estado finito (FSE), una variante de tANS . [ 14 ]
Uso

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 , [ 16 ] [ 17 ] [ 18 ] así como para módulos del kernel cargables .
En 2017, Allan Jude integró Zstandard en el núcleo de FreeBSD , [ 19 ] y posteriormente se integró como una opción de compresor para volcados de memoria (tanto de programas de usuario como de errores del núcleo). También se utilizó para crear un método de compresión OpenZFS de prueba de concepto [ 8 ] que se integró en 2020. [ 20 ]
Las bases de datos AWS Redshift y RocksDB incluyen soporte para la compresión de campos mediante Zstandard. [ 21 ]
En marzo de 2018, Canonical probó [ 22 ] el uso de zstd como método de compresión de paquetes deb por defecto para la distribución Ubuntu Linux. En comparación con la compresión xz de paquetes deb, zstd en el nivel 19 descomprime significativamente más rápido, pero a costa de archivos de paquete un 6 % más grandes. El soporte se añadió a Debian (y posteriormente a Ubuntu) en abril de 2018 (en la versión 1.6~rc1). [ 23 ] [ 22 ] [ 24 ]
Fedora añadió soporte para ZStandard a RPM en mayo de 2018 (Fedora release 28) y lo utilizó para empaquetar la versión en octubre de 2019 (Fedora 31). [ 25 ] En Fedora 33, el sistema de archivos se comprime por defecto con zstd. [ 26 ] [ 27 ]
Arch Linux agregó soporte para zstd como método de compresión de paquetes en octubre de 2019 con el lanzamiento del gestor de paquetes pacman 5.2 [ 28 ] y en enero de 2020 cambió de xz a zstd para los paquetes en el repositorio oficial. Arch usa zstd -c -T0 --ultra -20 -; mientras que 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 50 MiB cuando se usan múltiples hilos, y la memoria de compresión aumentó pero escala con el número de hilos utilizados. [ 29 ] [ 30 ] [ 31 ] Arch Linux también cambió más tarde a zstd como algoritmo de compresión predeterminado para el generador de ramdisk inicial mkinitcpio . [ 32 ]
El 15 de junio de 2020, Zstandard se implementó en la versión 6.3.8 del formato de archivo zip con el códec número 93, dejando obsoleto el códec número 20 anterior, que se implementó en la versión 6.3.7, publicada el 1 de junio. [ 33 ] [ 34 ]
El 31 de octubre de 2023 se agregó compatibilidad oficial con Zstd para compresión/descompresión al Explorador de Windows en Windows 11 (mediante el paquete de actualización KB5031455).
En marzo de 2024, Google Chrome versión 123 (y navegadores basados en Chromium como Brave o Microsoft Edge ) agregaron soporte para zstd en el encabezado HTTPContent-Encoding . [ 35 ] En mayo de 2024, Firefox versión 126.0 agregó soporte para zstd en el encabezado HTTPContent-Encoding . [ 36 ]
Licencia
La implementación de referencia está licenciada bajo la licencia BSD , publicada en GitHub . [ 37 ] Desde la versión 1.0, publicada el 31 de agosto de 2016, [ 38 ] tuvo una concesión adicional de derechos de patente. [ 39 ]
A partir de la versión 1.3.1, publicada el 20 de agosto de 2017, [ 40 ] esta concesión de patente fue eliminada y la licencia se cambió a una licencia dual BSD + GPLv2. [ 41 ]
Véase también
- LZ4 (algoritmo de compresión) : un miembro rápido de la familia LZ77.
- LZFSE : un algoritmo similar utilizado por Apple desde iOS 9 y OS X 10.11, y que se convirtió en código abierto el 1 de junio de 2016.
- Zlib
- Brotli – también integrado en los navegadores
- Gzip : una de las herramientas de compresión más utilizadas.
Referencias
- ↑ "Colaboradores de facebook/zstd" . github.com . Consultado el 26 de enero de 2021 .
- ↑ "Versión Zstandard v1.5.7" . Consultado el 21 de febrero de 2025 .
- ↑ De Simone, Sergio (2 de septiembre de 2016). "Facebook publica en código abierto un nuevo algoritmo de compresión que supera a Zlib" . InfoQ. Archivado del original el 7 de octubre de 2021. Recuperado el 20 de abril de 2019 .
- ↑ Williams, Chris (31 de agosto de 2016). "La vida imita a la sátira: Facebook promociona a un asesino de izquierdistas como el flautista de Hamelín de Silicon Valley" . The Register . Archivado del original el 3 de septiembre de 2016. Recuperado el 6 de septiembre de 2016 .
- ↑ Collet, Yann (octubre de 2018). Kucherawy, Murray S. (ed.). Compresión Zstandard y el tipo de medio application/zstd . Solicitud de comentarios del Grupo de Trabajo de Ingeniería de Internet. IETF . doi : 10.17487/RFC8478 . RFC 8478. Consultado el 7 de octubre de 2020 .
- ↑ "Lanzamiento de Zstandard v1.3.4: todo más rápido · facebook/zstd" . GitHub . Archivado del original el 11 de septiembre de 2021. Consultado el 27 de marzo de 2024 .
- ↑ "Interfaz de línea de comandos para la biblioteca Zstandard" . GitHub . Facebook. 28 de octubre de 2021.
- 1 2 Jude, Allan (2017). "ZStandard en ZFS" (PDF) . open-zfs.org . Archivado (PDF) del original el 18 de diciembre de 2019. Recuperado el 20 de abril de 2019 .
- ↑ Mahoney, Matt. "Silesia Open Source Compression Benchmark" . Archivado del original el 21 de enero de 2022. Recuperado el 10 de mayo de 2019 .
- ↑ Mahoney, Matt (29 de agosto de 2016). "Large Text Compression Benchmark, .2157 zstd" . Archivado del original el 31 de marzo de 2022. Recuperado el 10 de mayo de 2019 .
- ↑ TurboBench: Prueba de rendimiento de compresión de contenido web estático/dinámico , PowTurbo, archivado del original el 17 de marzo de 2022 , consultado el 6 de enero de 2026.
- ↑ Bockelman, Brian; Pivraski, Jim; Shadura, Oksana; Zhang, Zhe (11 de octubre de 2017). "Actualización de contribuciones de DIANA" (PDF) . Fermilab . Archivado (PDF) del original el 25 de enero de 2018. Recuperado el 27 de marzo de 2024.
Los desarrolladores de Facebook informan de mejoras masivas en la velocidad y la relación de compresión al usar diccionarios
. - ↑ Collet, Yann; Turner, Chip (31 de agosto de 2016). "Compresión de datos más pequeña y rápida con Zstandard" . Facebook. Archivado del original el 27 de septiembre de 2016. Recuperado el 3 de septiembre de 2016 .
- ↑ «Formato de compresión Zstandard» . GitHub . Facebook. 28 de octubre de 2021.
- 1 2 3 4 Collet, Yann (febrero de 2021). Kucherawy, Murray S. (ed.). Compresión Zstandard y el tipo de medio application/zstd . Solicitud de comentarios del Grupo de Trabajo de Ingeniería de Internet. IETF . doi : 10.17487/RFC8878 . RFC 8878. Recuperado el 26 de febrero de 2023 .
- ↑ Corbet, Jonathan (17 de septiembre de 2017). "El resto de la ventana de fusión 4.14 [ LWN.net ] " . lwn.net . Archivado del original el 22 de noviembre de 2021 . Recuperado el 27 de marzo de 2024 .
- ↑ "Linux_4.14" . Kernelnewbies.org . 30 de diciembre de 2017. Archivado del original el 10 de enero de 2018. Consultado el 16 de agosto de 2018 .
- ↑ Larabel, Michael (8 de septiembre de 2017). "Compresión Zstd para Btrfs y Squashfs configurada para Linux 4.14, ya utilizada en Facebook" . www.phoronix.com . Archivado del original el 25 de julio de 2019. Recuperado el 13 de noviembre de 2017 .
- ↑ "Integrar ZSTD en el kernel · freebsd/Freebsd-SRC@28ef165" . GitHub . El proyecto FreeBSD.
- ↑ "Agregar soporte ZSTD a ZFS · openzfs/ZFS@10b3c7f" . GitHub . OpenZFS. Archivado del original el 10 de septiembre de 2020. Recuperado el 12 de octubre de 2020 .
- ↑ "Codificación Zstandard - Amazon Redshift" . Amazon Web Services. 20 de abril de 2019. Archivado del original el 14 de agosto de 2021. Consultado el 24 de enero de 2018 .
- 1 2 Larabel, Michael (12 de marzo de 2018). "Canonical trabaja en paquetes Debian comprimidos con Zstd para Ubuntu" . phoronix.com . Phoronix Media. Archivado del original el 16 de agosto de 2021. Recuperado el 29 de octubre de 2019.
Los desarrolladores de Canonical están considerando una excepción a la congelación de características para obtener este nuevo soporte de Zstd Apt/Dpkg en Ubuntu 18.04 LTS. Al hacerlo, mencionan que estarían considerando habilitar la compresión Zstd para paquetes de forma predeterminada en Ubuntu 18.10.
- ↑ Nestor, Marius (12 de marzo de 2018). "Las nuevas instalaciones de Ubuntu podrían acelerarse un 10 % con el algoritmo de compresión Zstd" . Softpedia . Archivado del original el 6 de octubre de 2021. Consultado el 13 de agosto de 2018 .
- ↑ "Registro de cambios de Debian para apt" . Debian . 19 de abril de 2021. Consultado el 7 de noviembre de 2022 .
- ↑ "Cambios/Conversión de RPM a compresión ZSTD" . Wiki del proyecto Fedora . Archivado del original el 2 de junio de 2019. Consultado el 8 de julio de 2020 .
- ↑ Thurman, Andrew (14 de abril de 2021). "Fedora Workstation 34: características destacadas: compresión transparente Btrfs" . Fedora Magazine . Consultado el 12 de mayo de 2022 .
- ↑ "Changes/BtrfsTransparentCompression" . Wiki del proyecto Fedora . Consultado el 12 de mayo de 2022 .
- ↑ Larabel, Michael (16 de octubre de 2019). "Arch Linux se acerca al lanzamiento de paquetes comprimidos ZSTD para instalaciones Pacman más rápidas" . Phoronix . Archivado del original el 18 de marzo de 2022. Recuperado el 21 de octubre de 2019 .
- ↑ Broda, Mara (4 de enero de 2020). "Ahora se utiliza Zstandard en lugar de xz para la compresión de paquetes" . Arch Linux . Archivado del original el 18 de marzo de 2022. Consultado el 5 de enero de 2020 .
- ↑ Broda, Mara (25 de marzo de 2019). "RFC: (devtools) Cambiando el método de compresión predeterminado a zstd" . arch-dev-public (Lista de correo). Archivado del original el 17 de agosto de 2021. Recuperado el 5 de enero de 2020 .
- ↑ Broda, Mara; Polyak, Levente (27 de diciembre de 2019). "makepkg.conf: cambiar el método de compresión predeterminado a zstd" . GitHub .
- ↑ Razzolini, Giancarlo (19 de febrero de 2021). "Noticias: Transición a imágenes Zstandard por defecto en mkinitcpio" . Arch Linux . Recuperado el 28 de diciembre de 2021 .
- ↑ APPNOTE.TXT - Especificación del formato de archivo .ZIP Versión: 6.3.8 , PKWARE, 15 de junio de 2020 , consultado el 7 de julio de 2020
- ↑ APPNOTE.TXT - Especificación del formato de archivo .ZIP Versión: 6.3.7 , PKWARE, 1 de junio de 2020 , consultado el 6 de junio de 2020
- ↑ Jara, Adriana (19 de marzo de 2024). "Novedades en Chrome 123 | Blog de Chrome" . Chrome para desarrolladores . Google . Consultado el 16 de abril de 2024 .
- ↑ "Firefox 126.0, vea todas las nuevas funciones, actualizaciones y correcciones" . Mayo de 2024. Archivado del original el 13 de mayo de 2024. Consultado el 15 de mayo de 2024 .
- ↑ Dignan, Larry (31 de agosto de 2016). "Facebook publica como código abierto el algoritmo de compresión de datos Zstandard, con el objetivo de reemplazar la tecnología detrás de Zip" . ZDnet . Consultado el 1 de septiembre de 2016 .
- ↑ "Zstandard v1.0" . GitHub . Facebook. 31 de agosto de 2016. Archivado del original el 7 de abril de 2023. Consultado el 23 de enero de 2025 .
- ↑ "v1.3.0/PATENTS · facebook/zstd" . GitHub . Facebook. 30 de agosto de 2016. Archivado del original el 15 de mayo de 2021. Recuperado el 27 de marzo de 2024 .
- ↑ "Lanzamiento de Zstandard v1.3.1 · facebook/zstd" . GitHub . Facebook. 20 de agosto de 2017. Archivado del original el 12 de septiembre de 2020. Consultado el 27 de marzo de 2024 .
- ↑ "Nueva licencia por Cyan4973 · Solicitud de extracción n.° 801 · facebook/zstd" . GitHub . Facebook. 19 de agosto de 2017. Archivado del original el 12 de septiembre de 2020. Consultado el 27 de marzo de 2024 .
Enlaces externos
- Software de 2016
- Bibliotecas de C (lenguaje de programación)
- Software gratuito de compresión de datos
- Algoritmos de compresión sin pérdidas
- Software que utiliza la licencia BSD.
- Compresión de datos