LZ4 (algoritmo de compresión)

De Wikipedia, la enciclopedia libre
LZ4
Información general
Tipo de programa Compresión de datos
Autor Yann Collet
Desarrollador Yann Collet
Lanzamiento inicial 24 de abril de 2011
Licencia Simplified BSD License
Estado actual Activo
Información técnica
Programado en C
Plataformas admitidas Portable
Versiones
Última versión estable 1.9.4 ( 16 de agosto de 2022 (1 año, 8 meses y 22 días)[1]​)
Enlaces

LZ4 es un algoritmo de compresión sin pérdida que se centra en la velocidad de compresión y descompresión. Pertenece a la familia LZ77 de esquemas de compresión orientados a bytes.

Características[editar]

El algoritmo proporciona un ratio de compresión ligeramente peor que el algoritmo LZO, que a su vez es peor que algoritmos como DEFLATE. Sin embargo, las velocidades de compresión son similares a LZO y varias veces más rápidas que DEFLATE, mientras que las velocidades de descompresión pueden ser significativamente más altas que LZO.[2]

Diseño[editar]

El algoritmo LZ4 representa los datos como una serie de secuencias. Cada secuencia comienza con un token de un byte que se divide en dos campos de 4 bits. El primer campo representa el número de bytes literales que se copiarán a la salida. El segundo campo representa el número de bytes para copiar desde el búfer de salida ya decodificado (donde 0 representa la longitud mínima de coincidencia de 4 bytes). Un valor de 15 en cualquiera de los campos de bits indica que la longitud es mayor y que hay un byte adicional de datos que se agregará a la longitud. Un valor de 255 en estos bytes adicionales indica que se agregará otro byte. Por lo tanto, las longitudes arbitrarias están representadas por una serie de bytes adicionales que contienen el valor 255. La cadena de literales viene después del token y los bytes adicionales necesarios para indicar la longitud de la cadena. Esto es seguido por un desplazamiento que indica qué tan atrás en el búfer de salida comenzar a copiar. Los bytes adicionales (si los hay) de la longitud de la coincidencia aparecen al final de la secuencia.[3][4]

La compresión puede llevarse a cabo en un stream o en bloques. Se pueden lograr ratios de compresión más altos invirtiendo más esfuerzo en encontrar las mejores coincidencias. Esto da como resultado una salida más pequeña y una descompresión más rápida.

Implementación[editar]

La implementación de referencia en C de Yann Collet está licenciada bajo una licencia BSD. Hay ports y bindings en varios lenguajes como Java, C#, Python, etc. Bases de datos como Hadoop usan este algoritmo para una compresión rápida. LZ4 también se implementó de forma nativa en el núcleo Linux 3.11.[5]​ Las implementaciones de FreeBSD, Illumos, ZFS en Linux y ZFS-OSX del sistema de archivos ZFS soportan el algoritmo LZ4 para compresión sobre la marcha.[6][7][8]​ Linux soporta LZ4 para SquashFS desde 3.19-rc1.[9]​ LZ4 está también implementado en el nuevo archivador Zstd de Yann Collet.

Referencias[editar]

  1. «LZ4 v1.9.4». Github. 16 de agosto de 2022. Consultado el 30 de enero de 2024. 
  2. Michael Larabel (28 de enero de 2013). «Support For Compressing The Linux Kernel With LZ4». Phoronix. Consultado el 28 de agosto de 2015. 
  3. Yann Collet (26 de mayo de 2011). «RealTime Data Compression». Consultado el 28 de agosto de 2015. 
  4. ticki (25 de octubre de 2016). «How LZ4 works». Consultado el 29 de junio de 2017. 
  5. Jonathan Corbet (19 de julio de 2013). «Kernel development». LWN.net. Consultado el 28 de agosto de 2015. 
  6. «FreeBSD 9.2-RELEASE Release Notes». FreeBSD. 13 de noviembre de 2013. Consultado el 28 de agosto de 2015. 
  7. «LZ4 Compression». illumos. Archivado desde el original el 9 de octubre de 2018. Consultado el 28 de agosto de 2015. 
  8. «Features: lz4 compression». OpenZFS. Consultado el 28 de agosto de 2015. 
  9. Phillip Lougher (27 de noviembre de 2014). «Squashfs: Add LZ4 compression configuration option». Consultado el 28 de agosto de 2015. 

Enlaces externos[editar]