Zstandard (o 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 gratuito el 31 de agosto de 2016. [3] [4]
Autor (es) original (es) | Yann Collet |
---|---|
Desarrollador (es) | Yann Collet, Nick Terrell, Przemysław Skibiński [1] |
Versión inicial | 23 de enero de 2015 |
Lanzamiento estable | 1.5.0 / 14 de mayo de 2021 [2] |
Repositorio | |
Escrito en | C |
Sistema operativo | Multiplataforma |
Plataforma | Portátil |
Tipo | Compresión de datos |
Licencia | Dual: Licencia BSD , GPLv2 |
Sitio web | facebook |
Características
Zstandard fue diseñado para proporcionar 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 negativo 5 (más rápido) [5] a 22 (más lento en velocidad de compresión, pero mejor relación de compresión).
El paquete zstd incluye implementaciones paralelas (multiproceso) de compresión y descompresión [ cita requerida ] . A partir de la versión 1.3.2 (octubre de 2017), zstd implementa opcionalmente una búsqueda y desduplicación de muy largo alcance ( --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á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. [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 máximo de compresión proporciona una relación de compresión cercana a lzma , lzham y ppmx , y funciona mejor que lza o bzip2 . [8] [9] Zstandard alcanza la frontera de Pareto actual , ya que se descomprime más rápido que cualquier otro algoritmo disponible actualmente con una relación de compresión similar o mejor. [10] [11]
Los diccionarios pueden tener un gran impacto en la relación 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 diccionario ( LZ77 ) con una ventana de búsqueda grande y una etapa de codificación de entropía rápida , utilizando tanto la entropía de estado finito (una versión en tabla rápida de ANS, tANS , utilizada para entradas en la sección de secuencias) y la codificación de Huffman ( utilizado para entradas en la sección Literales). [14]
Debido a la forma en que FSE transfiere el estado entre símbolos, la descompresión implica procesar 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 [15] |
---|---|
Tipo de medio de Internet | application / zstd [15] |
número mágico | 28 b5 2f fd [15] |
Tipo de formato | Compresión de datos |
Estándar | RFC 8478 |
Sitio web | https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md |
Tipo de medio de Internet | aplicación / zstandard |
---|---|
número mágico | 37 a4 30 ec [15] |
Estándar | RFC 8478 |
Sitio web | https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#dictionary-format |
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 kernel de FreeBSD [19] y posteriormente se integró como una opción de compresor para volcados de núcleo (tanto programas de usuario como pánicos del kernel). También se utilizó para crear una prueba de concepto del método de compresión OpenZFS [7] que se integró en 2020. [20]
Las bases de datos de AWS Redshift y RocksDB incluyen compatibilidad con la compresión de campo mediante Zstandard. [21]
En marzo de 2018, Canonical probó [22] el uso de zstd como método de compresión de paquetes deb de forma predeterminada para la distribución de 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 al costo de archivos de paquetes un 6% más grandes. El desarrollador de Debian, Ian Jackson, estaba a favor de esperar varios años antes de la adopción oficial. [23] [24] [25]
En 2018, el algoritmo se publicó como RFC 8478 , que también define un tipo de medio asociado "aplicación / zstd", extensión de nombre de archivo "zst" y codificación de contenido HTTP "zstd". [15]
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 1300% 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]
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) [30]
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 [31] , desarrollados por la comunidad homebrew para la consola de juegos híbrida Nintendo Switch . [32]
7zip está disponible ampliado con zstandard por 7zip FS. [33]
Licencia
La implementación de referencia está autorizada bajo la licencia BSD , publicada en GitHub . [34] Desde la versión 1.0, tenía una concesión adicional de derechos de patente. [35]
Desde la versión 1.3.1, [36] esta concesión de patente se eliminó y la licencia se cambió a una licencia dual BSD + GPLv2. [37]
Ver también
- Zlib
- LZFSE : un algoritmo similar de Apple utilizado desde que iOS 9 y OS X 10.11 se convirtieron en código abierto el 1 de junio de 2016
- LZ4 (algoritmo de compresión) : un miembro rápido de la familia LZ77
Referencias
- ^ "Colaboradores de facebook / zstd" . github.com . Archivado desde el original el 27 de enero de 2021 . Consultado el 26 de enero de 2021 .
- ^ "Lanzamientos - facebook / zstd" . Consultado el 16 de mayo de 2021 , a través de GitHub .
- ^ Sergio De Simone (2 de septiembre de 2016). "Nuevo algoritmo de compresión de fuentes abiertas de Facebook que supera a Zlib" . InfoQ . Consultado el 20 de abril de 2019 .
- ^ "La vida imita la sátira: Facebook promociona zlib killer al igual que Pied Piper de Silicon Valley" . El registro. 31 de agosto de 2016 . Consultado el 6 de septiembre de 2016 .
- ^ https://github.com/facebook/zstd/releases/tag/v1.3.4 Niveles de compresión más rápidos
- ^ "Interfaz de línea de comandos para la biblioteca Zstandard" . GitHub .
- ^ a b "ZStandard en ZFS" (PDF) . open-zfs.org . 2017 . Consultado el 20 de abril de 2019 .
- ^ Matt Mahoney. "Benchmark de compresión de código abierto de Silesia" . Consultado el 10 de mayo de 2019 .
- ^ 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 .
- ^ TurboBench: punto de referencia de compresión de contenido web estático / dinámico , PowTurbo
- ^ Matt Mahoney, punto de referencia de compresión de código abierto de Silesia
- ^ "Los desarrolladores de Facebook informan sobre aceleraciones masivas y mejoras en la relación de compresión cuando usan diccionarios" (PDF) .
- ^ "Compresión de datos más pequeña y rápida con Zstandard" . Facebook. 31 de agosto de 2016.
- ^ "facebook / zstd" . GitHub .
- ^ a b c d e Collet, Yann (octubre de 2018). Kucherawy, Murray S. (ed.). Compresión Zstandard y la aplicación / zstd Media Type . 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 .
- ^ "El resto de la ventana de combinación 4.14 [LWN.net]" . lwn.net .
- ^ "Linux_4.14 - Principiantes del kernel de Linux" . Kernelnewbies.org . Consultado el 16 de agosto de 2018 .
- ^ "Compresión Zstd para Btrfs y Squashfs para Linux 4.14, ya utilizado en Facebook - Phoronix" . www.phoronix.com .
- ^ https://github.com/freebsd/freebsd/commit/28ef16535cde21eeeaf75f6006b3a77952b3b51
- ^ https://github.com/openzfs/zfs/commit/10b3c7f5e424f54b3ba82dbf1600d866e64ec0a0
- ^ "Codificación Zstandard - Amazon Redshift" . 20 de abril de 2019.
- ^ Larabel, Michael (12 de marzo de 2018). "Canonical 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 congelación 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.
- ^ "Las nuevas instalaciones de Ubuntu podrían acelerarse en un 10% con el algoritmo de compresión Zstd" . Softpedia . 12 de marzo de 2018 . Consultado el 13 de agosto de 2018 .
- ^ "Canonical trabajando en paquetes Debian comprimidos con Zstd para Ubuntu" . phoronix . 12 de marzo de 2018 . Consultado el 13 de agosto de 2018 .
- ^ Jackson, Ian (27 de abril de 2018). "RFC: ¿Soporte para zstd en paquetes .deb?" . debian-devel (lista de correo).
- ^ https://www.phoronix.com/scan.php?page=news_item&px=Arch-Linux-Pacman-Zstd-Near
- ^ Broda, Robin (4 de enero de 2020). "Ahora usando Zstandard en lugar de xz para la compresión de paquetes" . Arch Linux . Consultado el 5 de enero de 2020 .
- ^ Broda, Robin (25 de marzo de 2019). "RFC: (devtools) Cambiando el método de compresión predeterminado a zstd" . arch-dev-public (lista de correo).
- ^ Broda, Robin; Polyak, Levente (27 de diciembre de 2019). "makepkg.conf: cambia el método de compresión predeterminado a zstd" .
- ^ https://fedoraproject.org/wiki/Changes/Switch_RPMs_to_zstd_compression
- ^ "RELEASE - nsZip - Compresor / descompresor NSP para reducir el almacenamiento" . GBAtemp.net - La comunidad independiente de videojuegos . Consultado el 3 de noviembre de 2019 .
- ^ 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
- ^ https://github.com/mcmilk/7-Zip-zstd
- ^ "Algoritmo de compresión de datos Zstandard de fuentes abiertas de Facebook, tiene como objetivo reemplazar la tecnología detrás de Zip" . ZDnet. 31 de agosto de 2016 . Consultado el 1 de septiembre de 2016 .
- ^ zstd / PATENTS "Concesión adicional de derechos de patente versión 2" , Facebook
- ^ "Lanzamiento de Zstd v1.3.1" , GitHub "facebook / zstd"
- ^ "Nueva licencia" , GitHub "facebook / zstd"
enlaces externos
- Página web oficial
- zstd en GitHub
- 7zip con Zstandard en GitHub
- " Compresión de datos más pequeña y rápida con Zstandard ", Yann Collet y Chip Turner, 31 de agosto de 2016, anuncio de Facebook
- The Guardian está usando ZStandard en lugar de zlib