Alguém sabe se existe algum framework que seja um tranformador de código SQL? Talvez nem exista isso, mas, em alguns casos, seria ótimo se fosse possível escrever um código em SQL puro no formato do MySQL e que o framework o tranformasse em código no formato do Oracle ou vice-versa…
Assim o aplicativo ficaria compatível com MySQL e Oracle sem usar uma camada de persistência, pois, no meu caso, devido ao volume de dados, o hibernate se mostrou lento.
Todos os bancos de dados atualmente seguem um padrão de SQL, que é chamado de ANSI SQL. O que muda de um banco pra outro, em termos de SQL, são apenas algumas funções específicas, que facilitam bastante a vida de quem trabalha com x SGBD. São essas funções que fazem determinada aplicação ser compatível com o banco X, mas incompatível com o banco Y. Se você enfrenta esse tipo de situação, você pode tentar não usar as funções específicas de um banco de dados apenas. Mas isso pode se mostrar inviável.
Esse tipo de framework, creio eu não existir, visto que o SQL já é padronizado.
Alguém sabe se existe algum framework que seja um tranformador de código SQL? Talvez nem exista isso, mas, em alguns casos, seria ótimo se fosse possível escrever um código em SQL puro no formato do MySQL e que o framework o tranformasse em código no formato do Oracle ou vice-versa…
[/quote]
Bom, bancos diferentes têm recursos diferentes, e se você precisou usar algo no Oracle que o MySQL não reconheça, é porque usou algum recurso próprio dele que o MySQL talvez não tenha e você não possa traduzir de maneira simples.
Um exemplo bobo é o recurso de queries hierárquicas do Oracle. http://docs.oracle.com/cd/B19306_01/server.102/b14200/queries003.htm
Apenas recentemente algo foi acrescentado ao SQL ANSI que é mais ou menos semelhante a isso, e isso foi implementado apenas por alguns bancos. O recurso semelhante a esse (ANSI) foi acrescentado ao MS SQL Server apenas muito recentemente.
[quote=FabricioPJ]Todos os bancos de dados atualmente seguem um padrão de SQL, que é chamado de ANSI SQL. O que muda de um banco pra outro, em termos de SQL, são apenas algumas funções específicas, que facilitam bastante a vida de quem trabalha com x SGBD. São essas funções que fazem determinada aplicação ser compatível com o banco X, mas incompatível com o banco Y. Se você enfrenta esse tipo de situação, você pode tentar não usar as funções específicas de um banco de dados apenas. Mas isso pode se mostrar inviável.
Esse tipo de framework, creio eu não existir, visto que o SQL já é padronizado.
[/quote]
Valeu Fabrício!
Tenho desenvolvido minhas queries no padrão ANSI e assim estava mantendo a compatibilidade entre os dois bancos. A coisa complicou no momento que precisei utilizar paginação, pois, são totalmente diferentes entre o MySQL ( limit(?, ?) ) e Oracle (rowNum).
[]s
Alguém sabe se existe algum framework que seja um tranformador de código SQL? Talvez nem exista isso, mas, em alguns casos, seria ótimo se fosse possível escrever um código em SQL puro no formato do MySQL e que o framework o tranformasse em código no formato do Oracle ou vice-versa…
Assim o aplicativo ficaria compatível com MySQL e Oracle sem usar uma camada de persistência, pois, no meu caso, devido ao volume de dados, o hibernate se mostrou lento.
Alguma sugestão
[]s
[/quote]
o mais próximo disso que ja vi seria usar algum framework ORM… como ele você pode montar queries “EJBQL”, orientadas aos seus objetos independente de para qual banco está… funcionando em um funciona em todos os bancos.
exempos de frameworks ORM são qualquer um que implementar JPA, Hibernate e TopLink os mais conhecidos.
Ele é bem específico. Basicamente você escreve linguagem SQL mas numa notação Java. Atualmente o framework dá suporte à 12 banco de dados, entre eles os mais comuns (oracle, mysql, psql, derby, etc.)
Exemplo:
Em SQL:
SELECT * FROM BOOK
WHERE PUBLISHED_IN = 2011
ORDER BY TITLE
[quote=AbelBueno]Você pode criar uma interface para representar a montagem de funções específicas do banco e implementar uma classe para cada banco.
No caso da paginação, por exemplo, você pode escrever a query normalmente sem paginação.
Depois utilizar essa query original como subquery e aplicar a paginação “por fora”.
Mas um comentário seu me deixou em dúvida.
Em que tipo de situação ele ficou lento?
Tem vários acessos ao mesmo tempo? Quantos?
Ou tem queries retornando um grande número de registros? Quantos?
As vezes alguns ajustes na configuração podem te dar uma performance aceitável sem precisar desse trabalho todo.
[/quote]
Sim, acredito que seja possível implementar com interface e subquery… Na verdade estava na esperança de encontrar um framework que fizesse isso, mas, acho que vou ter que construir mesmo… hehe
Quanto ao questionamento sobre o hibernate, não tenho esses números para informar, mas o panorama do sistema é o seguinte:
Possui webservice que conversa com outros 2 aplicativos residentes em máquinas clientes.
Possui multi-sockets que recebem conexões simultaneas de equipamentos que enviam dados
Gera arquivos txt de lote que, para serem gerados, realizam muitas consultas…
Possui ainda usuários incluindo e consultando…
O sistema utiliza struts2, hibernate3 e o banco padrão é o SQLServer…
Uma das páginas, que é a mais lenta, está demorando entre 8 e 10 segundos para renderizar…
Estamos querendo tirar o hibernate porque a tendência agora é aumentar a quantidade de usuários…
Ele é bem específico. Basicamente você escreve linguagem SQL mas numa notação Java. Atualmente o framework dá suporte à 12 banco de dados, entre eles os mais comuns (oracle, mysql, psql, derby, etc.)
Exemplo:
Em SQL:
SELECT * FROM BOOK
WHERE PUBLISHED_IN = 2011
ORDER BY TITLE