Para entender por qué ClickHouse comprime los datos tan bien, recomendamos leer este artículo. En resumen, nuestra base de datos orientada a columnas escribe los valores por columnas. Cuando estos valores se ordenan, los valores idénticos quedan ubicados de forma contigua, y los algoritmos de compresión aprovechan esos patrones continuos en los datos. Además, ClickHouse dispone de codecs y tipos de datos más granulares que le permiten ajustar aún más la compresión con facilidad.La compresión en ClickHouse se ve afectada por 3 factores principales:
- La clave de ordenación
- Los tipos de datos
- Los codecs que se utilizan
Elija el tipo de dato adecuado para optimizar la compresión
posts:
posts- Un esquema no optimizado en cuanto a tipos y sin clave de ordenación.posts_v3- Un esquema optimizado en cuanto a tipos, con el tipo y el tamaño en bits adecuados para cada columna, y con clave de ordenación(PostTypeId, toDate(CreationDate), CommentCount).
posts sin clave de ordenación.
Una nota sobre las partes `compact` frente a `wide`
Una nota sobre las partes `compact` frente a `wide`
Si ves valores de
compressed_size o uncompressed_size iguales a 0, puede deberse a que el tipo de las
partes es compact y no wide (consulta la descripción de part_type en system.parts).
El formato de la parte está controlado por la configuración min_bytes_for_wide_part
y min_rows_for_wide_part, lo que significa que, si los datos insertados
dan como resultado una parte que no supera los valores de la configuración mencionada, la parte será compact en lugar
de wide y no verás los valores de compressed_size o uncompressed_size.Para demostrarlo:Consulta
Respuesta
La consulta anterior se basa en la tabla columns de la base de datos del sistema. Esta base de datos la administra ClickHouse y es una auténtica mina de información útil, desde métricas de rendimiento de consultas hasta logs en segundo plano del cluster. Recomendamos “System Tables and a Window into the Internals of ClickHouse” y los artículos complementarios[1][2] para quien quiera profundizar.
Para resumir el tamaño total de la tabla, podemos simplificar la consulta anterior:
posts_v3, la tabla con un tipo y una clave de ordenación optimizados, podemos ver una reducción significativa en los tamaños sin comprimir y comprimido.
Body, Title, Tags y CreationDate, gracias a la ordenación de los datos antes de la compresión y al uso de los tipos adecuados.
Elegir el códec de compresión de columna adecuado
Consulte aquí para ver más opciones.
A continuación especificamos el códec
Delta para Id, ViewCount y AnswerCount, partiendo de la hipótesis de que estarán linealmente correlacionados con la clave de ordenación y, por tanto, deberían beneficiarse de la codificación Delta.
Compresión en ClickHouse Cloud
ZSTD (con un valor predeterminado de 1). Aunque la velocidad de compresión de este algoritmo puede variar según el nivel de compresión (a mayor nivel, menor velocidad), tiene la ventaja de mantener un rendimiento de descompresión sistemáticamente alto (con una variación de alrededor del 20 %) y de poder paralelizarse. Nuestras pruebas históricas también indican que este algoritmo suele ser lo bastante eficaz e incluso puede superar a LZ4 combinado con un códec. Funciona bien con la mayoría de los tipos de datos y distribuciones de datos, por lo que es una opción predeterminada sensata para uso general; de ahí que nuestra compresión inicial ya sea excelente incluso sin optimización.