stringtranslate.com

estándar z

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. [3] [4]

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ápida, especialmente para la descompresión. Se puede ajustar con niveles de compresión que van desde -7 (el más rápido) [5] 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 una búsqueda y deduplicación de rango muy largo ( --longventana 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 menos del 20% entre los niveles más rápidos y más lentos. [7] 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 qué tan rápido puede escribir la salida.

Zstd en su nivel máximo de compresión proporciona una relación de compresión cercana a lzma , lzham y ppmx , y tiene un mejor rendimiento [ vago ] que lza o bzip2 . [¿ Síntesis incorrecta? ] [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, por ejemplo, archivos de registro .

Diseño

Zstandard combina una etapa de coincidencia de diccionarios ( 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).

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]

En 2017, Allan Jude integró Zstandard en el núcleo de FreeBSD [19] y, posteriormente, se integró como una opción de compresión para volcados de memoria (tanto de programas de usuario como de 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. [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 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). [23] [22] [24]

En 2018, el algoritmo se publicó como RFC  8478, que también define un tipo de medio asociado "application/zstd", una extensión de nombre de archivo "zst" y una codificación de contenido HTTP "zstd". [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 paquetes 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 50 MiB cuando se usan múltiples subprocesos, la memoria de compresión aumenta pero escala con la cantidad de subprocesos utilizados. [27] [28] [29] Arch Linux más tarde también cambió a zstd como algoritmo de compresión predeterminado para el generador de disco RAM inicial mkinitcpio . [30]

Fedora agregó soporte ZStandard a RPM en mayo de 2018 (versión 28 de Fedora) y lo utilizó para empaquetar la versión en octubre de 2019 (versión 31 de Fedora). [31] En Fedora 33, el sistema de archivos está comprimido de manera predeterminada con zstd. [32] [33]

La implementación completa del algoritmo con una opción para elegir el nivel de compresión se utiliza en los formatos de archivo .NSZ/.XCZ [34] desarrollados por la comunidad homebrew para la consola de juegos híbrida Nintendo Switch . [35] De manera similar, también es uno de los muchos algoritmos de compresión compatibles con el formato de archivo de imagen de disco .RVZ de 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, dejando obsoleto el número de códec anterior de 20, ya que se implementó en la versión 6.3.7, lanzada el 1 de junio. [36] [37]

En marzo de 2024, la versión 123 de Google Chrome (y los navegadores basados ​​en Chromium como Brave o Microsoft Edge ) agregaron soporte para zstd en el encabezado HTTP Content-Encoding . [38] En mayo de 2024, la versión 126.0 de Firefox agregó soporte para zstd en el encabezado HTTP Content-Encoding . [39]

Licencia

La implementación de referencia está licenciada bajo la licencia BSD , publicada en GitHub . [40] Desde la versión 1.0, tenía una concesión adicional de derechos de patente. [41]

A partir de la versión 1.3.1, [42] esta concesión de patente se abandonó y la licencia se cambió a una licencia dual BSD + GPLv2. [43]

Véase también

Referencias

  1. ^ "Colaboradores de facebook/zstd". github.com . Archivado desde el original el 27 de enero de 2021 . Consultado el 26 de enero de 2021 .
  2. ^ "Lanzamiento de Zstandard v1.5.6 - Edición Chrome · facebook/zstd" . Consultado el 27 de marzo de 2024 .
  3. ^ Sergio De Simone (2 de septiembre de 2016). "Facebook publica en código abierto un nuevo algoritmo de compresión que supera a Zlib". InfoQ . Consultado el 20 de abril de 2019 .
  4. ^ "La vida imita a la sátira: Facebook promociona al asesino de zlib como el flautista de Hamelin de Silicon Valley". The Register . 31 de agosto de 2016 . Consultado el 6 de septiembre de 2016 .
  5. ^ "Lanzamiento de Zstandard v1.3.4: todo más rápido · facebook/zstd". GitHub . Consultado el 27 de marzo de 2024 .
  6. ^ "Interfaz de línea de comandos para la biblioteca Zstandard". GitHub . 28 de octubre de 2021.
  7. ^ ab "ZStandard en ZFS" (PDF) . open-zfs.org . 2017 . Consultado el 20 de abril de 2019 .
  8. ^ Matt Mahoney. «Punto de referencia de compresión de código abierto de Silesia» . Consultado el 10 de mayo de 2019 .
  9. ^ Matt Mahoney (29 de agosto de 2016). «Punto de referencia de compresión de texto grande, .2157 zstd» . Consultado el 1 de septiembre de 2016 .
  10. ^ TurboBench: benchmark de compresión de contenido web estático/dinámico, PowTurbo
  11. ^ Matt Mahoney, Punto de referencia de compresión de código abierto de Silesia
  12. ^ "Los desarrolladores de Facebook informan de mejoras masivas en la velocidad y la relación de compresión al usar diccionarios" (PDF) . Fermilab . 11 de octubre de 2017 . Consultado el 27 de marzo de 2024 .
  13. ^ "Compresión de datos más rápida y más pequeña con Zstandard". Facebook. 31 de agosto de 2016.
  14. ^ "facebook/zstd". GitHub . 28 de octubre de 2021.
  15. ^ abcd 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. doi : 10.17487/RFC8878 . RFC 8878. Consultado el 26 de febrero de 2023 .
  16. ^ Corbet, Jonathan (17 de septiembre de 2017). "El resto de la ventana de fusión de 4.14 [LWN.net]". lwn.net . Consultado el 27 de marzo de 2024 .
  17. ^ "Linux_4.14 - Linux Kernel Newbies". Kernelnewbies.org. 30 de diciembre de 2017. Consultado el 16 de agosto de 2018 .
  18. ^ Larabel, Michael (8 de septiembre de 2017). "Compresión Zstd para Btrfs y Squashfs configurada para Linux 4.14, ya utilizada en Facebook - Phoronix". www.phoronix.com .
  19. ^ "Integrar ZSTD en el núcleo · freebsd/Freebsd-SRC@28ef165". GitHub .
  20. ^ "Agregar compatibilidad con ZSTD a ZFS · openzfs/ZFS@10b3c7f". GitHub .
  21. ^ "Codificación Zstandard - Amazon Redshift". 20 de abril de 2019.
  22. ^ ab Larabel, Michael (12 de marzo de 2018). "Canonical está trabajando en paquetes Debian comprimidos con Zstd para Ubuntu". phoronix.com . Phoronix Media . Consultado el 29 de octubre de 2019 . Los desarrolladores de Canonical están considerando una excepción de congelamiento de funciones para obtener este soporte Zstd Apt/Dpkg recientemente desarrollado en Ubuntu 18.04 LTS. Al hacerlo, mencionan que buscarían habilitar la compresión Zstd para paquetes de forma predeterminada en Ubuntu 18.10.
  23. ^ "Las nuevas instalaciones de Ubuntu podrían acelerarse un 10 % con el algoritmo de compresión Zstd". Softpedia . 12 de marzo de 2018 . Consultado el 13 de agosto de 2018 .
  24. ^ "Registro de cambios de Debian para apt". Debian . 19 de abril de 2021 . Consultado el 7 de noviembre de 2022 .
  25. ^ 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. doi : 10.17487/RFC8478 . RFC 8478. Consultado el 7 de octubre de 2020 .
  26. ^ Larabel, Michael (16 de octubre de 2019). "Arch Linux se acerca al lanzamiento de paquetes comprimidos ZSTD para instalaciones más rápidas de Pacman". Phoronix .
  27. ^ Broda, Mara (4 de enero de 2020). "Ahora se usa Zstandard en lugar de xz para la compresión de paquetes". Arch Linux . Consultado el 5 de enero de 2020 .
  28. ^ Broda, Mara (25 de marzo de 2019). "RFC: (devtools) Cambiar el método de compresión predeterminado a zstd". arch-dev-public (Lista de correo).
  29. ^ Broda, Mara; Polyak, Levente (27 de diciembre de 2019). «makepkg.conf: cambiar el método de compresión predeterminado a zstd». GitHub .
  30. ^ Razzolini, Giancarlo (19 de febrero de 2021). «Noticias: Pasar a imágenes Zstandard de forma predeterminada en mkinitcpio». Arch Linux . Consultado el 28 de diciembre de 2021 .
  31. ^ "Cambios/Conmutación de RPMS a compresión ZSTD". Wiki del proyecto Fedora .
  32. ^ "Función destacada de Fedora Workstation 34: compresión transparente Btrfs". Revista Fedora . 14 de abril de 2021 . Consultado el 12 de mayo de 2022 .
  33. ^ "Cambios/BtrfsTransparentCompression". Wiki del proyecto Fedora . Consultado el 12 de mayo de 2022 .
  34. ^ "LANZAMIENTO - nsZip - Compresor/descompresor NSP para reducir el almacenamiento". GBAtemp.net - La comunidad independiente de videojuegos . 20 de octubre de 2019. Consultado el 3 de noviembre de 2019 .
  35. ^ Bosshard, Nico (31 de octubre de 2019), nsZip es una herramienta para comprimir/descomprimir juegos de Nintendo Switch utilizando el formato de archivo NSZ especificado aquí: nicoboss/nsZip , consultado el 3 de noviembre de 2019
  36. ^ APPNOTE.TXT - Especificación del formato de archivo .ZIP Versión: 6.3.8, 15 de junio de 2020 , consultado el 7 de julio de 2020
  37. ^ APPNOTE.TXT - Especificación del formato de archivo .ZIP Versión: 6.3.7, 1 de junio de 2020 , consultado el 6 de junio de 2020
  38. ^ "Novedades de Chrome 123 | Blog de Chrome". Chrome para desarrolladores . 19 de marzo de 2024 . Consultado el 16 de abril de 2024 .
  39. ^ "Firefox 126.0, ver todas las nuevas funciones, actualizaciones y correcciones" . Consultado el 15 de mayo de 2024 .
  40. ^ "Facebook publica en código abierto el algoritmo de compresión de datos Zstandard, con el objetivo de reemplazar la tecnología detrás de Zip". ZDnet. 31 de agosto de 2016. Consultado el 1 de septiembre de 2016 .
  41. ^ "zstd/PATENTS en v1.3.0 · facebook/zstd". GitHub . Consultado el 27 de marzo de 2024 .
  42. ^ "Lanzamiento de Zstandard v1.3.1 · facebook/zstd". GitHub . Consultado el 27 de marzo de 2024 .
  43. ^ "Nueva licencia de Cyan4973 · Pull Request #801 · facebook/zstd". GitHub . Consultado el 27 de marzo de 2024 .

Enlaces externos