Melhor Desempenho Hibernate,JPA ou JDBC?

12 respostas
rafaelpiton

Pessoal,
procurei aqui no fórum mas não encontrei…

Gostaria de saber qual estratégia de persistencia tem melhor desempenho?

Hibernate+JPA? só um ou outro? ou só JDBC?

vlw…

12 Respostas

otaviojava

Usar o jdbc você ganhará um pouco de desempenho ai iniciar a aplicação. Enquanto usando algum framework de persistência.
No entanto realizar as persistência entre banco e objeto é mais rápido utilizando esses frameworks. Cabe a você analisa quando é ou não vantagem usar um framework de persistência.

Andre_Brito

Opa.

Sim, JDBC é mais rápido. Só que a diferença de performance não é tão gritante. Ainda mais se você comparar o tempo de desenvolvimento que leva usando JDBC com o tempo que leva usando Hibernate. Você pode ainda fazer algumas otimizações quando usa Hibernate que os tempos de consulta podem nem ficar perceptíveis.

rafaelpiton

Legal…

é que o volume de trafego vai ser grande…

fiz…testes…usando JDBC… e as consultas estão levando em média 50 ms

Como não sei se isso é rápido, não to convencido de usar JDBC.

essa média é boa? na verdade o que eu devo analisar para saber se isso é rápido?

flw pessoal…

otaviojava

rafaelpiton:
Legal…

é que o volume de trafego vai ser grande…

fiz…testes…usando JDBC… e as consultas estão levando em média 50 ms

Como não sei se isso é rápido, não to convencido de usar JDBC.

essa média é boa? na verdade o que eu devo analisar para saber se isso é rápido?

flw pessoal…


isso depende muito da quantidade de registro que você está processando. E da sua necessidade.
A depender da aplicação isso pode ser muiiito tempo.

maior_abandonado

então… ja cheguei a ler que usando jdbc você tem um pouco a mais de desempenho que usando algum framework ORM (pouca coisa), mais isso não considera outras coisas como cache de segundo nível por exemplo que vocÊ “pode” usar com o framework ORM que não estou dizendo que não exista algo relativo a isso no jdbc, mas eu nunca vi alguém usando… me parece que se você souber usar esse tipo de ferramenta bem seu ambiente não perde em nada usando o framework (e o tempo de desenvolvimento melhora muito).

ja cheguei a ler que o toplink era um pouquinho mais rápido que o hibernate também… aqui no guj

rafaelpiton

Ótimo…

realmente levei mais tempo com JDBC do que com ORM.

No entanto, fiz com JDBC porque não conhecia hibernate somente JPA. Mas depois pesquisei e vi que se souber JPA sabe hibernate, isso é real? ou to por fora do assunto…

vlw…

Andre_Brito

O Hibernate é uma das implementações da JPA. Assim como TopLink e EclipseLink. A diferença é que o Hibernate coloca mais coisas (a parte de Criteria dele é melhor, por exemplo).

Pra medir a velocidade de consultas, use um profiler. Ou, ainda mais fácil, faça o SQL pela linha de comando e veja se você consegue visualizar o tempo de consulta. Aí é só comparar com o do Java.

otaviojava

rafaelpiton:
Ótimo…

realmente levei mais tempo com JDBC do que com ORM.

No entanto, fiz com JDBC porque não conhecia hibernate somente JPA. Mas depois pesquisei e vi que se souber JPA sabe hibernate, isso é real? ou to por fora do assunto…

vlw…


O jpa funciona como uma ponte que deve ser implementa por outros frameworks de persistência.
Por isso que você usar o jpa com algum outro framework, por exemplo, jpa+hibernate ou jpa+toplink.
No entanto você pode estar usando esses frameworks de modo puro ou seja sem estar usando o jpa, que em alguns casos acabam tendo mais recursos quando são usados dentro do jpa.

rafaelpiton

Então se eu usar a sintaxe do JPA usando hibernate irá funcionar?

Andre_Brito

Eu diria que 90% da sintaxe, sim.

otaviojava

Lembrando que ao se usar o hibernate “puro” você tem alguns recursos e facilidades específicos desse framework em comparação quando se usa o jpa.

J

Eu diria que depende. Por que depende? Se a sua aplicação for acessada APENAS por hibernate, o hibernate tem melhor performance. Não em relação a uma query e sim no sistema como um todo. Porque você ativa o cache dele e ele controla todo o tráfego no banco. Por exemplo, o Usuário 1 faz uma consulta buscando os dados do Cliente 1, logo depois o Usuário 2 faz a mesma consulta, o hibernate entende que são os mesmos dados e como tem as informações no seu cache, devolve para o Usuário 2 as mesmas informações SEM a necessidade de ir até o banco. Mas isso só funciona se o hibernate, controlar TODAS as transações do banco, se tiver triggers ou outra aplicações usando, e você ativar o cache dele, sua consistência vai pro saco. Digamos que no exemplo acima, logo depois do Usuário 1 fazer a consulta, alguém alterou os dados do Cliente 1 se esse alguém alterou através do hibernate, o hibernate verifica a mudança e anula o cache. Caso a mudança tenha sido feita através de triggers ou outro programa, o hibernate não tem como saber que aqueles dados foram alterados e logo não apaga o cache. E quando o Usuário 2 receber as informações, elas virão inconsistentes.

Portanto esse cache deve ser ativado com muito cuidado. Se por algum motivo, ele não puder ser ativado, ai o JDBC é mais performático mesmo.

Criado 6 de junho de 2011
Ultima resposta 6 de jun. de 2011
Respostas 12
Participantes 5