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