Pilares da Escalabilidade: Estratégias de Otimização e Melhoria de Performance
Conheça os 3 pilares para escalar qualquer aplicação web e distribuída, partindo de passos mais simples e baratos até passos mais rebuscados e complexos.
https://www.youtube.com/watch?v=GBTdnfD6s5Q “ Eu não escrevi um livro sobre microservices, mas sim sobre como você arquiteta para Entrega Contínua. ” — Sam Newman
SELECT nf.* FROM NotaFiscal nf Hibernate executa n+1 selects List notas = dao.lista(); for (NotaFiscal nf : notas) { processaItensDaNota(nf); } SELECT i.* FROM Item i WHERE i.nota_fiscal_id=? SELECT i.* FROM Item i WHERE i.nota_fiscal_id=? SELECT i.* FROM Item i WHERE i.nota_fiscal_id=? SELECT i.* FROM Item i WHERE i.nota_fiscal_id=? SELECT i.* FROM Item i WHERE i.nota_fiscal_id=? ...
entityManager .createQuery( "SELECT n FROM NotaFiscal n LEFT JOIN fetch n.itens") .getResultList(); Utilizando Join Fetch habilita EAGER em mapeamentos LAZY
List notas = entityManager .createQuery( “SELECT new Devolucao(n.numero, n.serie) FROM NotaFiscal n WHERE n.tipo = 'DEVOLUCAO'") .getResultList(); DTO Projections
List notas = entityManager .createQuery( “SELECT new Devolucao(n.numero, n.serie) FROM NotaFiscal n WHERE n.tipo = 'DEVOLUCAO'") .getResultList(); Paginação
List notas = entityManager .createQuery( “SELECT new Devolucao(n.numero, n.serie) FROM NotaFiscal n WHERE n.tipo = 'DEVOLUCAO'") .setMaxResults(100) .getResultList(); Paginação
List notas = entityManager .createQuery( “SELECT new Devolucao(n.numero, n.serie) FROM NotaFiscal n WHERE n.tipo = 'DEVOLUCAO'") .setMaxResults(100) .getResultList(); Paginação