SlideShare uma empresa Scribd logo
1 de 59
Comparativo das Vantagens e Desvantages do
Uso de Ferramentas para Mapeamento Objeto
Relacional

Israel Fonseca
Jean Baldessar
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
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
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 legados





Ponte

Popularidade

Solução definitiva?
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çã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.
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.
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ç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
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
Suporte
Livros


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

Gavin King

Michael Bayer
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
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
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 Hibernate

Em geral, o suporte é bom
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
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
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
Tráfego de Rede
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%
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
Tempo Considerando Tráfego
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
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
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
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
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
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
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
Conclusão
Conclusões


Funcionalidades




DataMapper limitado, porém, contornável

Suporte


Livros, Documentação e Comunidades
oferecem bom suporte ao aprendizado
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)
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
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.

Mais conteúdo relacionado

Semelhante a Comparativo ORM x Acesso Direto

Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Fabiano Weimar
 
Blueprints & Patterns de Arquitetura para Sistemas que Escalam Linearmente (p...
Blueprints & Patterns de Arquitetura para Sistemas que Escalam Linearmente (p...Blueprints & Patterns de Arquitetura para Sistemas que Escalam Linearmente (p...
Blueprints & Patterns de Arquitetura para Sistemas que Escalam Linearmente (p...Ricardo Ferreira
 
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...Taller Negócio Digitais
 
Banco de Dados Ágeis e Refatoração
Banco de Dados Ágeis e RefatoraçãoBanco de Dados Ágeis e Refatoração
Banco de Dados Ágeis e Refatoraçãoelliando dias
 
Database Refactoring com PostgreSQL PGDay RS 2009
Database Refactoring com PostgreSQL PGDay RS 2009Database Refactoring com PostgreSQL PGDay RS 2009
Database Refactoring com PostgreSQL PGDay RS 2009Fabrízio Mello
 
Arquitetura de um sistema crítico de alta disponibilidade com soluções open s...
Arquitetura de um sistema crítico de alta disponibilidade com soluções open s...Arquitetura de um sistema crítico de alta disponibilidade com soluções open s...
Arquitetura de um sistema crítico de alta disponibilidade com soluções open s...Daniel Destro Do Carmo
 
Java No Setor Público: Produtividade, Flexibilidade e Baixo Custo
Java No Setor Público: Produtividade, Flexibilidade e Baixo CustoJava No Setor Público: Produtividade, Flexibilidade e Baixo Custo
Java No Setor Público: Produtividade, Flexibilidade e Baixo CustoÉberli Cabistani Riella
 
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...Kelver Merlotti
 
L'esprit de l'escalier
L'esprit de l'escalierL'esprit de l'escalier
L'esprit de l'escalierGleicon Moraes
 
Infraestrutura em nuvem com Amazon Web Services (AWS)
Infraestrutura em nuvem com Amazon Web Services (AWS)Infraestrutura em nuvem com Amazon Web Services (AWS)
Infraestrutura em nuvem com Amazon Web Services (AWS)Infosimples
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoComunidade NetPonto
 
REST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfREST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfBrunoAlbuquerque864673
 
Arquitetura Serverless para Machine Learning
Arquitetura Serverless para Machine LearningArquitetura Serverless para Machine Learning
Arquitetura Serverless para Machine LearningFelipe Santos
 
Big data para programadores convencionais
Big data para programadores convencionaisBig data para programadores convencionais
Big data para programadores convencionaisRoberto Oliveira
 
REST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfREST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfBrunoAlbuquerque864673
 
Database refactoring postgresql_consegi2010
Database refactoring postgresql_consegi2010Database refactoring postgresql_consegi2010
Database refactoring postgresql_consegi2010Fabrízio Mello
 
Banco de dados na nuvem e isso é possível
Banco de dados na nuvem e isso é possívelBanco de dados na nuvem e isso é possível
Banco de dados na nuvem e isso é possívelMarcos Freccia
 
Planejamento de Capacidade Técnicas e Ferramentas
Planejamento de Capacidade Técnicas e FerramentasPlanejamento de Capacidade Técnicas e Ferramentas
Planejamento de Capacidade Técnicas e Ferramentasluanrjesus
 
Cloud Computing - Java no Google App Engine
Cloud Computing - Java no Google App EngineCloud Computing - Java no Google App Engine
Cloud Computing - Java no Google App EngineFrederico Maia Arantes
 

Semelhante a Comparativo ORM x Acesso Direto (20)

Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
 
Blueprints & Patterns de Arquitetura para Sistemas que Escalam Linearmente (p...
Blueprints & Patterns de Arquitetura para Sistemas que Escalam Linearmente (p...Blueprints & Patterns de Arquitetura para Sistemas que Escalam Linearmente (p...
Blueprints & Patterns de Arquitetura para Sistemas que Escalam Linearmente (p...
 
TechEd_OFC305
TechEd_OFC305TechEd_OFC305
TechEd_OFC305
 
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
 
Banco de Dados Ágeis e Refatoração
Banco de Dados Ágeis e RefatoraçãoBanco de Dados Ágeis e Refatoração
Banco de Dados Ágeis e Refatoração
 
Database Refactoring com PostgreSQL PGDay RS 2009
Database Refactoring com PostgreSQL PGDay RS 2009Database Refactoring com PostgreSQL PGDay RS 2009
Database Refactoring com PostgreSQL PGDay RS 2009
 
Arquitetura de um sistema crítico de alta disponibilidade com soluções open s...
Arquitetura de um sistema crítico de alta disponibilidade com soluções open s...Arquitetura de um sistema crítico de alta disponibilidade com soluções open s...
Arquitetura de um sistema crítico de alta disponibilidade com soluções open s...
 
Java No Setor Público: Produtividade, Flexibilidade e Baixo Custo
Java No Setor Público: Produtividade, Flexibilidade e Baixo CustoJava No Setor Público: Produtividade, Flexibilidade e Baixo Custo
Java No Setor Público: Produtividade, Flexibilidade e Baixo Custo
 
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...
 
L'esprit de l'escalier
L'esprit de l'escalierL'esprit de l'escalier
L'esprit de l'escalier
 
Infraestrutura em nuvem com Amazon Web Services (AWS)
Infraestrutura em nuvem com Amazon Web Services (AWS)Infraestrutura em nuvem com Amazon Web Services (AWS)
Infraestrutura em nuvem com Amazon Web Services (AWS)
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis Paulino
 
REST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfREST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdf
 
Arquitetura Serverless para Machine Learning
Arquitetura Serverless para Machine LearningArquitetura Serverless para Machine Learning
Arquitetura Serverless para Machine Learning
 
Big data para programadores convencionais
Big data para programadores convencionaisBig data para programadores convencionais
Big data para programadores convencionais
 
REST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfREST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdf
 
Database refactoring postgresql_consegi2010
Database refactoring postgresql_consegi2010Database refactoring postgresql_consegi2010
Database refactoring postgresql_consegi2010
 
Banco de dados na nuvem e isso é possível
Banco de dados na nuvem e isso é possívelBanco de dados na nuvem e isso é possível
Banco de dados na nuvem e isso é possível
 
Planejamento de Capacidade Técnicas e Ferramentas
Planejamento de Capacidade Técnicas e FerramentasPlanejamento de Capacidade Técnicas e Ferramentas
Planejamento de Capacidade Técnicas e Ferramentas
 
Cloud Computing - Java no Google App Engine
Cloud Computing - Java no Google App EngineCloud Computing - Java no Google App Engine
Cloud Computing - Java no Google App Engine
 

Comparativo ORM x Acesso Direto