\
Este artículo discutirá la compresión en el contexto de Big Data, cubriendo los tipos y métodos de compresión. También destacaré por qué y cuándo debe usarse cada tipo y método.
\
Según la definición general en inglés de compresión, se refiere a reducir algo para que ocupe un espacio más pequeño. En Ciencias de la Computación, la compresión es el proceso de reducir datos a un tamaño más pequeño. Los datos, en este caso, podrían estar representados en texto, audio, archivos de video, etc. Piénselo como cualquier cosa que almacene en el disco duro de su computadora, como datos representados en diferentes formatos. Para proporcionar una definición más técnica, la compresión es el proceso de codificar datos para usar menos bits.
\ Hay múltiples razones para comprimir datos. La razón más común e intuitiva es ahorrar espacio de almacenamiento. Otras razones son resultado de que los datos sean más pequeños. Los beneficios de trabajar con datos más pequeños incluyen:
\ Otras razones para la compresión dependen de diferentes técnicas y formatos de compresión. Algunos algoritmos de encriptación pueden usarse como método de compresión. Al hacerlo, incluye una capa de seguridad por las razones discutidas anteriormente para comprimir datos. Además, usar formatos de compresión comunes trae compatibilidad y espacio para extensibilidad a sistemas externos con fines de integración.
\ Vale la pena señalar que las razones para la compresión también suenan como beneficios. Sin embargo, la compresión no está exenta de compromisos. Un compromiso común de la compresión es la necesidad de desencriptación, lo que podría ser preocupante para sistemas con recursos limitados. Otros compromisos dependen de la técnica de compresión y el tipo de datos que se estén usando.
\
Para discutir las diferentes técnicas utilizadas para comprimir datos, primero categorizaré la compresión en 2 categorías principales. Este artículo luego discutirá las técnicas relevantes para cada categoría. La compresión se puede agrupar ampliamente en compresión con pérdida y sin pérdida.
\ Como los nombres ya revelan lo que significan, las técnicas de compresión con pérdida son técnicas que no preservan la fidelidad completa de los datos. En pocas palabras, algunos datos se descartan, pero no lo suficiente como para hacer que lo que representan los datos sea irreconocible. Por lo tanto, la compresión con pérdida puede ofrecer un nivel muy alto de compresión en comparación con la compresión sin pérdida, que se presentará en breve.
\ Una característica de la compresión con pérdida es que es irreversible, es decir, cuando se presenta el archivo comprimido, uno no puede restaurar los datos sin procesar con su fidelidad original. Ciertos archivos y formatos de archivo son adecuados para la compresión con pérdida. Típicamente se usa para imágenes, audio y videos. Por ejemplo, las imágenes con formato JPEG se prestan bien a la compresión, y al comprimir una imagen JPEG, el creador o editor puede elegir cuánta pérdida introducir.
\ Por otro lado, la compresión sin pérdida es reversible, lo que significa que cuando se comprime, todos los datos se preservan y se restauran completamente durante la desencriptación. Esto implica que la compresión sin pérdida es adecuada para archivos tipo texto, y en el mundo del almacén de datos y lakehouse, sería el único tipo relevante para usar. Algunos formatos de archivo de audio (FLAC y ALAC) e imagen (GIF, PNG, etc.) funcionan bien con este tipo de compresión.
No existe un mejor método de compresión general. Diferentes factores entran en juego al elegir qué método sería adecuado caso por caso. Para reforzar esto con ejemplos, un ingeniero de datos en la industria financiera que trabaja con datos tabulares almacenados tendería a usar compresión sin pérdida debido al impacto de los datos faltantes en la creación de informes precisos. Alternativamente, la compresión con pérdida podría ser el camino a seguir para optimizar la página web con muchas imágenes comprimiendo las imágenes y reduciendo los elementos de carga al hacer el sitio web más ligero. Por lo tanto, es crucial realizar una evaluación para determinar el método de compresión más apropiado que se alinee con los requisitos del negocio.
Esta sección solo cubrirá las técnicas de compresión comunes tanto para compresión con pérdida como sin pérdida. Tenga en cuenta que esto no es de ninguna manera exhaustivo. Además, las técnicas discutidas pueden tener ligeras variaciones para mejorar su rendimiento, respaldadas por diferentes investigaciones.
Tres técnicas comunes sin pérdida son la codificación Run-Length (RLE), la codificación Huffman y las técnicas Lempel-Ziv-Welch.
\ Codificación Run-Length: RLE se basa en codificar datos, de tal manera que reemplaza secuencias de datos repetidos con una sola pieza de datos y el recuento de esa pieza de datos. Es efectiva para largas ejecuciones de datos repetidos. Además, los conjuntos de datos que tienen dimensiones (campos) que se ordenan de un nivel bajo a un nivel alto de cardinalidad se benefician de RLE.
\ Por ejemplo, tome una cadena simple como AAAAABBCDDD. RLE comprime los datos para convertirse en A(5)B(2)C(1)D(3). Para ser más práctico, tome una tabla en la imagen a continuación.
\ Figura 1 - antes de RLE. Es importante observar que el nivel de cardinalidad está aumentando en los campos de izquierda a derecha
Figura 2 - Después de RLE
Debido a que RLE depende de ejecuciones de campos repetidos, y en el segundo ejemplo, la cardinalidad y el orden de clasificación de los datos, el registro Mouse en la columna de artículo no puede comprimirse a solo Mouse (3) porque la columna anterior divide todos los valores en IT, Mouse y HR, Mouse. Ciertos formatos de archivo son compatibles con RLE, como formatos de archivo de mapa de bits como TIFF, BMP, etc. Los archivos Parquet también admiten RLE, lo que lo hace muy útil en lakehouses de datos modernos que usan almacenamiento de objetos como S3 o GCS.
\ Codificación Huffman: Se basa en modelos estadísticos que asignan códigos de longitud variable a valores en los datos sin procesar según la frecuencia con la que ocurren en los datos sin procesar. La representación de este modelado puede denominarse árbol de Huffman, que es similar a un árbol binario. Este árbol se usa luego para crear un código de Huffman para cada valor en los datos sin procesar. El algoritmo prioriza la codificación de los valores más frecuentes en la menor cantidad posible de bits.
\ Tomemos los mismos datos usados en el ejemplo de RLE AAAAABBCDDD. El árbol de Huffman correspondiente se ve así.
\ Árbol de Huffman
Del árbol, podemos ver que la letra A está representada por 0 igualmente D está presentada por 10. En comparación con las letras B: 111 y C:110, observamos que A y D están representadas por menos bits. Esto se debe a que tienen una frecuencia más alta; por lo tanto, el algoritmo de Huffman las representa con menos bits por diseño. Los datos comprimidos resultantes se convierten en 00000111111110101010.
\ La codificación Huffman usa la regla de prefijo, que establece que el código que representa un carácter no debe estar presente en el prefijo de ningún otro código. Por ejemplo, un código Huffman válido no puede tener letras c y d representadas usando C: 00 y D: 000 porque la representación de C es un prefijo de D.
\ Para ver esto en acción, la Computer Science Field Guide tiene un Generador de árboles de Huffman con el que podría jugar.
\ Codificación Lempel–Ziv–Welch: Fue creada por Abraham Lempel, Jacob Ziv y Terry Welch en 1984 y lleva el nombre de los creadores, obviamente 😅. Similar a RLE y la codificación Huffman, LZW funciona bien con datos que contienen muchos datos repetidos. El algoritmo LZW se basa en diccionarios y crea un diccionario que contiene pares clave-valor de patrones comúnmente vistos en los datos sin procesar. Dicho diccionario también puede denominarse tabla de códigos. Usando una ilustración para explicar cómo funciona esta técnica, tomemos nuestros datos sin procesar representados por ABBABABABA. Cuando se pasa a través del algoritmo usando una configuración de A-Z como valores posibles, la tabla de códigos resultante se ve así:
\ Tabla de código LZW
De la tabla de código anterior, hay un par clave-valor para todas las letras A-Z y pares clave-valor para patrones como AB, BB, BA y ABA. Al tener una representación más corta de estos patrones, el algoritmo LZW puede comprimir los datos sin procesar codificándolos en menos bits. Por lo tanto, usando la tabla de códigos generada a partir de esa entrada, la versión comprimida es 0 1 1 26 29 28. Es clave notar los espacios en los datos comprimidos. Uno podría pensar en ellos como el final de un carácter, por lo que el decodificador no interpretará un 1,0 como un 10 ya que significan cosas diferentes.
\ LZW generalmente es de propósito general y se usa ampliamente hoy en día. Está integrado en muchos sistemas operativos basados en Unix/Linux detrás del comando de shell compress. Además, los formatos de archivo comunes compatibles con LZW son GIF, TIFF y PDF. Otras aplicaciones de compresión LZW se pueden ver en el campo del Procesamiento del Lenguaje Natural, como se discute en este artículo sobre tokenización en NLP.
\ RLE, codificación Huffman y codificación LZW son solo ejemplos comunes. Las técnicas de compresión sin pérdida van más allá de estas tres (3) descritas anteriormente. Otras técnicas incluyen DEFLATE, que usa una combinación de codificación Huffman y LZW - específicamente LZ77.
En esta sección, veremos dos tipos de compresión con pérdida. Recuerde que la compresión con pérdida introduce una pérdida en los datos originales, lo que significa que no todos los datos se conservan.
\ Transformada Discreta del Coseno (DCT): Este método de compresión se usa principalmente en archivos de audio, imagen y video y también se conoce comúnmente como compresión de bloques. Utiliza una función matemática - la función coseno, como su nombre indica - para convertir bloques de los datos originales en frecuencias. Los bloques de datos suelen ser una matriz de 8x8, 4x4, y así sucesivamente, en ese orden de magnitud.
\ La compresión entra cuando se trata de las altas frecuencias que ocurren en los datos, una vez que los datos sin procesar se traducen al dominio de frecuencia usando la función matemática. El proceso general de usar DCT para compresión es:
\ DCT se usa ampliamente en diferentes campos hoy en día, no solo en compresión sino también en procesamiento de señales. Los formatos de archivo comunes compatibles con DCT son JPEG (imágenes), MP3 (audio) y MPEG (video). Además, DCT puede lograr altas relaciones de compresión, lo que lo hace adecuado para sistemas digitales con muchas imágenes, como páginas web en Internet.
\ Compresión fractal: Un fractal es un patrón infinito autorreplicante que se repite a diferentes escalas. Cuando se ve desde cualquier punto en la escala, el patrón se ve similar. Debido a que los patrones son similares en cualquier escala, la compresión fractal reduce la escala de fractales 'grandes' para reducir el tamaño de los datos.
\ Ejemplos de fractales
La compresión fractal fue introducida por Michael Barnsley en la década de 1980. La idea general usando una imagen es que si una imagen contiene varias partes que se parecen, ¿por qué almacenarlas dos veces? Para hacer esto, la compresión fractal hace lo siguiente:
\ Con los códigos fractales, la imagen se reconstruye usando un proceso iterativo. Este proceso puede ser computacionalmente costoso, pero la compresión fractal podría lograr una alta relación de compresión en comparación con otras técnicas de compresión. Debido a su dependencia de patrones autorreplicantes, funcionaría mejor en datos que se ajusten a tener tales patrones autorreplicantes. Los ejemplos serían fotografías de paisajes (imágenes de la naturaleza) e imágenes de ADN.
\ Hay otras técnicas de compresión con pérdida, como la Transformada Wavelet Discreta, la Cuantización. Estas técnicas generalmente se usan en archivos de imágenes, audio y video y son adecuadas para ciertos tipos o formatos de archivo - JPEG, MP3 - para cada tipo de archivo.
\ La compresión con pérdida generalmente tiene relaciones de compresión más altas que la compresión sin pérdida y a veces espera que el usuario conozca la cantidad de pérdida a introducir de antemano. Es pertinente enfatizar que la elección del método y técnica de compresión depende de varios factores. En el núcleo de estos factores están el formato de datos y el resultado deseado.
En general, esta publicación discute la compresión en el mundo de los datos. Se basa fuertemente en el cuerpo de conocimiento existente en ciencias de la computación y teoría de la información. Comprimir significa reducir el volumen que ocupa una entidad, y en el campo de los datos, el volumen se refiere al espacio de almacenamiento. La compresión en sistemas digitales tiene muchas ventajas cuando se hace correctamente. Lo obvio es que reduce el espacio y da lugar para almacenar más datos. Otras ventajas incluyen transmisión más rápida, menos uso de ancho de banda y mejora general en la eficiencia de dicho sistema. Recuerde, esto es cuando se hace correctamente.
\ Para aprovechar las ventajas de la compresión, es clave saber qué tipo usar. La compresión es con pérdida o sin pérdida. La compresión con pérdida introduce una pérdida en los datos originales que generalmente es irreversible, mientras que la compresión sin pérdida comprime los datos y retiene toda la información contenida en los datos originales. Además, hay discurso sobre tipos de compresión híbridos, pero creo que una combinación de con pérdida y sin pérdida es solo con pérdida. Déjame saber qué piensas en los comentarios.
\ Por último, se introdujeron diferentes técnicas tanto para compresión con pérdida como sin pérdida. La lista de técnicas y explicaciones de estas técnicas no es exhaustiva ni completa. Las considero solo un buen comienzo para darle una idea de cómo funciona cada técnica. Para concluir, he agregado recursos adicionales para ayudarlo a investigar más y leer más profundamente sobre la compresión en big data.
Video: Fundamentos de Data Lake - codificación RLE con Parquet en la práctica
Artículo: Una revisión de técnicas de compresión de datos
Artículo: técnicas de compresión sin pérdida
Una introducción concisa a la compresión de datos por David Salomon
Artículo: Un estudio de varias técnicas de compresión de datos
Publicación de blog: Compresión en formatos de archivo abiertos
Artículo: Formatos de archivo abiertos
Artículo: Compresión en bases de datos
Compresión con pérdida para datos genómicos (RNA)
\


