Primeros pasos en la arquitectura no transaccional

1

Manejo de Big Data con Reptiit en Amazon AWS

2

Data Warehouse y Modelo Dimensional en Amazon Repsheet

3

Bases de Datos Columnares: Eficiencia en Consultas Analíticas

4

Procesamiento de Datos con Repsheet y Clústeres SQL

Configura tu entorno de trabajo para Redshift

5

Configuración de IAM y S3 en AWS para Repsheet

6

Configuración de Clúster en Amazon Repsheet para Big Data

7

Conexión y Configuración de Repsheet con Clientes Externos

8

Carga de Datos a Redshift desde Amazon S3: Paso a Paso

Cómo diseñar tu base de datos para mejorar su desempeño

9

Compresión de Datos en Repsheet: Algoritmos y Aplicaciones

10

Algoritmos de Compresión de Datos: Musley y Otros Métodos Eficientes

11

Compresión de Datos en SQL: Evaluación y Comparación de Algoritmos

12

Compresión de Datos en Repsheet: Optimización y Análisis

13

Algoritmos de Distribución de Datos en Repsheet

14

Distribución de Datos en Tablas SQL con Repsheet

15

Llaves de Ordenamiento en Bases de Datos: Compuesta vs. Intercalada

16

Pruebas de Algoritmos de Ordenamiento en SQL con AWS S3 y Redshift

17

Consultas SQL y Algoritmos de Ordenamiento Avanzados

18

Optimización de Datos en Data Warehouses con Repsheet

19

Manejo de Tipos de Datos en Amazon Redshift

20

Optimización de Bases de Datos en Modelos Dimensionales

Manipular enormes cantidades de datos

21

Carga Masiva de Datos en Repshit con el Comando COPY

22

Cargar datos JSON a Redshift usando el comando Copy

23

Parámetros Comunes del Comando COPY en Amazon Redshift

24

Carga Masiva de Datos sin Delimitador en RedSheet

25

Inserción de Datos en Repsheet sin Archivos Planos

26

Actualización Eficiente de Datos en Repsheet con Tablas Auxiliares

27

Optimización de Bases de Datos con Analyze y Vacuum en Repsheet

28

Optimización de Bases de Datos: Estadísticas y Limpieza de Tablas

Buenas prácticas para diseñar y ejecutar consultas en tu base de datos

29

Buenas prácticas de SQL en bases de datos columnares

30

Optimización de Consultas SQL con Plan de Ejecución y Llaves de Ordenamiento

Análisis de comportamiento y descarga de datos con Redshift

31

Exportación de Datos desde Repsheet a Amazon S3 con Unload

32

Tablas útiles para administración en Repsheet

Conclusiones

33

Gestión de Datos y Consultas en Repsheat

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Algoritmos de Compresión de Datos: Musley y Otros Métodos Eficientes

10/33
Recursos

¿Qué es el Algoritmo Musley y para qué se utiliza?

El algoritmo Musley es una herramienta poderosa en la comprensión de datos, especialmente útil cuando la mayoría de los datos en una columna tiene valores significativamente más bajos que el dato máximo. Este algoritmo es ideal en situaciones donde se ha creado una columna de gran tamaño debido a unos pocos datos que lo requieren, mientras la mayoría son bastante pequeños en comparación. Musley tiene tres variantes o "sabores": de ocho, doce y treinta y dos bits, y se aplica a tipos de datos numéricos.

  • Musley de 8 bits: Convierte valores que caben dentro del rango de -127 a 127 a un tamaño de solo ocho bits, ideal para datos originalmente ocupando entre cuatro y ocho bytes.
  • Musley de 16 bits: Para datos en el rango de -32,768 a 32,768, reduciéndolos a dieciséis bits.
  • Musley de 32 bits: Aunque menos común, este se aplica donde es importante la reducción a cuatro bytes mientras se mantiene el rango numérico hasta 214 millones.

Elegir el tipo correcto de codificación Musley requiere un buen entendimiento de los datos para maximizar la eficiencia.

¿Cómo funciona la codificación RoundLink?

RoundLink es una técnica ideal para datos categóricos con pequeñas distribuciones, donde los valores únicos son limitados. En estos casos, aunque el orden de los datos no es esencial, la compresión se beneficia de la repetición consecutiva de categorías como, por ejemplo, las suscripciones en una plataforma.

  • Ejemplo práctico: Si tienes suscripciones Platzi Basic, Platzi Expert y Platzi Expert Plus, RoundLink identifica las repeticiones consecutivas, comprimiendo los datos al agregar un byte adicional que indica la cantidad de veces que se repite un valor, en lugar de almacenarlo de manera redundante.

Esta forma de compresión puede reducir dramáticamente el tamaño de los datos almacenados, de 50 bytes a solo 32 bytes en el ejemplo dado.

¿Cuándo usar text 255 y text 32,000?

El text 255 y text 32,000 son algoritmos específicos para la compresión de texto en bases de datos. Si en una columna existen patrones comunes o ciertas palabras se repiten frecuentemente, estas herramientas pueden ser muy efectivas.

  • Text 255: Se enfoca en identificar y comprimir palabras comunes en textos libres dentro de una columna.
  • Text 32,000: Ofrece una compresión más detallada creando un diccionario indexado de las palabras usadas, lo que es adecuado para textos que reinciden en ciertas expresiones.

Estos algoritmos son particularmente valiosos cuando se manejan direcciones o cualquier tipo de texto con palabras predecibles como 'calle', 'carrera' o 'edificio'.

¿Qué es la codificación estándar y cuándo se utiliza?

La codificación estándar es es una técnica versátil que se aplica tanto a datos numéricos como textuales, buscando reducir su tamaño sin comprometer la integridad o calidad. Esta técnica es ampliamente utilizada en la actualidad debido a su capacidad para disminuir el tamaño de las bases de datos de manera efectiva, facilitando el manejo y procesamiento de grandes cantidades de información.

¿Cómo elegir la codificación adecuada para una base de datos?

Para seleccionar la mejor estrategia de codificación y compresión, es esencial comprender en profundidad los datos y el negocio al que sirven:

  • ID numérico: Considera la codificación delta si el ID es incremental.
  • Nombres: A menos que sean extremamente comunes, podría ser mejor mantenerlos sin compresión adicional.
  • Género y país: Usar un diccionario de bytes o text 255, dado que los valores son limitados en cantidad.
  • Suscripción y promo: Aplicar RoundLink si generalmente aparecen en secuencias repetitivas.
  • Fechas: La codificación delta es útil cuando las diferencias entre fechas son mínimas.

Este conocimiento no solo optimiza la compresión de datos, sino que también informa decisiones arquitectónicas para gestionar eficazmente la información en sistemas complejos.

Aportes 14

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

puede ejecutar el comando ANALYZE COMPRESSION en una tabla que ya tenga datos y utilizar los resultados para seleccionar las codificaciones de compresión.

Un pequeño resumen del final:

  • ID: Como el incremento por cada ID es de uno puedo comprimir cada registro en 1 byte.

  • Nombre: Es mejor dejar la data limpia. La compresión para estos datos tan variables puede que me genere problemas.

  • Género: Bytedict(diccionario de bytes) para decir hombre es 0, mujer 1 y desconocido 2. O text255, porque va a encontrar palabras muy frecuentes: Hombre , mujer o cualquier otro género.

  • País: Hay menos de 256 país o posiblemente la empresa contacta con cierta cantidad de países menores a 256. y también deben haber 255 palabras muy frecuentes.

  • Ciudades: En este caso si puede existir más de 256 ciudades entonces no podemos usar bytedict. Pero si se puede usar text255 porque van a existir ciudades muy repetitivas.

  • Suscripcion_promo: Si se repiten los registros y son repetitivos el runlength puede ayudar. Es igual que las suscripciones de Platzi, Expert, Expert+, Basic.

  • Fecha_creacion : Los registros pueden ser muy recurrentes o no. Pero la diferencia de registro en registro puede ser lo suficiente para que el delta32K funcione.

Como Data scientist o ingeniero de dato debemos conocer los datos , como se mueven y el negocio. La arquitectura va muy ligada a eso.

En el side uno dice “mejores” en vez de “menores” 😛

Mostly encoding
Encoding Compressed storage size Range of values that can be compressed (values outside the range are stored raw)
MOSTLY8 1 byte (8 bits) -128 to 127
MOSTLY16 2 bytes (16 bits) -32768 to 32767
MOSTLY32 4 bytes (32 bits) -2147483648 to +2147483647

Fuente: Link

Toda la base de datos tiene que estar compresa de la misma forma?

Amazon Redshift utiliza una variedad de **algoritmos de compresión** (o **codificación**) para optimizar el almacenamiento y el rendimiento de las consultas. Estos algoritmos se aplican a nivel de columna y están diseñados para diferentes tipos de datos y patrones. A continuación, se explican los principales algoritmos de compresión disponibles en Redshift: ### **1. RAW** * **Descripción**: Sin compresión. * **Usos**: Se utiliza cuando no se aplica ninguna compresión a los datos. Recomendado solo si los datos no se benefician de la compresión. * **Ejemplo**:columna1 INT ENCODE RAW; ### **2. BYTEDICT** * **Descripción**: Codificación basada en diccionarios. Asigna valores únicos de una columna a un índice. * **Usos**: Eficiente para columnas con pocos valores únicos, como códigos de estado, categorías o etiquetas. * **Ejemplo**:columna1 VARCHAR(50) ENCODE BYTEDICT; ### **3. RUNLENGTH** * **Descripción**: Compresión por longitud de ejecución. * **Usos**: Ideal para columnas con muchos valores consecutivos repetidos (como estados binarios o datos ordenados). * **Ejemplo**:columna1 CHAR(1) ENCODE RUNLENGTH; ### **4. DELTA** * **Descripción**: Almacena diferencias entre valores consecutivos. * **Usos**: Adecuado para datos secuenciales, como fechas, IDs incrementales o series temporales. * **Ejemplo**:columna1 TIMESTAMP ENCODE DELTA; ### **5. DELTA32K** * **Descripción**: Variante de `DELTA` para datos con diferencias mayores (hasta 32,000). * **Usos**: Útil para datos numéricos o fechas con saltos grandes entre valores consecutivos. * **Ejemplo**:columna1 INT ENCODE DELTA32K; ### **6. ZSTD (Zstandard)** * **Descripción**: Algoritmo de compresión general que equilibra eficiencia y velocidad. * **Usos**: Adecuado para la mayoría de los tipos de datos. Es altamente eficiente y flexible. * **Ejemplo**:columna1 DECIMAL(10, 2) ENCODE ZSTD; ### **7. TEXT255** * **Descripción**: Codificación para cadenas de texto de hasta 255 caracteres. * **Usos**: Columnas de texto cortas, como nombres, correos electrónicos, códigos de producto, etc. * **Ejemplo**:columna1 VARCHAR(255) ENCODE TEXT255; ### **8. TEXT32K** * **Descripción**: Codificación para cadenas de texto más largas (hasta 32,000 caracteres). * **Usos**: Columnas de texto largas, como descripciones o comentarios. * **Ejemplo**:columna1 VARCHAR(32000) ENCODE TEXT32K; ### **9. MOSTLY** * **Descripción**: Variantes de codificación que optimizan el almacenamiento para columnas con valores predominantemente repetidos. * **MOSTLY8**: Para columnas con valores enteros en un rango pequeño. * **MOSTLY16**: Para columnas con valores enteros en un rango más amplio. * **MOSTLY32**: Para columnas con valores enteros grandes pero que tienen muchos valores repetidos. ### **Cómo determinar el mejor algoritmo** 1. **Automático con** `COPY`: * Cuando cargas datos con el comando `COPY` sin especificar la compresión, Redshift analiza los datos y aplica automáticamente el algoritmo más adecuado. * Ejemplo:COPY mi\_tabla FROM 's3://ruta-del-archivo' CREDENTIALS '...'; 2. **Manual con** `ANALYZE COMPRESSION`: * Analiza la tabla para sugerir el mejor algoritmo de compresión para cada columna. * Ejemplo:ANALYZE COMPRESSION mi\_tabla; ### **Mejores prácticas** * Usa compresión en todas las columnas que no sean claves de partición o distribución. * Revisa los resultados de `ANALYZE COMPRESSION` antes de aplicar configuraciones manuales. * Si cargas datos dinámicos o desconocidos, deja que el comando `COPY` determine la compresión automáticamente. La elección del algoritmo correcto puede mejorar significativamente el rendimiento de las consultas y reducir costos de almacenamiento.

Sigo con la duda que en cuales casos es mejor con comprimir columnas que usar normalización 😦.
Por ejemplo con la codificación Runlength, siento que se podría resolver el mismo problema creando una tabla planes y haciendo referencia a los id en las otras tablas.

MOSTLY16 2 bytes (16 bits) De -32768 a 32767

me gusta por el tema columnar la facilidad en poder realizar este tipo de compresión.

Me encantan los algoritmos de compresión son muy ingeniosos
¿Tenemos un curso de estos en Platzi?

INTERESANTE