Banco de Dados II — 2026.2

Fechamento do M4
SELECT e INSERT de ponta a ponta

👨‍🏫 Prof. Gustavo Pinto 🏛️ UFPA 📅 3 de novembro 🕐 7h30 – 9h

O que precisa funcionar ao fim de hoje

Tokenizador

Palavras-chave, identificadores, números, texto entre aspas e pontuação. Erro claro para aspas desbalanceadas.

Parser

Árvore sintática para CREATE TABLE, INSERT e SELECT *. O WHERE é reconhecido.

Catálogo

Na página 1, relido ao abrir o arquivo. Tabela inexistente é recusada antes de tocar nos dados.

$ ./minidb dados.db < consultas.sql
CREATE TABLE aluno (id INT, matricula INT);   -- OK
INSERT INTO aluno VALUES (1, 20260001);       -- OK 1
SELECT * FROM aluno;                          -- 1|20260001  (1 linha)

E as mesmas linhas voltam quando outro processo abre o arquivo.

Hoje termina a Avaliação 1

O que entraM1 a M4: página, cache, árvore B+, parser e catálogo
PrazoHoje, 03/11, às 23h59, por pull request
JuntoNOTES.md de cada módulo e o histórico de commits
PesoTestes de aceitação, qualidade do código e do histórico, NOTES.md30

Na quinta publico a solução mínima viável. Depois disso, o M1–M4 não vale mais pontos.

O resto do semestre

Solução mínima viável

05/11
  • Apresento a implementação de referência
  • Apresento os dez tópicos
  • Cada dupla escolhe o seu

Implementação

10/11 a 03/12
  • Todas as aulas são laboratório
  • Pode partir do próprio minidb ou da referência
  • Código congelado em 07/12, 23h59

Apresentações

08/12 e 10/12
  • Metade das duplas em cada dia
  • Conceito e implementação
  • 15 a 22/12: buffer

Os dez tópicos

#TópicoO que o minidb passa a fazer
1Executor e filtroWHERE com modelo iterador, varredura sequencial e por índice
2TransaçõesBEGIN, COMMIT e ROLLBACK com log de valor antes e depois
3RecuperaçãoLog de escrita antecipada; volta consistente depois de um kill -9
4Remoção e atualizaçãoDELETE e UPDATE, com fusão e redistribuição na árvore B+
5JunçõesJOIN por laço aninhado e por hash
6Ordenação e agregaçãoORDER BY com ordenação externa; COUNT, SUM, GROUP BY
7Tamanho variávelVARCHAR e nulos em página com diretório de slots
8ConcorrênciaVárias sessões, bloqueio em duas fases e detecção de deadlock
9Otimizador por custoANALYZE, estimativa de cardinalidade e EXPLAIN
10LSM-treeMotor alternativo: memtable, SSTables e compactação

No máximo duas duplas por tópico, por ordem de escolha na quinta.

Avaliação 2: o tópico

ImplementaçãoTestes da dupla para o tópico, código, histórico de commits e NOTES.md40
ConceitoApresentação do tópico, ligada ao código que vocês escreveram15
PerguntasCada integrante responde sozinho sobre um trecho do código15

A pergunta que toda apresentação responde: o que precisou mudar no minidb para ter isso?

Doze minutos de apresentação, com demonstração ao vivo, e cinco de perguntas. Quem lê o material recebe zero.

Dúvidas?

O resto da aula é laboratório. Até 23h59, o pull request

📧 gpinto@ufpa.br