Comparando Persistência de Dados com JPA

Propaganda
JPA_
Comparando Persistência
de Dados com JPA
TOPLINK E HIBERNATE TESTADOS EM DIFERENTES
BANCOS DE DADOS E SISTEMAS OPERACIONAIS.
Este artigo descreve os testes com diversas combinações de frameworks, banco de dados e sistemas operacionais analisando qual
! "#$% &! '(! ()($*(+, ! -#! -#.#"/#'% ! ' ! 01#! -*2! &#./#*3 ! 4! /#&sistência de dados em suas versões padrão, sem qualquer tunning.
Abordaremos MySQL, PostgreSql, Oracle, SQL Server, Windows,
Ubuntu, Toplink e Hibernate.
persistência é uma das áreas de maior importân!"# $%# &%"# "'(! ")*+# ,--# .Java Enterprise Edition/0# 1$23+# $1'$ !4 "3"# '$("# ,56# .,"7"# 5$81!19$2 $#
65:/0# ;&$# +8!<!2"(%$29$# =">!"# '"89$# 3"# '("9"=+8%"#
-,?# .Enterprise Java Beans/@#6# '"89!8# 3"# 7$81*+# A# 3+#
,"7"#"#,56#'"11+&#"#9$8#"#1&"#'8B'8!"#$1'$ !4 ")*+0#
,56#C@D@
Com o uso de frameworks para persistência o de1$27+(7$3+8#+E9F%#&%#2G7$(#%"!1#"(9+#3$#"E198")*+#
1+E8$#+#98"3! !+2"(#,H?I0#'$8%!9!23+#&9!(!>"8#+#%$"2!1%+#3$#JKL#.Object to Relational Management/#
$%#1&"#"'(! ")*+0#3!%!2&!23+#+#" +'("%$29+#3"#9$ 2+(+<!"#3+#MN?H#.M!19$%"#N$8$2 !"3+8#3$#?"2 +#3$#
H"3+1/#"+# B3!<+#+8!$29"3+#"#+EO$9+1@
J# " +'("%$29+# 8$3&>!3+# "%'(!"# "# '+11!E!(!3"3$#3$#1$($)*+#3$#9$ 2+(+<!"#2"# "%"3"# P"%"3"#3$#
-:M# .-29$8'8!1$# :2=+8%"9!+2# MQ19$%/# ;&$0# 1$<&23+#
"# 3+ &%$29")*+# ,--# R0# '$8%!9$# "# !29$<8")*+# $298$#
3!=$8$29$1#'("9"=+8%"1#$#%$ "2!1%+1#3$#"8%">$2"mento de dados. Para este trabalho, as tecnologias
1$($ !+2"3"1# =+8"%# LQMST0# 5+19<8$M;(0# J8" ($# $#
SQLServer.
U$19$#"89!<+0#1$8*+#3$%+2198"3+1#+1#8$1&(9"3+1#
relacionados ao desempenho entre dois frameworks
E"1$"3+1#$%#,56V#W!E$82"9$#$#X+'T!2Y@#Z+8"%#"2"-
A
/ 54
(!1"3"1#3!=$8$29$1# +%E!2")[$1#3+1#=8"%$\+8Y1# +%#
+1# 1!19$%"1# +'$8" !+2"!1# ]!23+\1# ^DD_# M$87$8# $#
T!2&`# aE&29&# CC@Db0# O&29+# "+1# E"2 +1# 3$# 3"3+1# !tados. Os sistemas operacionais foram selecionados
buscando abranger o mercado brasileiro de softwa8$1#(! $2 !"3+1#$#+')[$1#3$#1+=9\"8$1#(!78$1#%"!1#'+pulares.
Persistência de dados
6#'$81!19c2 !"#3$#3"3+1#2+1#'+11!E!(!9"#98"E"(P"8#
+%# +# JKL0# ;&$# '$8%!9$# "# 8!")*+# 3$# ("11$1# ,"7"#
como beans de entidade, mapeando-as para tabelas
$%# &%# E"2 +# 3$# 3"3+1# 8$(" !+2"(@# a%"# 3"1# 7"29"<$21# 3+# &1+# 3"# ,56# F# "# 2*+# +E8!<"9+8!$3"3$# 3+# &1+#
3$# !2198&)[$1# MST0# +# ;&$# "&%$29"# "# 7$(+ !3"3$# 3$#
desenvolvimento do software e não restringe as ins98&)[$1#3$#'$81!19c2 !"#"#&%#'"38*+#+&#7$81*+#$1'$G4 "#3$#MST@#
6# 8!")*+#3"1#!2198&)[$1#MST#F#3$#8$1'+21"E!(!3"3$#3+#=8"%$\+8Y#'8+7$3+8#3$#,56#1$23+#&9!(!>"3+#
2"# "%"3"#3$#'$81!19c2 !"@#H$19"#=+8%"0#&%#1+=9\"8$#;&$#&9!(!>"#,56#9+82"d1$#2*+#3$'$23$29$#3"1#'"8ticularidades da linguagem SQL própria do banco de
3"3+10#+#;&$#F#%&!9+#e9!(0#&%"#7$>#;&$#+#3$1$27+(7$dor não precisa reescrever todo o código adaptando-
!"#$%&'()*%+&,-+$%)&.&/*()*%+0)123($"45%3
5!6 &"(- !#"!7'8#'%(&*(!#!9*:';*(!-(!9 "/13(+, <!"#.3&#!#!- 13 &!#"!=>.*;(!9 "/13(;* '($!/#$ !?=@9AB@CD!E#($*2(!3&(F($% .!
; " !; '.1$3 &!G()(!' !*'3#&* &!- !7.3(- !-#!@, !C(1$ D!C ..1*!;#&3*H;(+, !@9GC<!5!- ;#'3#!'(!B'*)#&.*-(-#!- !7.3(- !-#!I*'(.!
J#&(*.!KB7IJL!#!'(!=MN79!-#!@, !G .5!- !E* !C&#3 D!G1'3 !; "! 13& .!; $(F &(- &#.!"('35"! !.*3#!%33/OAAPPPD/(33#&'*2('- D; "D
br para a discussão de desenvolvimento de software.
6()5%/&789)%&:%38/&9(& $"#(&.&3()5%/13()5;89)%45%3
atualmente é graduando em Sistemas de Informação pela Universidade do Estado de Minas Gerais (UEMG) entusiasta da linguagem
Java e empresário.
-o para outro banco de dados, aumentando a compatibilidade e portabilidade do software, desfrutando
3"#%"2!'&(")*+#E"1$"3"#$%#+EO$9+1@
O Hibernate
L"29!3+#'$("#,?+110#=+!# 8!"3+#$%#^DDC#'+8#N"vin King e é um framework livre e de código aberto
(! $2 !"3+#1+E#"#TN5T#7^@C0#1$<&$#+#'"38*+#,56#$#3!1'+2!E!(!>"#&%"#7$81*+#'"8"#"#9$ 2+(+<!"#@U$9@
69&"(%$29$#$19f#$%#1&"#7$81*+#_@R@R#.$19f7$(/#$#
+29F%#&%"#7"19"#3+ &%$29")*+#3!1'+2G7$(#2+#1!9$#
na mantenedora.
O TopLink
Criado pela Oracle, teve sua primeira distribui)*+#2+#!2G !+#3"#3F "3"#3$#gD#$#F#&%#=8"%$\+8Y#'8+'8!$9f8!+0#9"%EF%#1$<&$#+#'"38*+#,56#$#"9&"(%$29$#
está na versão 11g.
Ambiente de simulação
X+3+1#+1#9$19$1#=+8"%#$`$ &9"3+1#$%#2+9$E++Y#
M+2Q#h"!+# +%#'8+ $11"3+8#I+8$#^#H&+#^@DNW># +%#
bN?#3$#%$%B8!"#K6L@
J# 1+=9\"8$# &9!(!>"3+# '"8"# +1# 9$19$1# +298+("7"#
+# 9$%'+# 3$# "3"# 9"8$="# '"8"# '+19$8!+8# +%'"8")*+0#
considerando ainda a possibilidade de testar em di=$8$29$1#M!19$%"1#J'$8" !+2"!1@#6(F%#3!11+0#$%#9+3+1#+1# "1+10#"#%$1%"#%f;&!2"#7!89&"(#=+!#&9!(!>"3"0#
2$19$# "1+#"#,hL#C@R@
<$2-)(&=4 Diagrama do Banco de Dados dos Testes.
J#!29&!9+#3$19$#"89!<+#2*+#F#3$42!8#;&"(#F#"#%$lhor das tecnologias, mas sim, analisar apenas o seu
3$1$%'$2P+# 1$%# 2$2P&%"# '$81+2"(!>")*+# $%# 1&"#
+24<&8")*+0# '8$1$87"23+d"# +%+# =+!# ("2)"3"# "+#
%$8 "3+@#M"E$d1$#;&$# +%#+#&1+#3$#'$81+2"(!>")[$1#
$# +24<&8")[$1#"'8!%+8"3"1#.9&22!2</0#"11!%# +%+#
o uso de pools de conexão, o resultado pode ser diferente do encontrado neste artigo.
Z+8"%#&9!(!>"3"1#"1#1$<&!29$1#9$ 2+(+<!"1V
58+3&9+1#$#7$81[$1
» Frameworks persistência:
W!E$82"9$#7$81*+#_@^@A0# +%'"9G7$(# +%#,56#C@D
X+'T!2Y#7$81*+#^@C#E&!(3#_0# +%'"9G7$(# +%#,56#C@D
» Bancos de dados:
LQM;(#7$81*+#A@C@CC
5+19<8$M;(#7$81*+#i@b@b
J8" ($#7$81*+#CD<#-`'8$11#-3!9!+2#j#CD@^@D
M;(M$87$8#^DDA#7$81*+#g@DD@bDA_@DD#-`'8$11
» Sistemas operacionais:
]!23+\1#^DD_#M$87! $#5" Y#^
T!2&`#aE&29&#CC@Db0#Y$82$(#^@R@_Ad^b
» Java:
Lf;&!2"#7!89&"(#,"7"#7$81*+#C@R@Dk^^
5"8"#"#1!%&(")*+#3$#&%# $2f8!+#3$#1+=9\"8$#8$"(0#
=+!# 8!"3"# &%"# $198&9&8"# +%# CD# $29!3"3$1# 8$(" !+nadas. Cada entidade apresentava atributos de tipos
variados, porém presentes em todos os sistemas gerenciadores de bancos de dados testados.
J1# 9!'+1# 3$# 3"3+1# =+8"%# :UX0# H6X-0# X-lX# $#
ZTJ6X0# +%+#%+198"#"#4<&8"#C@#J&98"# "8" 9$8G19! "#
&9!(!>"3"#'"8"#1!%&("8#1!9&")[$1#8$"!1#=+!#+#8$(" !+2"%$29+#$298$#"1#$29!3"3$10#$%#;&$#=+8"%#&9!(!>"3+1#
relacionamentos diversos, com cenários de persis9c2 !"#$%# "1 "9"#$#$`'+89")*+#3$# P"7$1#$198"2<$!8"1#;&$#$`!<$%#"#<$8")*+#3$#1!29"`$1#%"!1# +%'($`"1#'$(+#=8"%$\+8Y#,56@
Os dados foram gerados aleatoriamente pelo sistema, respeitando o tipo de dado de cada atributo e
&9!(!>"23+# +# (!%!9$# %f`!%+# 3$# !2=+8%")*+# 3$# "3"#
tipo de dado.
6# T!19"<$%# C# "'8$1$29"# &%# $`$%'(+# 3$# $29!3"3$# %"'$"3"# '"8"# '+19$8!+8# %"2!'&(")*+# '$(+1#
frameworks. Considerando que os frameworks são
1$($ !+2"3+1# '$("# +24<&8")*+# 2+# '$81!19$2 $@`%(0#
55 \
'"8"# "3"#+')*+#F# 8!"3"#&%"#2+7"#&2!3"3$#3$#'$81!19c2 !"#.5$81!19$2 $#a2!9/0#+#;&$#'$8%!9$#+#%$1%+#
mapeamento para qualquer framework que segue o
'"38*+# ,560# +%# %G2!%"1# %+3!4 ")[$1# "'$2"1# 2+#
persistence.xml.
>$/?(283&=4 Implementação da entidade Table3.
@Entity
@Table(name = “table3”)
public class Table3 implements Serializable {
@Id
@SequenceGenerator(name = “seq_table3”,
sequenceName = “seq_table3”,
allocationSize = 1)
@GeneratedValue(generator = “seq_table3”,
strategy=GenerationType.AUTO)
@Column(name = “idtable3”)
private int idTable3;
média independentemente de banco de dados e siste%"#+'$8" !+2"(@#6+#9+9"(#=+8"%#%"2!'&("3+1#miC@^DD#
registros para cada teste.
A(*8"(&=4 Tempo total da comparação entre TopLink e
Hibernate.
Framework
Tempo Total Médio
W!E$82"9$
X+'T!2Y
DPbi%bR1
CP^g%Ci1
I+%'"8"23+# +1# 3+!1# =8"%$\+8Y10# +# W!E$82"9$#
obteve o melhor desempenho, mostrando-se ser mais
8f'!3+0# 8$"(!>"23+# 9+3"1# "1# +'$8")[$1# $%# %$2+1# 3$#
&%"#P+8"# +%+#3$%+2198"3+#'$(+#<8f4 +#3"#4<&8"#^@
Desempenho entre sistemas
operacionais
U$19"1#1!%&(")[$1#=+8"%#$`$ &9"3+1#gR#9$19$1#$%#
"3"#1!19$%"#+'$8" !+2"(0#3$1'8$>"23+#+#MST#M$87$8#
no ambiente Windows, para que a quantidade de si%&(")[$1#=+11$#$;&!7"($29$0#Of#;&$#$($#2*+#F# +%'"9G7$(#$%#"%E!$29$#T!2&`@#U"#9"E$("#^#1*+#"'8$1$29"3+1#
os resultados obtidos, que corresponde à média entre
os dois frameworks no respectivo sistema operacio2"(#&9!(!>"23+#9+3+1#+1#E"2 +1#9$19"3+10# +%#$` $)*+#
3+#MST#M$87$8@#6#;&"29!3"3$#3$#8$<!198+1#%"2!'&("3+1#=+!#3$#RRg@gDD@
@Column(name = “valor1”)
private int valor1;
@Column(name = “valor2”)
private @%(? valor2;
@Column(name = “texto”, length=1000)
private String texto;
@ManyToOne
@ForeignKey(name=”fk_table3_table2”)
@JoinColumn(name = “idtable2”,
referencedColumnName = “idtable2”,
nullable = false)
private Table2 table2;
A(*8"(&B4 Tempo total da comparação entre sistemas
operacionais.
Sistema Operacional
Linux
Windows
// Gets e Sets
Tempo Total Médio
DPbg%bC1
CPDi%bA1
}
U$19"# +%'"8")*+0# +%+# $`!E!3+# 2"# 4<&8"# _0# +#
sistema operacional Linux obteve tempo menor, em
Desempenho entre Hibernate e TopLink ;&$#"+#42"(#3$#9+3"1#"1#+'$8")[$1#+#9$%'+#=+!#!2=$8!+8#
Z+8"%#$`$ &9"3+1#CC^#9$19$1#$%# "3"#=8"%$\+8Y# à uma hora.
nos dois sistemas operacionais, quatro bancos de da3+1#7"8!"23+#$298$#C0#^0#_#$#b#9"E$("1#.%+198"3"1#2"# Desempenho entre banco de dados
U$19"1# 1!%&(")[$10# =+8"%# $`$ &9"3"1# _^# +'$8"4<&8"# C/# $%# "3"# E"2 +# 3$# 3"3+1# . +%# $` $)*+# 3+#
MST#M$87$8#2+#aE&29&/0#$#9+3+#+#9$%'+#<"19+#=+!#1+- )[$1#'"8"# "3"#E"2 +#3$#3"3+10#1$23+#$("1V#!21$8)*+0#
%"3+#$#+#8$1&(9"3+#$19f#$`!E!3+#2"#4<&8"#^@#6#9"E$("# 1$($)*+0# "9&"(!>")*+# $# $` (&1*+# 3$# 3"3+10# 7"8!"23+#
1 mostra o resultado de tempo total em horas, que é a $298$# C0# ^0# _0# b# 9"E$("1@# J1# 8$1&(9"3+1# 3+1# 9$19$1# $%#
Tempo gasto entre frameworks
Tempo gasto entre sistemas operacionais
b0A
X$%'+# b
X$%'+# R
.$%#%!(P[$1#3$#_0A
%!(!11$<&23+1/ _
.$%#%!(P[$1#3$#
A
%!(!11$<&23+1/
b
W!E$82"9$
X+'T!2Y
_
^
1
D
^0A
^
C0A
1
D0A
D
Linux
Windows
Frameworks
<$2-)(&B4!J&QH; !-#!; "/(&(+, !#'3&#!6&("#P &R.D!
/ 56
<$2-)(&C4!J&QH; !-#!; "/(&(+, !#'3&#!.*.3#"(.! /#&(;* '(*.D
referências/
!"#$%&'!($)#*!+&$,-./$01'!(#//$-)2!345!6!7/0899$0,.1:!4.;.!
7#/9$9%#,-#!<7=2!>$0!?#!4.,#$/0:!(0?#/,.'!@AAB
> Burke, Bill; Monson-Haefel, Richard, Enterprise
!"!#$!%&'()*+',-.'/!01.+'2**3
> Bauer, Christian; King, Gaving, Hibernate in Action,
4!%%5%6+'2**7
8'9.:0;$%<!=-.'>?:5!1'@5A$B%!<$+'C5&D.%E"$1'$;'FGGG)
H5A$B%!<$).B68'I:$&&!C.'$;'J2'C$'K01H.'C$'2*JJ
8'9.:0;$%<!=-.'.?:5!1'L.DM5%N+'C5&D.%E"$1'$;'FH<<DOPP
www.oracle.com/technetwork/middleware/toplink /
."$B"5$GP5%C$Q)H<;18'I:$&&!C.'$;'JR'C$'K01H.'C$'2*JJ'
A(*8"(&D4 Resultados em ambiente Linux.
Banco de dados
Tempo total médio
PostgreSQL
Oracle
LQM;(
DPC_%_A1
DPC_%bA1
DP^^%^C1
Em ambiente Windows, o SQL Server mostroud1$#1$8#%"!1#8f'!3+#'$8"29$#+1#+&98+1@#U$19$# "1+0#+1#
dois bancos de dados proprietários levaram menos
9$%'+#$%#8$(")*+#n1#+')[$1#<8"9&!9"1@#U+#"%E!$29$#
Linux, coincidentemente, quem levou a melhor foi o
PostgreSQL, que é gratuito e de código-fonte aberto.
U+1#3+!1#1!19$%"1#+'$8" !+2"!10#+#LQM;(#=+!#"#+')*+#
%"!1# ($29"0# +%# 8$1&(9"3+1# 1&'$8!+8$1# "# ^D# %!2&9+1#
em ambos os testes.
Conclusão – Comparativo framework,
banco de dados e sistema operacional
"%E!$29$# ]!23+\1# $19*+# 3!1'+2G7$!1# 2"# 9"E$("# _@#
6'B1# +1# 9$19$10# '+3$%+1# +2 (&!8# ;&$# $`!19!8"%#
6# ;&"29!3"3$# 3$# 8$<!198+1# %"2!'&("3+1# =+!# "# %$1- +%E!2")[$1#+9!%!>"3"10#1$23+#;&$#+#W!E$82"9$#+Ema dos testes anteriores com a quantidade total de 9$7$#"1# !2 +#'8!%$!8"1# +(+ ")[$1#$%#3$1$%'$2P+0#
miC@^DD#8$<!198+1#'+8#+'$8")*+@
1$23+#1$<&!3+#'$(+#X+'T!2Y#$%#"%E!$29$#T!2&`@
H$11"# =+8%"0# +2 (&!d1$# ;&$# "# +%E!2")*+# 3$#
A(*8"(&C4 Comparação de resultados entre bancos de
9$
2+(+<!"1#
+%# +24<&8")[$1# '"38+2!>"3"10# 1$%#
dados no Windows.
;&"(;&$8# &19+%!>")*+0#$%#&%# $2f8!+#;&$#"'8$1$2Banco de dados
Tempo total médio
ta diversas entidades e diferentes tipos de relacionaSQL Server
DPCg%_m1
%$29+#'"8"#'$81!19c2 !"# +%#,56#F#+#W!E$82"9$# +%+#
Oracle
DP^D%CR1
'8+7$3+8#3$#,56#$%#"%E!$29$#T!2&`0# +%#&%#E"2 +#
de dados PostgreSql, seguido muito próximo pelo
PostgreSQL
DP^C%A^1
E"2 +#3$#3"3+1#J8" ($@#,f#"# +%E!2")*+#%$2+1#7$(+>#
LQM;(
DP^R%_R1
=+!#X+'T!2Y#$%#"%E!$29$#]!23+\10#&9!(!>"23+#"#E"1$#
Em ambiente Linux, obviamente, não foi consi<8"9&!9"#LQMST@#
3$8"3+#+#E"2 +#3$#3"3+1#3"#L! 8+1+=9@#J1#8$1&(9"3+1#
mostraram-se próximos, expressando uma pequena
E%+/$98)(FG8/&H+($/
vantagem do PostgreSql.
Resultados como os descritos neste artigo mostram que, além das possibilidades de softwares
proprietários
!"#$!%&' Tempo médio, considerando framework de persistência, OS e banco de dados.
poderosos e con4f7$!10# "1# +')[$1#
Tempo
médio
por
Sistema
Ranking Framework operacional Banco de dados
operação
gratuitas
tam1
!"#$%&'#(
Linux
PostgreSQL
)*+),-.+*,
bém devem ser
consideradas.
+
!"#$%&'#
Linux
Oracle
)*+),-/-*,
J&98"# "48%")*+#
.
!"#$%&'#
Windows
SQL Server
)*++,001*,
que pode ser fei/
!"#$%&'#
Windows
Oracle
)*++,-.-*,
9"#F#;&$#1+(&)[$1#
2
!"#$%&'#
Windows
PostgreSQL
)*+.,.1)*,
gratuitas em am3456!%7
Linux
PostgreSQL
)*.),.+/*,
bientes proprie8
3456!%7
Linux
Oracle
)*.),1+-*,
tários obtiveram
8
!"#$%&'#
Windows
9:;<=
)*.2,-01*,
os piores resulta1
!"#$%&'#
Linux
9:;<=
)*.8,>/)*,
3+1@# U+# $29"29+0#
0)
3456!%7
Linux
9:;<=
)*/2,110*,
o SQL Server, em
11
3456!%7
Windows
SQL Server
)*20,2)0*,
ambiente Windo0+
3456!%7
Windows
Oracle
)*2.,/00*,
ws, mostrou-se
competitivo
às
0.
3456!%7
Windows
PostgreSQL
)*2>,-+/*,
1+(&)[$1# <8"9&!0/
3456!%7
Windows
9:;<=
0*)/,022*,
tas.
57 \
Download