Banco de dados: views materializadas
O curso trata de views materializadas no Postgres e da comparação com cache na aplicação. Começa pela diferença entre uma view, que guarda uma query, e uma view materializada, que guarda linhas como uma fotografia. Explica o lock do REFRESH e do REFRESH CONCURRENTLY, o índice único que a forma concorrente exige e o refresh por agenda, por gatilho ou na leitura. No Rails, trata dos limites do schema.rb, do structure.sql e da gem scenic. Por fim, mostra quando uma view se justifica e como falha em silêncio.
O que você vai aprender
- ✓A diferença entre uma view e uma view materializada
- ✓Refresh comum e concorrente, e o índice único que o concorrente exige
- ✓Escolher refresh por agenda, por gatilho ou na leitura a partir da desatualização aceitável
- ✓Quando uma view materializada serve melhor que um cache na aplicação
- ✓Manter views materializadas no schema do Rails com structure.sql ou scenic
- ✓Tornar visíveis as falhas silenciosas de refresh com uma coluna refreshed_at
Uma view contra uma view materializada
Uma view guarda uma query. Uma view materializada guarda a resposta. Todo o resto sobre elas vem dessa única diferença.
Ler a aula completa grátis →Currículo
7 aulasUma view contra uma view materializada
Mostra que uma view guarda uma query e uma view materializada guarda linhas como fotografia.
O refresh é o problema inteiro
Trata do lock ACCESS EXCLUSIVE do REFRESH, do índice único do CONCURRENTLY e de quando atualizar.
O cache que você já tem
Compara o Admin::StatsQuery em cache com uma view materializada e mostra por que o formato do resultado decide.
Usando-as no Rails
Explica por que o schema.rb perde views materializadas, as saídas structure.sql e scenic e o refresh em SQL puro.
Quando elas se justificam
Apresenta três condições para uma view materializada e as aplica às estatísticas por curso e ao progresso por usuário.
Os modos de falha
Descreve falhas silenciosas: refresh parado, refresh mais lento que o intervalo e SQL da view congelado na criação.
Juntando tudo
Resume o curso e propõe um desafio: uma verificação needs_refresh que ordena as views pelo atraso.