✅ Finalizando a migração para o ClickHouse - Valeu a pena?
Saga da Migração: PostgreSQL → ClickHouse
Bom galera, finalizando aqui nesse post a pequena saga de migração do PostgreSQL para o ClickHouse.
Coloquei o novo DB em produção agora a pouco e não tive problemas! 🎉
Nosso caminho até aqui...
- Reduzi um DB de 52gb para 4.5gb! PostgreSQL -> Clickhouse
- Reduzi um DB de 8TB para 218 GB! como? ClickHouse!
- Os "perrengues" depois de transformar um DB de 8TB em 218GB
- Depois de migrar 8TB, o Clickhouse "sequestrou" meus dados kkkk
Durante essa jornada tive imprevistos, dificuldades, mas também ótimos resultados que fizeram todo o processo valer a pena.
Antes (PostgreSQL)
- Banco de 8TB
- Consultas variando entre 100ms e 10s (dependendo da carga e do tamanho da consulta)
- Servidor: 8 vCPU / 16 threads, 90GB RAM, 10TB de disco (crescimento constante)
- Picos de 100% de CPU constantes, e RAM em 70-80% a todo momento.
- Migração recente para aplicar particionamento mais definido — mas mesmo assim já dava sinais de “cansaço”.
Depois (ClickHouse)
- Banco caiu para 270GB (tabela principal + tabelas de agregações)
- Consultas em média de 70ms–1s
- Servidor: 6 vCPU / 12 threads (90% do tempo mal usa 1 CPU)
- 32GB RAM (apenas 3GB usados na maior parte do tempo)
- Expurgo automático de dados após o período de validade (coisa que era problemática no PostgreSQL)
- Remoção de duplicações nos dados automaticamente!. essa era uma dor constante no PostgreSQL, ter que consultar os dados e remover as duplicações no código, no ClickHouse essas duplicações são removidas automaticamente sem dor de cabeça!
Ingestão de dados
- Antes: 6 instâncias consumindo Kafka em paralelo para dar conta do PostgreSQL
- Agora: apenas 1 instância consome 600Mi de linhas/dia sem atraso
Benefícios
- Consultas rápidas e flexíveis, permitindo filtros mais definidos e personalizados
- Economia de mais de 90% em disco 🎉
- Possibilidade de expansão horizontal para acompanhar crescimento futuro
Observação Importante
Não estou dizendo que o PostgreSQL é ruim — muito pelo contrário!
Ele continua sendo um dos melhores DBs para a maioria dos casos e ainda usamos em partes do sistema que exigem inserções e atualizações frequentes.
O problema está no cenário analítico:
- Hoje temos 38Bi de linhas
- Nesse volume, o PostgreSQL não entrega a mesma performance e economia de recursos que o ClickHouse.
O Problema da MV (Materialized View)
No post anterior (aqui) comentei sobre dificuldades na migração de dados entre tabelas.
Descobri que a causa era uma View Materializada na tabela de agregação que removia duplicações.
- Durante migrações pesadas, ela não conseguia acompanhar o ritmo dos inserts
- Chegava a 30% do processo e explodia em erro por falta de recursos
Em produção isso não acontece, já que o volume de inserts é gradual.
Solução: remover a MV durante a migração. Resultado: 36Bi de linhas migradas em 44 minutos. 🚀
📌 Dica: usem o clickhouse-client via terminal — mostra progresso em tempo real e erros claros, diferente do DBeaver que só mostra mensagens genéricas.
Lições e Dicas
-
Planeje bem o
ORDER BYda tabela- Ele pode acelerar absurdamente as consultas ou torná-las inutilizáveis.
- Testei 4x diferentes combinações até chegar no modelo atual.
-
Schema quase fixo
- O ClickHouse não permite tantas alterações no schema.
- Ideal começar no PostgreSQL, validar a modelagem e só depois migrar pro ClickHouse.
-
Sobre batches
- Usar
createdAt(dica dada em um comentário) como critério de migração não ajudaria, pois não faz parte da chave de ordenação. - Consultas por essa coluna seriam extremamente lentas.
- Usar outras colunas para "percorrer" os dados não entrega uma exatidão de não repetir alguns dados entre batches.
- Usar
Deploy e Infraestrutura
- Uso ClickHouse em Docker, com bind da pasta de dados para o host.
- Sim, já li várias vezes que “não se deve rodar DB em container”. Também acreditei nisso.
Mas depois de alguns perrengues, mudei de ideia!
Resultado fora do container: logs espalhados e dificuldade de gerenciar. Dificuldade de identificar motivo de instabilidades e quedas.
Resultado com Docker + Portainer:
- Fácil visualizar logs
- Reiniciar/recriar container em poucos cliques
- Monitoramento simples (CPU, memória, disco, rede)
- Nenhuma perda de desempenho observada
👉 Meu veredito: usem Docker. Testem, ajustem e vejam se atende.
Conclusão
Estou muito feliz com o resultado:
- Economia absurda de disco (90%+)
- Consultas rápidas e consistentes
- Ingestão simplificada
- Escalabilidade futura garantida
O ClickHouse mostrou maturidade para ser a solução definitiva para nosso cenário atual e deve ganhar ainda mais espaço dentro do sistema.
Obrigado a todos que acompanharam a saga! 🙌
Só continuei compartilhando porque vi que havia interesse no tema.
Foi gratificante buscar no Google sobre ClickHouse e encontrar um dos meus próprios posts linkados 😅. Espero que esse relato ajude quem também está pesquisando sobre esse DB.
Qualquer dúvida, deixem nos comentários — pode ser que eu tenha esquecido de falar algo. 😉