Reduzi um DB de 52gb para 4.5gb! PostgreSQL -> Clickhouse
Opa, saudações a todos.
Passando pra compartilhar minha experiência com o banco de dados Clickhouse.
Como o título do post diz, consegui reduzir em mais de 90% o tamanho dos dados simplesmente trocando de banco de dados.
sou adepto do PostgreSQL a anos e sempre gostei dele pra desempenho e consultas rápidas.
Porém ultimamente estou a frente de uma serie de otimizações e migrações de dados na empresa em que trabalho, e o PostgreSQL começou a ficar lento diante do volume de dados e das consultas simultâneas.
Diante disso, procurei diversas soluções pra continuar usando PostgreSQL e manter o bom desempenho, mas não existe mágica nisso.
Tentei particionar as tabelas, criar indices, views materializadas, Timescale DB e tudo mais focando em desempenho.
até tentei a boa e velha força bruta baseada em gastar dinheiro em servidores grandes pra segurar a carga.
Segurou, mas sempre com alguns poréns e instabilidades momentâneas.
e esse tipo de "solução" não é o ideal.
Os DBs que estou trabalhando são de histórico de dados (cliques, acessos, log de registros, etc), e todas as queries sempre são focadas em contagem e agregações desses dados, nunca é uma busca 1:1.
pensando nisso, decidi sair da bolha do PostgreSQL e tentar outros DBs.
Até que um amigo me deu a dica de um post no blog do PostHog (plataforma de monitoramento e observabilidade) e como eles solucionaram o problema de desempenho em grandes volumes de dados migrando pra clickhouse.
Foi a fórmula mágica caindo no meu colo!
A simples migração dos dados de um dos DBs pra clickhouse já demonstrou um avanço incrível!
redução de 52gb pra míseros 4.5gb!
mais de 90% de redução!
tempo medio de consultas abaixo dos 90ms, em comparação com +200ms no PostgreSQL.
uso de recursos muito menor: DB em PostgreSQL tem 8 vcpu e 32gb de RAM contra míseros 4vcpu e 8gb de RAM no clickhouse.
Ainda estou em testes preliminares em relação ao clickhouse, mas estou me surpreendendo bastante com o desempenho e compressão dos dados. Parece até mágica kkkkkk.
pontos a levar em consideração:
clickhouse não é útil em todos os cenários.
ele brilha em situações como a que descrevi acima: armazenamento de dados de históricos pra uma busca agregada com base em alguma coluna.
- ex: buscar a contagem de cliques em determinado link no dia XYZ.
- nisso o clickhouse desempenha absurdamente bem.
Outras vantagens do clickhouse
-
controle de validade dos dados de uma tabela
- Ao criar uma tabela, é possível definir um TTL (time to live) e assim os dados são apagados automaticamente pelo próprio DB sem precisar de tarefas cron e queries de delete em massa.
- isso é uma maravilha nesse tipo de armazenamento de dados, pois conforme o tempo passa, o volume de dados aumenta, o banco cresce e depois se torna uma dor de cabeça controlar o consumo de disco.
-
Conexão com o banco muito mais simples, sem necessidade de Pools ou gerenciamento de sessões.
- Quem ja trabalhou com PostgreSQL em produção sabe que o banco simplesmente morre se você abrir sessões demais, e é sempre necessário equilibrar o tamanho dos pools de sessões pra evitar derrubar o banco em momentos de pico. Pra isso, acaba sendo obrigatório usar pgbouncer ou algum pooler externo pra lidar melhor com os acessos ao DB, e isso gera mais complexidade na Stack.
- Com o clickhouse não tem isso, as sessões são muito otimizadas e simplificadas, tudo via HTTP padrão, oque reduz complexidade de conexão.
-
Replicação e sharding nativo
- PostgreSQL também tem replicação, mas sharding é um terror de fazer com citus, além de ser um plugin pro DB, oque gera incertezas.
- No clickhouse isso é nativo e aparenta ser bem simplificado, tornando esse tipo de crescimento horizontal menos penoso pra quem gerencia (eu no caso kkkkk)
-
Tem várias outras vantagens mas por enquanto essas que me atraíram mais e são as que mais vou utilizar...
Próximo passo
agora a próxima migração vai ser de um DB massivo de 7tb de tamanho e 50 bilhões de linhas que segue a mesma lógica: dados de histórico.
esse é o verdadeiro alvo da minha experiência com clickhouse, porém preferi testar primeiro em um DB menor pra não perder tempo. Se desse errado nesse teste, seria menos esforço jogado fora kkkkk
ps: Não sou mestre em banco de dados, mas sei me virar. Tudo descrito aqui foi com base em experiência própria