Estou desenvolvendo uma aplicação em que a velocidade de uma consulta no banco é um requisito muito relevante. O banco de dados que eu irei utilizar é o MySQL, pois já possui um excelente desempenho.
Alguém sabe me dizer qual é o framework de mapeamento objeto/relacional que oferece o melhor desempenho para consultas no banco? Hibernate? iBatis? Outro?
O único framework que utilizei para isto foi o Hibernate, e fiz uma comparação com o Entity Beans. Como esperava, não houve comparação, o Hibernate foi bem mais performático.
Sugiro que para sanar melhor tua dúvida, faz o teste por você mesmo com os possíveis e veja o que melhor lhe atende.
Eu uso muito o Hibernate, mas até mesmo pela arquitetura, o iBatis é muito mais rápido, principalmente se você for usar muito stored procedures. O Hibernate ainda está dando os primeiros passos em direção a isso.
Mas vendo por outro lado, se você mantiver o cache bem configurado e a sua aplicação tiver mais selects do que inserts e updates (e especialmente se ela não usar updates e inserts em massa) o Hibernate pode tem uma performance igual ao iBatis.
Como eu tenho horror a programação procedural em bancos de dados e gosto de manter a lógica de negócio da aplicação na aplicação, prefiro o Hibernate. É só uma questão de gosto mesmo
JDBC já era, muito overhead e uma API complexa demais… atoa! Atualmente eu estou usando essa solução muito mais simples, quee me da uma liberdade muito maior na hora de desenvolver e sem perder com produtividade! Conheça ela:
Bom, se você tem de ficar amarrado ao Oracle e seu projeto quer que você use um framework pago (sabe como é que é, sempre tem aqueles clientes que precisam pagar por tudo, mesmo que seja para poderem “dormir mais sossegados à noite” - nem adianta ficar falando sobre as virtudes do Open Source), compre uma licença de uso do Toplink (pegue a última versão do JDeveloper para poder ver como é que funciona o Toplink).
Parece que para o Oracle ele é bem performático (of course).
O Hibernate possui várias configurações para otimização que se vc fosse implementar gastaria muito tempo. Se bem configurado o Hibernate faz com que vc acesse o banco somente quando for absolutamente necessário ao contrario do que acontece com um DAO ou outra opção. O exemplo mais simples é configurar o Hibernate para manter conexões em cache com o C3PO, mas existem mais!
Acho que o Hibernate traz um ganho em performance mesmo não sendo tão rápido para o acesso mas pode fazer bem pouco.
Esta eu não tenho certeza, mas acho que com o hibernate vc pode configurar as querys para utilizar índexes e outras vantagens de seu banco específico.
8)
[quote=maikonaraujo]Esta eu não tenho certeza, mas acho que com o hibernate vc pode configurar as querys para utilizar índexes e outras vantagens de seu banco específico.
8) [/quote]
Nops, o Hibernate não usa os índices do banco, quem usa os índices é o próprio banco e por consequência, qualquer coisa que use o banco
Creio que indexes tenha sido uma palavra mal escolhida. Acho que ele estava falando sobre features especificas como os hints do Oracle que dizem pro banco executar outro plano de consulta, por exemplo…
[quote=fsmachadorj]Estou desenvolvendo uma aplicação em que a velocidade de uma consulta no banco é um requisito muito relevante. O banco de dados que eu irei utilizar é o MySQL, pois já possui um excelente desempenho.
Alguém sabe me dizer qual é o framework de mapeamento objeto/relacional que oferece o melhor desempenho para consultas no banco? Hibernate? iBatis? Outro?
Grato,
Fernando Machado.
[/quote]
Até o momento eu nunca trabalhei com Hibernate, mas nos últimos 8 meses venho trabalhando somente com o iBatis.
Sem entrar no mérito de cada framework, cada um se encaixa bem em um determinado tipo de problema, no meu caso, todos os meus atuais problemas são muito bem revolvidos com iBatis.
De “cabeça”, os tipos de otimizações mais comuns que você pode fazer com o iBatis é ativar o mecanismo de cache e lazy loading de objetos dependentes.
Tirando as ferramentas de mapeamento, as otimizações dependem muito de como foi modelado o banco de dados (tanto o modelo lógico e físico), o uso correto de índices e a escolha de um driver JDBC descente (no caso do Java), etc.
Um link interessante comparando os benefícios de cada um :
[quote=‘Fabrício Cozer Martins’]
Caramba, já existe ???
estava querendo desenvolver um desse nipe…
Já usou este[/quote]
Nunca usei mas esse aí parece que é pago.
Mas tem um monte. Tem até que gera para o hibernate.
Mas se vc tiver tempo crie um, quem sabe não fica legal tb.
Aí vc posta aqui no GUJ.
Referente ao CACHE.
Em um sistema em que tenha muitas atualizações e as iformações não podem estar desatualizadas o cache é recomendado ?
[quote=jprogrammer]Referente ao CACHE.
Em um sistema em que tenha muitas atualizações e as iformações não podem estar desatualizadas o cache é recomendado ?[/quote]
Sim, pq na maior parte dos casos eh mais barato atualizar o cache do que a base de dados. Um exemplo bom disso eh o que o Coherence (STFG) faz.
[quote=jprogrammer]Mas mesmo uma atualização online por vários usuários ?
Uma curiosidade:
Como o hibernate implementa isso ?
[/quote]
Rapaz, eu acho que esse problema não tem como resolver não, a não ser que você use um ponto comum de entrada que não seja uma conexão direta com o banco de dados e sim com uma aplicação “fachada”.
Outra coisa, se você estiver com divesas aplicações acessando a mesma base e uma delas é o Hibernate, prepare-se pra dor de cabeça com o cache.
Caching só causa problema real quando existem multiplas aplicações acessando a mesma base. Além disso, eu até hoje não conheço um sistema onde TODOS dados precisar ser live e serialized.