Comparativo das Vantagens e Desvantages do
Uso de Ferramentas para Mapeamento Objeto
Relacional

Israel Fonseca
Jean Balde...
Introdução


Banco de Dados Relacionais
Há quem diga que o
conceito por trás dele foi
a última grande
invenção da históri...
Introdução



Programação Orientada a Objetos



Melhor tempo de resposta ao
mercado;



Aumento da qualidade;



Maio...
Disparidade objeto relacional
E agora?



OODBs
Nicho
reduzido
Mas e agora?
E outros...
ORM


Mapeamento Objeto Relacional



Manutenabilidade



Independência de banco de dados



Utilização de bancos leg...
Polêmica
ORM = Vietnã

DBAs reclamam

Ted Neward
Simon Sabin
Objetivo Geral
Fazer uma análise de funcionalidades, suporte,
desempenho e produtividade nas ferramentas para
ORM em relaç...
Objetivos Específicos


Criar uma metodologia para avaliação;



Verificar funcionalidades de mapeamento;









V...
Justificativa




Opiniões divididas
Escolha mais consciente sobre que tecnologia
deve-se usar para cada projeto;
Desenvolvimento
Método de Avaliação

Funcionalidades
Suporte
Desempenho
Produtividade
Modelo Fictício



Simplicidade (Didático)



Contemplar vários cenários para o mapeamento
Funcionalidades
Um-Para-Um
Um-Para-Muitos
Muitos-Para-Um
Muitos-Para-Muitos
Chave Composta
Herança Single Table
Herança Joined Table
Heran...
Funcionalidades



DataMapper limitado
Limitações contornáveis com modificações no
modelo e acesso direto








He...
Suporte
Livros


Amazon

Hibernate: mais de 15 livros

SQLAlchemy: 2 livros

DataMapper: nenhum livro

Gavin King

Michael Bay...
Documentação Oficial


Páginas





SQLAlchemy: 340





Hibernate: 393
DataMapper: aproximadamente 30

PDF/HTML
Dat...
Comunidade


SQLAlchemy (Google Groups)






Usuários: 2587
Média de postagens por dia: 5

DataMapper (Google Groups)...
Perguntas respondidas


Hibernate: 0/4



SQLAlchemy: 5/5



DataMapper: 9/12

Michael Bayer

Dan Kubb
Suporte


Bibliografia




Documentação




DataMapper limitado

Comunidade




Hibernate famoso

Contradição Hiber...
Desempenho
Desempenho


DAO (Direto e com ORM)



Base de testes



Automação


Tempo



Tráfego



Relatórios
Código fonte: http://code.google.com/p/orm-native-comparative/
Tempo Desconsiderando Tráfego
Operação
Atualização

Inserção

Listagem

Remoção

Linguagem
java
python
ruby
java
python
ruby
java
python
ruby
java
pytho...
Operação
Agrupamento

Guloso

Join

Subconsulta



Linguagem
java
python
ruby
java
python
ruby
java
python
ruby
java
pyth...
Tráfego de Rede
Operação
Atualização

Linguagem
java
python
ruby
java
python
ruby
java
python
ruby
java
python
ruby

Inserção

Listagem

R...
Operação
Subconsulta

Guloso

Join

Agrupamento

Linguagem
java
python
ruby
java
python
ruby
java
python
ruby
java
python
...
Tempo Considerando Tráfego
Simulação

tempo execução total = tempo execução local + tráfego envio /
velocidade de envio + tráfego de retorno / veloci...
Operação
Atualização

Inserção

Listagem

Remoção

Linguagem
java
python
ruby
java
python
ruby
java
python
ruby
java
pytho...
Operação
Agrupamento

0,142

0,292

0,130
0,418

x
2,432

python

0,596

1,209

ruby

0,432

x

java

0,033

0,360

python...
Operação
Atualização

Inserção

Listagem

Remoção

Linguagem
java
python
ruby
java
python
ruby
java
python
ruby
java
pytho...
Operação
Agrupamento

Guloso

Join

Subconsulta

Linguagem
java
python
ruby
java
python
ruby
java
python
ruby
java
python
...
Evolução do Desempenho em Relação à
Quantidade de Registros
Rede 1: 100MBits/s
Rede 2: 500KBits/s 250KBits/s
Produtividade
Operação
Agrupamento

Atualização

Guloso

Inserção

Join

Listagem

Remoção

Subconsulta

Linguagem
java
python
ruby
java...
Conclusão
Conclusões


Funcionalidades




DataMapper limitado, porém, contornável

Suporte


Livros, Documentação e Comunidades...
Conclusões


Desempenho


Tempo s/ tráfego: mais devagar, mas muito rápido



Tempo c/ tráfego: praticamente igual



...
Conclusão


Quando não usar





Projeto pequeno





Otimização extrema
Despreparo + falta de tempo

Vantagem para ...
Trabalhos futuros












Disponibilizar os relatórios na web de forma amigável, com um
site que permita a consu...
TCC - Comparativo de ORMs e Acesso Nativo
TCC - Comparativo de ORMs e Acesso Nativo
TCC - Comparativo de ORMs e Acesso Nativo
TCC - Comparativo de ORMs e Acesso Nativo
TCC - Comparativo de ORMs e Acesso Nativo
TCC - Comparativo de ORMs e Acesso Nativo
TCC - Comparativo de ORMs e Acesso Nativo
TCC - Comparativo de ORMs e Acesso Nativo
TCC - Comparativo de ORMs e Acesso Nativo
TCC - Comparativo de ORMs e Acesso Nativo
TCC - Comparativo de ORMs e Acesso Nativo
Próximos SlideShares
Carregando em…5
×

TCC - Comparativo de ORMs e Acesso Nativo

315 visualizações

Publicada em

TCC meu e do Jean Baldessar apresentado na UNISUL em 2011.

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
315
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
1
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

TCC - Comparativo de ORMs e Acesso Nativo

  1. 1. Comparativo das Vantagens e Desvantages do Uso de Ferramentas para Mapeamento Objeto Relacional Israel Fonseca Jean Baldessar
  2. 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. 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
  4. 4. Disparidade objeto relacional
  5. 5. E agora?
  6. 6.   OODBs Nicho reduzido
  7. 7. Mas e agora?
  8. 8. E outros...
  9. 9. ORM  Mapeamento Objeto Relacional   Manutenabilidade  Independência de banco de dados  Utilização de bancos legados   Ponte Popularidade Solução definitiva?
  10. 10. Polêmica ORM = Vietnã DBAs reclamam Ted Neward Simon Sabin
  11. 11. 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.
  12. 12. 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.
  13. 13. Justificativa   Opiniões divididas Escolha mais consciente sobre que tecnologia deve-se usar para cada projeto;
  14. 14. Desenvolvimento
  15. 15. Método de Avaliação Funcionalidades Suporte Desempenho Produtividade
  16. 16. Modelo Fictício  Simplicidade (Didático)  Contemplar vários cenários para o mapeamento
  17. 17. Funcionalidades
  18. 18. 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
  19. 19. 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
  20. 20. Suporte
  21. 21. Livros  Amazon  Hibernate: mais de 15 livros  SQLAlchemy: 2 livros  DataMapper: nenhum livro Gavin King Michael Bayer
  22. 22. Documentação Oficial  Páginas    SQLAlchemy: 340   Hibernate: 393 DataMapper: aproximadamente 30 PDF/HTML DataMapper não aborda assuntos importantes como o uso de transações
  23. 23. 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
  24. 24. Perguntas respondidas  Hibernate: 0/4  SQLAlchemy: 5/5  DataMapper: 9/12 Michael Bayer Dan Kubb
  25. 25. Suporte  Bibliografia   Documentação   DataMapper limitado Comunidade   Hibernate famoso Contradição Hibernate Em geral, o suporte é bom
  26. 26. Desempenho
  27. 27. Desempenho  DAO (Direto e com ORM)  Base de testes  Automação  Tempo  Tráfego  Relatórios
  28. 28. Código fonte: http://code.google.com/p/orm-native-comparative/
  29. 29. Tempo Desconsiderando Tráfego
  30. 30. Operação Atualização Inserção Listagem Remoção Linguagem java python ruby java python ruby java python ruby java python ruby Direto 34,505 34,354 33,966 34,112 34,114 34,313 0,256 0,114 0,096 34,318 34,359 34,374 ORM 34,413 34,414 34,795 34,166 34,150 34,527 1,213 0,614 0,409 34,669 34,660 35,058  1% de diferença geral  Listagem   Python: 5,3   Java: 4,7 DataMapper: 4,2 Cerca de 1 segundo
  31. 31. Operação Agrupamento Guloso Join Subconsulta  Linguagem java python ruby java python ruby java python ruby java python ruby Direto 0,200 0,120 0,108 0,361 0,539 0,383 0,031 0,018 0,016 1,946 1,933 1,956 ORM 0,769 0,270 x 2,363 1,148 x 0,358 0,041 0,038 1,968 1,961 x Subconsultas com tempo estável
  32. 32. Tráfego de Rede
  33. 33. Operação Atualização Linguagem java python ruby java python ruby java python ruby java python ruby Inserção Listagem Remoção Direto enviado recebido 14736320 4960768 15071000 6298880 14277864 6079392 14088528 5015232 14856528 6349728 13968528 6130560 30088 6727304 29520 6727832 20072 6727096 6864320 4954432 7583528 6302048 6525864 6084672 ORM enviado recebido 22536528 17434560 14640528 6307008 13224528 6085728 15023088 5069568 14880528 7568448 13800528 7353504 25424 6751704 27920 6728760 31944 6727096 18840528 19859616 7728528 6305952 6528528 6098928 SQLAlchemy e DataMapper   Inserção: 5%  Demais: 1% Hibernate   Atualização: 200%  Remoção: 300%  Demais: 1%
  34. 34. Operação Subconsulta Guloso Join Agrupamento Linguagem java python ruby java python ruby java python ruby java python ruby Direto enviado recebido 10784 216128 11800 215880 12240 215880 29712 5728152 32392 5615272 30312 4871480 10552 217720 12928 217472 12016 217472 14552 2182920 14296 2188688 17520 2187952 enviado 24264 14016 x 42744 32656 x 21712 12768 18544 17592 13896 x  Média de 7%  Fator 'alias' ORM recebido 215960 216856 x 6838416 6036696 x 218080 219136 225792 2284760 2188904 x
  35. 35. Tempo Considerando Tráfego
  36. 36. 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
  37. 37. Operação Atualização Inserção Listagem Remoção Linguagem java python ruby java python ruby java python ruby java python ruby Direto 34,702 34,567 34,169 34,303 34,326 34,514 0,324 0,181 0,163 34,437 34,498 34,501 ORM 34,812 34,623 34,989 34,367 34,374 34,739 1,280 0,681 0,476 35,056 34,801 35,184  100MBits/s  Tráfego irrelevante
  38. 38. Operação Agrupamento 0,142 0,292 0,130 0,418 x 2,432 python 0,596 1,209 ruby 0,432 x java 0,033 0,360 python 0,021 0,044 ruby 0,019 0,041 java 1,949 1,970 python 1,935 1,963 ruby Subconsulta ORM 0,792 ruby java Join Direto 0,221 python Guloso Linguagem java 1,959 x  100MBits/s  Tráfego irrelevante
  39. 39. Operação Atualização Inserção Listagem Remoção Linguagem java python ruby java python ruby java python ruby java python ruby Direto 83,821 89,691 86,839 82,350 89,226 86,773 27,225 27,084 27,044 67,865 74,734 71,765 ORM 149,224 88,923 85,587 84,491 94,185 91,542 28,270 27,585 27,381 151,788 75,341 72,511  500KBits/s 250KBits/s  ORM ≃ Direto
  40. 40. Operação Agrupamento Guloso Join Subconsulta Linguagem java python ruby java python ruby java python ruby java python ruby Direto 8,960 8,903 8,895 23,333 23,065 19,929 0,923 0,914 0,910 2,832 2,820 2,844 ORM 9,943 9,053 x 29,802 25,360 x 1,273 0,943 0,979 2,880 2,857 x  500KBits/s 250KBits/s  ORM ≃ Direto
  41. 41. Evolução do Desempenho em Relação à Quantidade de Registros Rede 1: 100MBits/s Rede 2: 500KBits/s 250KBits/s
  42. 42. Produtividade
  43. 43. Operação Agrupamento Atualização Guloso Inserção Join Listagem Remoção Subconsulta Linguagem java python ruby java python ruby java python ruby java python ruby java python ruby java python ruby java python ruby java Direto 936 462 531 511 237 225 3164 1664 1447 467 222 211 956 467 541 689 295 356 308 132 127 994 ORM 249 122 x 138 78 37 245 230 x 140 78 37 216 174 115 131 90 32 170 81 40 409  Até: 1099,65%  Média: 360%  Fatores Extras
  44. 44. Conclusão
  45. 45. Conclusões  Funcionalidades   DataMapper limitado, porém, contornável Suporte  Livros, Documentação e Comunidades oferecem bom suporte ao aprendizado
  46. 46. 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)
  47. 47. 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
  48. 48. 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.

×