Para entender por que o ClickHouse comprime dados tão bem, recomendamos a leitura deste artigo. Em resumo, nosso banco de dados orientado a colunas grava os valores por coluna. Quando esses valores são ordenados, valores idênticos ficam adjacentes uns aos outros, e os algoritmos de compressão aproveitam padrões contíguos nos dados. Além disso, o ClickHouse tem codecs e tipos de dados granulares que permitem ajustar ainda mais a compressão com facilidade.A compressão no ClickHouse será impactada por 3 fatores principais:
- A chave de ordenação
- Os tipos de dados
- Quais codecs são usados
Escolha o tipo de dado certo para otimizar a compressão
posts:
posts- Um esquema sem otimização de tipos e sem chave de ordenação.posts_v3- Um esquema com tipos otimizados, com o tipo e o tamanho em bits adequados para cada coluna, com chave de ordenação(PostTypeId, toDate(CreationDate), CommentCount).
posts, sem chave de ordenação.
Uma observação sobre partes `compact` versus `wide`
Uma observação sobre partes `compact` versus `wide`
Se você estiver vendo valores de
compressed_size ou uncompressed_size iguais a 0, isso pode acontecer porque o tipo das
partes é compact, e não wide (veja a descrição de part_type em system.parts).
O formato da parte é controlado pelas configurações min_bytes_for_wide_part
e min_rows_for_wide_part, o que significa que, se os dados inseridos
resultarem em uma parte que não ultrapasse os valores das configurações mencionadas acima, a parte será compact em vez de
wide, e você não verá os valores de compressed_size ou uncompressed_size.Para demonstrar:Consulta
Resposta
A consulta acima depende da tabela columns no banco de dados do sistema. Esse banco de dados é gerenciado pelo ClickHouse e é uma verdadeira mina de informações úteis, desde métricas de desempenho de consultas até logs de cluster em segundo plano. Recomendamos “System Tables and a Window into the Internals of ClickHouse” e os artigos complementares[1][2] para quem quiser se aprofundar.
Para resumir o tamanho total da tabela, podemos simplificar a consulta acima:
posts_v3, a tabela com um tipo e uma chave de ordenação otimizados, podemos observar uma redução significativa nos tamanhos não comprimido e comprimido.
Body, Title, Tags e CreationDate, obtida ao ordenar os dados antes da compressão e usar os tipos adequados.
Escolhendo o codec de compressão de coluna adequado
Veja aqui outras opções.
Abaixo, especificamos o codec
Delta para Id, ViewCount e AnswerCount, partindo da hipótese de que eles terão correlação linear com a chave de ordenação e, portanto, devem se beneficiar da codificação Delta.
Compressão no ClickHouse Cloud
ZSTD (com valor padrão 1). Embora a velocidade de compressão desse algoritmo possa variar conforme o nível de compressão (quanto maior, mais lento), ele tem a vantagem de manter um desempenho consistentemente rápido na descompressão (com variação de cerca de 20%) e também de poder ser paralelizado. Nossos testes históricos também indicam que esse algoritmo costuma ser suficientemente eficaz e pode até superar o LZ4 combinado com um codec. Ele é eficaz para a maioria dos tipos de dados e distribuições de informações e, por isso, é uma escolha padrão sensata para uso geral — razão pela qual nossa compressão inicial já é excelente mesmo sem otimização.