O documento apresenta estratégias para otimizar consultas do Hibernate em uma aplicação web, incluindo Named Query, Lazy Loading e cache de segundo nível. Os autores testaram as estratégias em um sistema de gestão e apoio a processos sob carga de 1, 10 e 100 usuários, analisando os resultados para melhorar o desempenho.
1. Estratégias para Otimização de Consultas
do Hibernate em uma Aplicação Web
Orientadores:
Prof. MSc Luiz Eduardo Guarino
Prof. MSc Leandro Guarino
Allan Silva
Heitor Bernardino
Outubro - 2014
2. Agenda
• Introdução e Objetivos
• Desempenho em Aplicações Web
• ORM e Hibernate
• Otimização de Consultas
• Testes e Monitoramento
• Metodologia
• Estudo de Caso
• Estratégias aplicadas e analisadas
• Resultados
• Conclusões e Trabalhos Futuros
6. Objetivos
• Otimizar consultas de uma aplicação através
da implementação de estratégias analisadas;
• Reunir dados de desempenho para tomar
decisões de negócio que afetam o sistema;
• Melhorar a qualidade percebida pelos
usuários.
7. Desempenho
• Alguns indicadores:
– Tempo de Resposta (Response time),
– Carga (Load),
– Vazão (Throughput),
– Gargalo (Bottleneck)
• Tempo de Resposta: medida de
desempenho de interesse do usuário.
9. Fatores de Impacto no Desempenho
• Conteúdo;
• Software do Servidor;
• CPU, Disco, I/O ... Infraestrutura;
• Largura de banda da rede;
• Banco de Dados;
• Aplicação
– Desempenho no acesso a dados.
10. Persistência de Dados
• Na maioria dos casos, dados são gravados em
bancos relacionais;
• ... E desenvolvemos orientado a objetos...
Paradigmas diferentes!
12. Hibernate
• Ferramenta para mapeamento objeto
relacional;
• Implementação da especificação de
persistência de dados em Java (JPA);
• Existem outras: EclipseLink, Open JPA,
DataNucleus etc.
14. Problemas Comuns
• O problema do select n + 1
–Você faz uma consulta e são executadas N
consultas em sequência;
–número de queries excessivas.
15. Otimização de Consultas
• Reformular consultas;
• Reduzir ou distribuir os hits ao banco de dados;
• Utilizar recursos adicionais (memória...);
• Obter o mesmo resultado;
• Tempo de resposta menor.
16. Testes de Desempenho
• Verificar o tempo de resposta e o rendimento
da aplicação de acordo com o resultado
esperado
17. Testes de Desempenho
• Tempo x Carga;
• Gargalos;
• Expectativas;
• Métricas para Medições;
• Voltado ao Ambiente e não à Funcionalidade;
• Ambiente similar ao de Produção;
• Base para otimização.
19. Monitoramento e Métricas
• "Se você não pode medir algo, você não
pode melhorá-lo“ (Lord Kelvin);
• Definição do desempenho em termos
quantitativos.
23. Dados base para Testes
• Questionário sobre Sistema
– Demanda, Picos, Tempo de resposta ideal, etc.
• Consulta de Nota Fiscal;
• Filtros de busca mais utilizados;
• Retorno de 5 mil linhas;
• Carga de 1, 10 e 100 usuários.
36. Considerações Finais
• Sempre precisamos considerar o desempenho?
• Melhor usar SQL puro do que ORM?
– DEPENDE!
• Possibilidade: Adoção de abordagens mistas;
• Não há “uma estratégia para performar tudo”;
• Objetivos alcançados
37. Trabalhos Futuros
• Análise com mais variáveis e estratégias;
• Outras operações;
• Plataformas móveis;
• Abordagem de OGM(Object/Grid Mapper).
38. Referências
• Sistema de Banco de Dados
• Java Persistence with Hibernate
• Just Hibernate
• Pro JPA 2
• The Art of Application Performance Testing
• Artigos Científicos
• Documentação das Ferramentas
40. Estratégias para Otimização de Consultas
do Hibernate em uma Aplicação Web
Orientadores:
Prof. MSc. Luiz Eduardo Guarino
Prof. MSc. Leandro Guarino
Allan Silva
Heitor Bernardino
Outubro - 2014