Skip to main content
Depois de explorar como consultar nosso conjunto de dados de estatísticas da Wikipedia, vamos nos concentrar em otimizar sua eficiência de armazenamento no ClickHouse. Esta seção demonstra técnicas práticas para reduzir as necessidades de armazenamento, mantendo o desempenho das consultas.

Otimização de tipos

A abordagem geral para otimizar a eficiência de armazenamento é usar os tipos de dados mais adequados. Vamos considerar as colunas project e subproject. Essas colunas são do tipo String, mas têm uma quantidade relativamente pequena de valores distintos:
Isso significa que podemos usar o tipo de dados LowCardinality(), que utiliza codificação com base em dicionário. Com isso, o ClickHouse armazena o ID interno do valor em vez da string original, o que, por sua vez, economiza muito espaço:
Também usamos o tipo UInt64 para a coluna hits, que ocupa 8 bytes, mas tem um valor máximo relativamente pequeno:
Dado esse valor, podemos usar UInt32 em vez disso, que ocupa apenas 4 bytes e nos permite armazenar até ~4 bilhões como valor máximo:
Isso reduzirá o tamanho desta coluna na memória em pelo menos duas vezes. Observe que o tamanho em disco permanecerá inalterado devido à compressão. Mas cuidado: escolha tipos de dados que não sejam pequenos demais!

Codecs especializados

Quando lidamos com dados sequenciais, como séries temporais, podemos aumentar ainda mais a eficiência de armazenamento usando codecs especiais. A ideia geral é armazenar as variações entre os valores, em vez dos próprios valores absolutos, o que reduz bastante o espaço necessário ao lidar com dados que mudam lentamente:
Usamos o codec Delta para a coluna time, que é uma boa opção para dados de séries temporais. A chave de ordenação correta também pode economizar espaço em disco. Como normalmente queremos filtrar por um caminho, vamos adicionar path à chave de classificação. Isso exige recriar a tabela. Abaixo, podemos ver o comando CREATE da nossa tabela inicial e da tabela otimizada:
E vamos dar uma olhada na quantidade de espaço ocupado pelos dados em cada tabela:
A tabela otimizada ocupa, em sua forma compactada, pouco menos de um quarto do espaço.
Última modificação em 3 de julho de 2026