Este documento apresenta um resumo das vantagens e desvantagens do uso de ferramentas de mapeamento objeto-relacional (ORM). Foram avaliadas três ferramentas ORM quanto a funcionalidades, suporte, desempenho e produtividade em comparação com acesso direto à base de dados. Os resultados mostraram que as ferramentas ORM oferecem quase o mesmo desempenho que o acesso direto, aumentam drasticamente a produtividade e possuem funcionalidades completas, exceto a DataMapper que apresenta alg
1. Comparativo das Vantagens e Desvantages do
Uso de Ferramentas para Mapeamento Objeto
Relacional
Israel Fonseca
Jean Baldessar
2. Introdução
Banco de Dados Relacionais
Há quem diga que o
conceito por trás dele foi
a última grande
invenção da história da
computação.
Gavin King
3. Introdução
Programação Orientada a Objetos
Melhor tempo de resposta ao
mercado;
Aumento da qualidade;
Maior versatilidade a mudanças;
Facilidade para reuso de código.
Grady Booch
14. Objetivo Geral
Fazer uma análise de funcionalidades, suporte,
desempenho e produtividade nas ferramentas para
ORM em relação ao acesso direto à base da dados, e
com isso fornecer um conhecimento útil para que
arquitetos de software escolham a tecnologia mais
adequada aos seus projetos.
15. Objetivos Específicos
Criar uma metodologia para avaliação;
Verificar funcionalidades de mapeamento;
Verificar recursos de gerenciamento transacional
e acesso a procedures e functions;
Verificar recursos de acesso direto a base de
dados;
Pesquisar suporte oferecido, tanto pelos seus
fornecedores quanto pela comunidade;
Analisar o desempenho e produtividade em
operações de acesso à base de dados.
25. Um-Para-Um
Um-Para-Muitos
Muitos-Para-Um
Muitos-Para-Muitos
Chave Composta
Herança Single Table
Herança Joined Table
Herança Table Per Class
Duas Tabelas para Um Objeto
Dois Objetos para uma Tabela
Agregações
Agrupamentos
Controle de Carregamento de Relacionamento
Transações
Procedures e Functions
Hibernate
suporta
suporta
suporta
suporta
suporta
suporta
suporta
suporta
suporta
suporta
suporta
suporta
suporta
suporta
suporta
SQLAlchemy
suporta
suporta
suporta
suporta
suporta
suporta
suporta parcialmente
suporta
não suporta
suporta
suporta
suporta
suporta
suporta
suporta
SQLAlchemy
Herança: Alterações no modelo foram necessárias
DataMapper
Muitos-Para-Muitos: Padrão de nomenclatura
Controle Carregamento: Abordagem gulosa
DataMapper
suporta
suporta
suporta
suporta parcialmente
suporta
suporta
não suporta
não suporta
não suporta
não suporta
suporta
não suporta
suporta parcialmente
suporta
suporta
26. Funcionalidades
DataMapper limitado
Limitações contornáveis com modificações no
modelo e acesso direto
Herança pode ser mapeada para um muitos-paraum
Duas tabelas para um objeto pode ser mapeado
com dois objetos
Uma tabela para dois objetos pode ser mapeado
para um objeto
Quanto mais completo, menor a preocupação com
as disparidades
31. Comunidade
SQLAlchemy (Google Groups)
Usuários: 2587
Média de postagens por dia: 5
DataMapper (Google Groups)
Usuários: 984
Média de postagens por dia: 5
Hibernate (Fórum próprio)
Usuários: 62156
Média de postagens por dia
2003: 63
Último mês: 15
44. Simulação
tempo execução total = tempo execução local + tráfego envio /
velocidade de envio + tráfego de retorno / velocidade de
retorno
Rede 1: 100MBits/s
Rede 2: 500KBits/s 250KBits/s
57. Conclusões
Desempenho
Tempo s/ tráfego: mais devagar, mas muito rápido
Tempo c/ tráfego: praticamente igual
Aumento do volume de dados: crescimento
proporcional
Produtividade
Quantidade de Caracteres diminuiu drásticamente
Fatores Extras (Independência de Banco,
Manutenabilidade)
58. Conclusão
Quando não usar
Projeto pequeno
Otimização extrema
Despreparo + falta de tempo
Vantagem para a grande maioria
Cabe ao arquiteto tomar a decisão final baseado
nas características do seu projeto
59. Trabalhos futuros
Disponibilizar os relatórios na web de forma amigável, com um
site que permita a consulta dos dados obtidos.
Expandir o número de ferramentas e linguagens testadas.
Expandir o número de testes para abranger situações mais
específicas.
Testar vários bancos de dados para avaliar a portabilidade das
ferramentas.
Documentar e disponibilizar o código fonte dos testes e
ferramentas utilizadas para que outros desenvolvedores possam
testar outras ferramentas, ou outras versões das ferramentas já
testadas.
Permitir a participação de terceiros no processo de melhoria e
expansão dos testes.