Quando pré-agregar
Decida entre agregação em tempo real, visões materializadas e OLAP posterior com base na atualidade dos dados e no custo.
Quando pré-agregar é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.
Três estratégias para consultas de agregação
- Em tempo real — recalcule sempre
- Materializada — armazene e atualize periodicamente
- Por gatilho/em cache — atualize incrementalmente a cada alteração
Agregação em tempo real
Simples e sempre atualizada:
SELECT user_id, COUNT(*) FROM orders WHERE status = 'paid' GROUP BY user_id;Quando a agregação em tempo real é adequada
A consulta é rápida o suficiente (bons índices, resultado pequeno e chamadas pouco frequentes). Opte pelo tempo real por padrão — otimize somente quando medir problemas.
Agregação materializada
Para relatórios dispendiosos e "razoavelmente atuais":
CREATE MATERIALIZED VIEW user_revenue_30d AS
SELECT user_id, SUM(total) AS revenue
FROM orders
WHERE created_at >= NOW() - INTERVAL '30 days'
GROUP BY user_id;
-- Refresh nightly:
REFRESH MATERIALIZED VIEW CONCURRENTLY user_revenue_30d;Agregação por gatilho / incremental
Para painéis em tempo real, mantenha uma tabela de resumo com gatilhos:
CREATE TABLE user_summary (
user_id BIGINT PRIMARY KEY,
order_count INT NOT NULL DEFAULT 0,
revenue NUMERIC(12,2) NOT NULL DEFAULT 0
);
CREATE FUNCTION incr_summary() RETURNS TRIGGER AS $$
BEGIN
INSERT INTO user_summary (user_id, order_count, revenue)
VALUES (NEW.user_id, 1, NEW.total)
ON CONFLICT (user_id) DO UPDATE
SET order_count = user_summary.order_count + 1,
revenue = user_summary.revenue + EXCLUDED.revenue;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER trg_summary AFTER INSERT ON orders
FOR EACH ROW EXECUTE FUNCTION incr_summary();Compensações
| Estratégia | Atualidade | Custo de gravação | Custo de leitura |
|---|---|---|---|
| Em tempo real | Imediata | Nenhum | Alto |
| Materializada | Desatualizada | Lote de atualização | Baixo |
| Por gatilho | Imediata | Por gravação | Baixo |
Escolha pela proporção de leituras/gravações
- Muitas gravações, leituras ocasionais → tempo real (ou visualização materializada atualizada em lotes)
- Muitas leituras, gravações moderadas → visualização materializada
- Muitas leituras AND gravações, atualidade crítica → resumo por gatilho
Pré-agregação externa
Para análises em escala de armazém de dados, direcione a agregação para:
- Bancos de dados OLAP (ClickHouse, Druid)
- Modelos dbt em um armazém de dados separado
- Agregações contínuas do TimescaleDB (extensão do PostgreSQL)
Tabelas de resumo versus visualização materializada
Tabelas de resumo personalizadas permitem atualizações incrementais; visualizações materializadas exigem uma atualização completa. Pondere o esforço de desenvolvimento em relação à simplicidade operacional.
Evite gatilhos em tabelas muito ocupadas
Resumos baseados em gatilhos adicionam latência de gravação a cada operação. Para tabelas de alta frequência (eventos, métricas), prefira a atualização de visualizações materializadas em lotes.
Cuidado com a invalidação de cache
"Há apenas duas coisas difíceis em CS." Os resumos por gatilho são um armazenamento em cache. Os erros neles se manifestam como números incorretos no painel. Adicione uma tarefa diária de reconciliação que recalcule os dados a partir da fonte.
Materialize fluxos de várias etapas
Encadeie visualizações materializadas: a etapa 1 agrega eventos, a etapa 2 agrega a etapa 1. Atualize na ordem.
Recapitulação
Faça a pré-agregação quando as leituras dominarem o custo.
- Tempo real → mais simples e sempre atualizado
- Visualização materializada → consulta dispendiosa, desatualização aceitável
- Resumo por gatilho → sempre atualizado, aumenta o custo das gravações
- Escolha com base no seu perfil de leituras/gravações
Verificação rápida
Você tem um painel em tempo real que precisa mostrar a receita dos usuários atualizada a cada segundo. Qual estratégia é mais adequada?
Perguntas Frequentes
A aula “Quando pré-agregar” é grátis?
Sim — o texto completo de “Quando pré-agregar” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.
O que vou aprender em “Quando pré-agregar”?
Decida entre agregação em tempo real, visões materializadas e OLAP posterior com base na atualidade dos dados e no custo. Você pratica SQL Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar SQL Academy?
Nenhuma experiência prévia é necessária. SQL Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Quando pré-agregar”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de SQL Academy?
Sim. Cada aula de SQL Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Visões simples: reutilização lógica
- Visões atualizáveis e gatilhos INSTEAD OF
- Visões materializadas e estratégias de REFRESH
- Quando pré-agregar