Aula 20 - Projeto Capstone: Banco de Dados Relacional de Alta Performance 🏆
Objetivo Pedagógico
Objetivo: Concepção, implementação e ajuste de desempenho (Tuning) de um banco relacional corporativo completo: particionamento declarativo, índices especializados e integridade referencial.
📑 1. Fundamentos Teóricos & Análise Técnica
O Projeto Capstone de Bancos de Dados Relacionais desafia o estudante a atuar como Engenheiro de Banco de Dados / DBA, projetando e otimizando um Banco de Dados de Telemetria e Transações Financeiras com Particionamento de Tabelas em Larga Escala.
O projeto avalia as seguintes competências de engenharia de dados: 1. Particionamento Declarativo por Faixa de Datas (Range Partitioning): Divisão da tabela massiva de eventos em partições mensais independentes, permitindo que consultas limitem a varredura exclusivamente às partições de interesse (Partition Pruning). 2. Estratégia Completa de Indexação: Criação de índices B-Tree compostos para consultas operacionais e índices BRIN (Block Range Index) para colunas sequenciais temporais volumosas com custo mínimo de armazenamento. 3. Modelagem Relacional com Integridade Estrita: Chaves estrangeiras, restrições de verificação (CHECK), gatilhos (Triggers) de auditoria e geração automática de colunas computadas. 4. Relatório de Tuning de Consultas: Relatório técnico com comparação do plano de execução antes e depois do tuning, comprovando redução de custo superior a 90%.
📐 Arquitetura Conceitual & Diagrama de Fluxo
graph TD
Query["Consulta: Eventos de Junho/2026"] --> Router["Particionamento Declarativo"]
Router -->|Partition Pruning| PJune["Partição eventos_2026_06 (Lida em Milissegundos)"]
Router -.x|Ignorada| PMay["Partição eventos_2026_05"]
Router -.x|Ignorada| PJuly["Partição eventos_2026_07"]
PJune --> BRIN["Índice BRIN (Compacto em Memória)"]
style Query fill:#e1f5fe,stroke:#01579b
style Router fill:#fff3e0,stroke:#e65100
style PJune fill:#e8f5e9,stroke:#2e7d32 🔍 Pilares e Diretrizes Técnicas
Nesta unidade, aprofundamos os seguintes conceitos fundamentais: - Partition Pruning: Otimização automática em que o planejador exclui partições inteiras da leitura com base na cláusula WHERE. - Índices BRIN para Big Data: Índices até 100x menores que B-Trees convencionais para tabelas ordenadas por tempo. - Manutenção Desacoplada: Possibilidade de descartar dados antigos instantaneamente com DROP TABLE particao_antiga sem lock na tabela principal. - Auditoria Automatizada: Triggers que registram alterações de dados em tabela de histórico com usuário e timestamp.
🛠️ 2. Implementação Prática em PostgreSQL, SQL Avançado e Tuning de Infraestrutura
Abaixo está a implementação técnica de referência, estruturada com padrões de engenharia de software e foco em robustez:
// capstone_partitioning.sql (Implementação de Particionamento Declarativo)
-- 1. Tabela Principal Particionada por Faixa de Datas
CREATE TABLE transacoes_globais (
id BIGSERIAL,
data_transacao TIMESTAMP WITH TIME ZONE NOT NULL,
cliente_id INT NOT NULL,
valor NUMERIC(12, 2) NOT NULL,
PRIMARY KEY (id, data_transacao)
) PARTITION BY RANGE (data_transacao);
-- 2. Criação das Partições Mensais
CREATE TABLE transacoes_2026_06 PARTITION OF transacoes_globais
FOR VALUES FROM ('2026-06-01') TO ('2026-07-01');
CREATE TABLE transacoes_2026_07 PARTITION OF transacoes_globais
FOR VALUES FROM ('2026-07-01') TO ('2026-08-01');
-- 3. Índice BRIN de Alta Eficiência de Espaço
CREATE INDEX idx_brin_transacoes_data
ON transacoes_globais USING BRIN (data_transacao);
💡 Análise Passo a Passo do Código
- PARTITION BY RANGE: Define a regra de segmentação temporal das linhas diretamente na assinatura da tabela mestre.
- Partições Físicas Independentes: Cada partição opera como uma tabela real separada no disco do servidor.
- Índice BRIN: Registra o valor mínimo e máximo de data para cada bloco de páginas, ocupando menos de 1% do espaço de uma B-Tree comum.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto