Pular para conteúdo

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

  1. PARTITION BY RANGE: Define a regra de segmentação temporal das linhas diretamente na assinatura da tabela mestre.
  2. Partições Físicas Independentes: Cada partição opera como uma tabela real separada no disco do servidor.
  3. Í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