Procedimentos armazenados vs JDO para projeto de armazenamento de dados
-
23-09-2019 - |
Pergunta
Antigamente acessávamos o banco de dados através de procedimentos armazenados.Eles eram vistos como “a melhor” forma de gerenciar os dados.Mantemos os dados no banco de dados, e qualquer linguagem/plataforma pode acessá-los através de JDBC/ODBC/etc.
No entanto, nos últimos anos, mecanismos de recuperação de armazenamento baseados em reflexão em tempo de execução/metadados, como Hibernate/DataNucleus, tornaram-se populares.Inicialmente, estávamos preocupados com a lentidão deles devido às etapas extras envolvidas (a reflexão é cara) e como eles recuperam dados desnecessários (o objeto inteiro) quando tudo o que precisamos é de um campo.
Estou começando a planejar um grande projeto de armazenamento de dados que usa J2EE, mas não tenho certeza se devo optar por procedimentos armazenados ou JDO/JPA e similares.Recentemente, tenho trabalhado com o Hibernate e, para ser sincero, não sinto falta de escrever procedimentos armazenados CRUD!
Basicamente se resume a:
Procedimentos armazenados
+ Pode ser otimizado no servidor (embora apenas as consultas)
- É provável que existam mais de mil procedimentos armazenados:adicionar, excluir, atualizar, getById, etc, para cada tabela.
JDO
+ Não vou passar os próximos meses escrevendo parâmetros.add("@firstNames", customer.getFirstName());...
- Será mais lento que SPs (mas a maioria suporta paginação)
O que você escolheria na minha situação.Nesse caso eu acho que é muita coisa.
Obrigado,
John
Nenhuma solução correta
Outras dicas
No SharePoint Designer, eu fui capaz de reverter para a página inicial original fazendo o seguinte:
- .
- Navegar para todos os arquivos
- Abra a pasta Páginas
- Clique com o botão direito do mouse no
default.aspx
- Clique em "Set como home page" no menu de contexto.
Rod Johnson em seu "J2EE Design adn Development" escreveu uma análise muito clara sobre ORM/StoredProcedures.Ele disse que
Os procedimentos armazenados só devem ser usados em um sistema J2EE para executar operações que sempre usarão muito o banco de dados, sejam elas implementadas no banco de dados ou em código Java que troca muitos dados com o banco de dados.
Como você está planejando implementar um datawarehouse, acho que a abordagem de procedimentos armazenados é a escolha certa.
Eu sugeriria o uso dos metadados para gerar os scripts que você usa para carregar no data warehouse. Isso permite que você obtenha benefícios de desempenho do uso de ferramentas de carga especializadas e talvez de procedimentos armazenados (se você estiver usando um banco de dados suficientemente antigo). Além disso, você provavelmente acabará com codificação manual pelo menos alguns SQL. Ter seus scripts genéricos como Procs armazenados permitirá que você agende todos eles da mesma maneira e não precisará se preocupar em mudar a maneira como eles são invocados quando você reescrever algum código gerado para torná -lo melhor.
Quanto a divulgar os dados, se o que você está construindo no J2EE é uma ferramenta de relatório, poderá estar melhor usando o JDO. Embora eu não esteja muito familiarizado com o lado do relatório das coisas, um benefício que posso ver é que será mais fácil permitir que seus usuários finais façam relatórios personalizados que você não antecipou com antecedência (embora você ainda precise ter Alguns limites para o que eles podem fazer para que não derrubem o banco de dados no processo).