Análise de Desempenho dos Frameworks de Persistência Hibernate e Spring Data

Documentos relacionados
Análise de Desempenho dos Frameworks de Persistência Hibernate e EclipseLink

UFG - Instituto de Informática

UNIVERSIDADE ESTADUAL DO CENTRO-OESTE UNICENTRO CURSO DE ESPECIALIZAÇÃO EM MÍDIAS EM EDUCAÇÃO

ABORDAGEM DE FRAMEWORKS PARA JSF QUE AUXILIAM O DESENVOLVIMENTO DE SOFTWARE

Conteúdo. Disciplina: INF Engenharia de Software. Monalessa Perini Barcellos. Centro Tecnológico. Universidade Federal do Espírito Santo

Aula 5. Carlos Eduardo de Carvalho Dantas

Uma Abordagem sobre Mapeamento Objeto Relacional com Hibernate

MAPEAMENTO OBJETO RELACIONAL: UM ESTUDO DE CASO

Resolvendo objeto-relacional impedance mismatch com hibernate

Noções de. Microsoft SQL Server. Microsoft SQL Server

Autoria:Aristófanes Corrêa Silva Adaptação: Alexandre César M de Oliveira

Persistência de Dados em Java com JPA e Toplink

HIBERNATE EM APLICAÇÃO JAVA WEB

Persistência de dados com JPA. Hélder Antero Amaral Nunes

Banco de Dados. Prof. Leonardo Barreto Campos 1

PHP INTEGRAÇÃO COM MYSQL PARTE 1

RESUMO. Palavras-chave: Persistência. Framework ORM. JPA. Benckmark. ABSTRACT

1 Criar uma entity a partir de uma web application que usa a Framework JavaServer Faces (JSF)

Desenvolvendo uma Arquitetura de Componentes Orientada a Serviço SCA

Introdução à Banco de Dados. Nathalia Sautchuk Patrício

Etc & Tal. Volume 2 - Número 1 - Abril 2009 SBC HORIZONTES 44

JPA Passo a Passo. Henrique Eduardo M. Oliveira henrique@voffice.com.br. Globalcode Open4Education

Prevayler. Perola. André Luís Sales de Moraes Juliana Keiko Yamaguchi Tatiana Yuka Takaki

SISTEMA DE WORKFLOW PARA MODELAGEM E EXECUÇÃO DE PROCESSOS DE SOFTWARE. Aluno: Roberto Reinert Orientador: Everaldo A. Grahl

Prof.: Clayton Maciel Costa

ISO/IEC 12207: Gerência de Configuração

2 Diagrama de Caso de Uso


UNIVERSIDADE FEDERAL DE SANTA MARIA - UFSM COLÉGIO AGRÍCOLA DE FREDERICO WESTPHALEN BANCO DE DADOS II

APLICATIVO WEB PARA O SETOR DE EXTENSÃO IFC VIDEIRA

Apesar de existirem diversas implementações de MVC, em linhas gerais, o fluxo funciona geralmente da seguinte forma:

Roteiro 2 Conceitos Gerais

LINGUAGEM DE BANCO DE DADOS

Banco de Dados Oracle 10g: Introdução à Linguagem SQL

WebApps em Java com uso de Frameworks

Desenvolvimento de um Simulador de Gerenciamento de Memória

JPA: Persistência padronizada em Java

DESENVOLVENDO APLICAÇÃO UTILIZANDO JAVA SERVER FACES

CURSO DE EXTENSÃO ON-LINE EM Oracle 10g Express Edition XE nível básico. Edital de seleção

Para construção dos modelos físicos, será estudado o modelo Relacional como originalmente proposto por Codd.

Android e Bancos de Dados

ALTO DESEMPENHO UTILIZANDO FRAMEWORK HIBERNATE E PADRÃO JAVA PERSISTENCE API

Universidade Federal de Santa Catarina Centro Tecnológico Curso de Sistemas de Informação. Proposta de Trabalho de Conclusão de Curso

Documento de Projeto de Sistema

2 a Lista de Exercícios

Banco de Dados. Maurício Edgar Stivanello

Banco de Dados. Um momento crucial na organização dos dados é a forma com que cadastramos estes dados, a estrutura de armazenamento que criamos.

Introdução a Computação

Aplicativo web para definição do modelo lógico no projeto de banco de dados relacional

Comandos de Manipulação

Roteiro. Arquitetura. Tipos de Arquitetura. Questionário. Centralizado Descentralizado Hibrido

Banco de Dados. Aula 1 - Prof. Bruno Moreno 16/08/2011

PRODUTO 1 (CONSTRUÇÃO DE PORTAL WEB)

20/05/2013. Sistemas de Arquivos Sistemas de arquivos. Sistemas de Gerenciamento de Banco de Dados (SGBD) Banco de Dados. Estrutura de um BD SGBD

LINGUAGEM SQL. DML - Linguagem de Manipulação de Dados

SISTEMA DE AGENDAMENTO E GERENCIAMENTO DE CONSULTAS CLÍNICAS

Unidade 8: Padrão MVC e DAO Prof. Daniel Caetano

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS

Banco de Dados. Prof. Antonio

Orientação a Objetos

Integração de sistemas utilizando Web Services do tipo REST

UNIVERSIDADE FEDERAL DA BAHIA INSTITUTO DE MATEMÁTICA CIÊNCIA DA COMPUTAÇÃO LINGUAGENS PARA APLICAÇÃO COMERCIAL. Java Peristence API 1.

3.1 Definições Uma classe é a descrição de um tipo de objeto.

Unidade 7: Middleware JDBC e Java DB Prof. Daniel Caetano (Fonte: Tutorial Oficial do NetBeans)

UFG - Instituto de Informática

Principais Comandos SQL Usados no MySql

DESENVOLVIMENTO WEB UTILIZANDO FRAMEWORK PRIMEFACES E OUTRAS TECNOLOGIAS ATUAIS

Persistindo dados com TopLink no NetBeans

Sumário Introdução Breve História da Linguagem SQL l 0.3 Características da Linguagem SQL A Composição deste Livro 3

UFG - Instituto de Informática

Plano de Trabalho Docente Ensino Técnico

Sistemas de Bases de Dados

SISTEMA TYR DIAGRAMAS DE CLASSE E SEQUÊNCIA Empresa: Academia Universitária

COMPARAÇÃO ENTRE OS FRAMEWORKS DE DESENVOLVIMENTO DE SOFTWARE ENTITY FRAMEWORK E NHIBERNATE : ESTUDO DE CASO EM UM SISTEMA

CURSO DESENVOLVEDOR JAVA WEB E FLEX Setembro de 2010 à Janeiro de 2011

Junções e Índices em Tabelas

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

gerenciamento de portais e websites corporativos interface simples e amigável, ágil e funcional não dependendo mais de um profissional especializado

INTRODUÇÃO E CONFIGURAÇÃO DO PRIMEFACES MOBILE EM APLICAÇÕES JSF

Ex.: INSERT INTO tmpautor (CDAUTOR, NMAUTOR) VALUES (1, Renato Araújo )

PROGRAMA. Objectivos Gerais :

PROGRAMAÇÃO SERVIDOR PADRÕES MVC E DAO EM SISTEMAS WEB. Prof. Dr. Daniel Caetano

Os dados no MySQL são armazenado em tabelas. Uma tabela é uma colecção de informação relacionada e consiste em colunas e linhas.

Structured Query Language (SQL)

Introdução à Engenharia da Computação. Banco de Dados Professor Machado

DESENVOLVIMENTO WEB DENTRO DOS PARADIGMAS DO HTML5 E CSS3

Padrões. Projeto (Design) de Software

Introdução. Conceitos Básicos. Conceitos Básicos. Conceitos Básicos

CURSO DESENVOLVEDOR JAVA Edição 2010

Linguagem de Consulta Estruturada SQL- DML

Wilson Moraes Góes. Novatec

Consistem num conjunto de apontadores para instâncias especificas de cada relação.

SQL Linguagem de Manipulação de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

SQL Structured Query Language

DESENVOLVIMENTO DE SOFTWARE

GBD PROF. ANDREZA S. AREÃO

Structured Query Language (SQL) Ambiente Simplificado de um SGBD

Ensino Técnico Integrado ao Médio FORMAÇÃO PROFISSIONAL. Plano de Trabalho Docente 2014

Transcrição:

Análise de Desempenho dos Frameworks de Persistência e Spring Data Vitor Gotardo, Edson A. Oliveira Junior 2 Resumo. Grande parte das aplicações desenvolvidas utilizando linguagens orientadas a objetos persistem seus objetos por meio de bases de dados relacionais com o apoio de frameworks de Mapeamento Objeto-Relacional (ORM), como. Este artigo apresenta uma análise de desempenho baseada em benchmark dos frameworks e Spring Data. Tal análise fornece indícios iniciais para que analistas e desenvolvedores possam escolher os frameworks mais apropriados para o desenvolvimento de seus projetos. Palavras-chave: framework, ORM,, JPA, Spring Data, benchmark. Abstract. Most applications developed using object-oriented languages persist your objects using relational databases with support of Object-Relational Mapping (ORM) frameworks such as. This paper presents a benchmark-based performance analysis for and Spring Data frameworks. Such an analysis provides initial evidence to analysts and developers may choose the most appropriate frameworks for the development of their projects. Keywords: framework, ORM,, JPA, Spring Data, benchmark.. Introdução Muitas aplicações utilizam dados que precisam ser guardados e recuperados, em um ambiente orientado a objetos. Os objetos são utilizados para representar esses dados, e nesse caso, é o objeto que precisa ser armazenado. Para tanto, existem três tipos de mecanismos de persistência de objetos: Object-Oriented Database Management Systems (OODBMS), Relational Database Management Systems (RDBMS) e Object- Relational Database Management Systems (ORDMS) []. Um problema muito conhecido na persistência de objetos em um banco de dados relacional é o conflito de impedância, que surge entre o modelo orientado a objeto e o modelo relacional e também entre a linguagem orientada a objeto e a linguagem de consulta (query) relacional []. Conflito de impedância é quando dois sistemas diferentes não funcionam de maneira ideal e eficiente quando conectados para funcionarem em conjunto. Poderíamos dizer então que os conceitos de modelo de orientação a objeto e do modelo relacional possuem valores de impedância diferentes. Enquanto o modelo relacional dá mais ênfase aos dados em si e sua representação e organização, o modelo orientado a objetos enfoca na abstração dos dados e seu comportamento, operações na forma de objetos [7]. O Mapeamento Objeto-Relacional (Object-Oriented Mapping - ORM) foi desenvolvido para servir como uma ponte entre esse conflito de impedância e tornar a persistência de objetos mais simples. Assim, é oferecido um mapeamento entre o modelo orientado a objeto e o modelo relacional []. Aluno do curso de especialização em Desenvolvimento de Sistemas para Web Universidade Estadual de Maringá (UEM) - Av. Colombo, 5790 Bloco C56 Maringá PR Brasil vitorgotardo7@gmail.com 2 Departamento de Informática Universidade Estadual de Maringá (UEM) - Av. Colombo, 5790 Bloco C56 Maringá PR Brasil - edson@din.uem.br

Este artigo tem como meta comparar dois frameworks ORM, o que é um dos mais consolidados por desenvolvedores Java e.net e o Spring Data JPA que é um framework recente, mas que promete agilizar o desenvolvimento da camada de persistência. Para tal comparação serão utilizados algumas operações de persistência sendo elas: consultas simples e com joins, inserção, alteração e exclusão. Será utilizado uma média do desempenho dos procedimentos executados para encontrar o framework com menor tempo médio nas operações de persistência. Este artigo está organizado da seguinte forma: na Seção 2 são abordadas as tecnologias utilizadas para efetuar a comparação dos frameworks; na Seção 3 é realizado o estudo comparativo de desempenho entre e Spring Data JPA; na Seção 4 é apresentada a conclusão e trabalhos que podem ser desenvolvidos futuramente. 2. Revisão Bibliográfica 2.. O é um projeto que tem como objetivo ser uma solução completa para o problema de mapeamento persistindo dados em Java. Ele serve como mediador na interação de aplicações com banco de dados relacional, deixando o desenvolvedor livre para concentrar-se na camada de negócio da aplicação. O é uma solução não intrusiva. O desenvolvedor não precisa seguir todas as regras e design patterns quando estiver desenvolvendo a camada lógica de negócio e classes de persistência, mas, o se integra facilmente com a maioria das novas e existentes aplicações e não requer grandes mudanças na aplicação [9]. 2.2. Spring Data JPA O Spring oferece suporte para as tecnologias de acesso a dados desde seu início. Este oferece uma implementação mais simples de acesso a dados, independente da tecnologia utilizada como JDBC,, TopLink, JDO e ibatis para a persistência de dados. O principal alvo do Spring em relação a acesso a dados era bancos de dados relacionais, sendo que esta tecnologia era predominante quando se trata de persistência de dados. Com a chegada da tecnologia NoSQL a espaço para criar suporte para desenvolvedores surgiu. Além disso, ainda existem melhorias a serem feitas relacionadas ao acesso a dados relacionais. Foram esses fatores que incentivaram a criação do projeto Spring Data que consiste em módulos dedicados para tecnologias como NoSQL, JPA e módulos JDBC para suporte a banco de dados relacional [2]. O projeto Spring Data JPA, embora não seja um framework ORM, foi desenvolvido com base no padrão JPA 2 para trabalhar com qualquer framework que siga tal especificação. O Spring Data JPA é responsável pela criação das classes Data Access Object (DAO) que possuem os métodos concretos para comunicação com a base de dados. Assim, fica abstraída a necessidade de se criar classes concretas para os repositórios de dados, sendo necessário apenas criar uma interface específica para cada classe de entidade, e nelas, estender a interface JpaRepository [3]. 2.3. Benchmark Employees Sample Database O benchmark é um teste, ou uma série de testes, que medem o desempenho de um sistema ou subsistema enquanto executam tarefas definidas. O benchmark deve medir o pico de desempenho de um sistema, normalmente operações com um problema conhecido. Benchmarks medem a capacidade de um sistema, muitas vezes referente a performance de uma aplicação em particular, como um banco de dados []. 2

Neste artigo o benchmark é utilizado para medir o desempenho de frameworks ORM efetuando operações de persistência em banco de dados relacional, assim, tornando possível a comparação entre eles. A base de dados Employee Sample Database foi desenvolvida por Crews e Maxia [4] e fornece aproximadamente 60MB de dados que estão separados em seis tabelas, fornecendo um total de 4 milhões de registros. Tal benchmark é bastante interessante para realizar tarefas de comparação de mecanismos de persistência de dados. 2.4. Java Persistence Query Language Em muitas maneiras o JPQL é similar ao SQL, uma ferramenta para interagir com base de dados relacional. Além disso, o JPQL é similar ao SQL em sua sintaxe, declarações e cláusulas. A principal diferença entre JPQL e SQL esta nos objetos que são especificados nas declarações e o objeto retornado por esta declaração. Em declarações SQL, é definido diretamente o objeto que deseja utilizar, por exemplo, uma tabela ou view para ser consultada ou modificada. Em declarações JQPL são utilizadas as entidades. E o mesmo acontece para os resultados retornados pela consulta JQPL, estes são instâncias de entidades, enquanto que os resultados retornados pelo SQL são tabelas ou views. Resumindo, o JQPL trata as entidades mapeadas para uma estrutura de base de dados, não precisando lidar com a estrutura da base de dados diretamente. O JQPL simplifica muito a tarefa de recuperar entidades. Todas as instâncias de entidades retornadas são automaticamente mapeadas. Assim, não é necessário mapear estas instâncias manualmente [0]. 2.5. Anotação @Query A anotação @Query pode ser utilizada para criar consultas usando JPA e vincular esta consulta a um método na interface dos repositórios. Assim, quando o método é chamado, o Spring Data JPA executa a consulta especificada na anotação @Query [6]. 3. Estudo Comparativo de Desempenho entre e Spring Data JPA 3.. Ambiente de Testes Para efetuar os testes de benchmark foi utilizado: Spring Tool Suite 3.3.0 como ambiente de desenvolvimento integrado (IDE) Spring Framework 3.. 4.2.2; Spring Data JPA.3.4; MySQL 5.5.24; Java JDK.7; Maven 3.0.5 para construir os projetos mais facilmente mantendo as versões dos pacotes utilizados sempre estáveis e garantir que as mesmas versões foram utilizadas para os dois projetos. O computador usado para os testes tem processador I7@4.5Ghz com 4 núcleos reais e 8 threads, e 6GB de memoria RAM. 3.2. Planejamento, Execução e Análise dos Resultados 3

3.2. Definição de Contexto e Planejamento do Estudo Comparativo 3.2.. Objetivo do Estudo Comparar frameworks de persistência objeto-relacional com o objetivo de identificar o melhor desempenho com relação a operações de persistência de dados em um banco de dados relacional do ponto de vista de analistas e desenvolvedores de software no contexto de um benchmark específico para operações de persistência relacionais. 3.2..2 Seleção das Variáveis Variáveis independentes (entrada/causa): o Framework de persistência e Spring Data JPA Variável dependente (observação/efeito): o Desempenho 3.2..3 Definição das Hipóteses Hipótese Nula (H0): os tempos médios para a execução das operações de persistência usando e Spring Data JPA são os mesmos. Hipótese Alternativa (H): o tempo médio de execução das operações de persistência usando é menor que o tempo médio usando Spring Data JPA. Hipótese Alternativa (H2): o tempo médio de execução das operações de persistência usando é maior que o tempo médio usando Spring Data JPA. 3.2.2 Execução do Estudo Comparativo O estudo comparativo foi conduzido com base na execução de 4 operações de persistência, sendo consultas (query a query), sendo que as consultas (query3 e query5) possuem JOIN e as demais são consultas simples, inserção, alteração e exclusão. Cada consulta foi executada 0 vezes manualmente, sendo efetuado o cálculo médio do desempenho de cada consulta para ter uma ideia geral dos resultados. Query: é uma consulta simples que busca Employee em um total de 0.000 registros. Foi utilizado somente a tabela employees da base de dados e o comando utilizado para esta consulta foi: @Query("FROM Employee e WHERE e.id = 249359"). Como mostra a Figura o efetuou a consulta em 0,63s e o Spring Data JPA efetuou a consulta em 0,048s. 4

0,2 0,5 0,63 0, 0,05 0,048 0 Figura : Busca Employee em um total de 0.000 registros. Query2: é uma consulta simples que busca 0.000 registros do tipo Employee que possuam o ID maior que 20.000 utilizando o operador >. Foi utilizado somente a tabela employees da base de dados e o comando utilizado para esta consulta foi: @Query("FROM Employee e WHERE e.id > 20000"). Como mostra a Figura 2 o efetuou a consulta em,006s e o Spring Data JPA efetuou a consulta em,087s.,,08,06,04,02 0,98 0,96,006,087 Figura 2: Busca 0.000 registros do tipo Employee com ID maior que 20.000. Query3: é uma consulta com JOIN que busca 0.000 registros do tipo Employee que possuam o ID maior que 20.000 e estão no Department de ID 7, os resultados estão ordenados pela data de início e de término que determinado Employee permaneceu no departamento. Foram utilizadas as tabelas employees e dept_emp e o comando utilizado para esta consulta foi: @Query("FROM Employee e INNER JOIN e.deptemps de WHERE e.id > 20000 AND de.pk.department = 7 ORDER BY de.from_date, de.to_date"). Como mostra a Figura 3, o efetuou a consulta em 3,826s e o Spring Data JPA efetuou a consulta em 3,536s. 5

3,9 3,8 3,7 3,6 3,5 3,4 3,3 3,826 3,536 Figura 3: Busca 0.000 registros do tipo Employee com ID maior que 20.000 que estão no Department de ID 7, ordenados pelas datas de início e término. Query4: é uma consulta simples que busca 0.000 registros do tipo Employee que possuam o ID maior ou igual a 20.000 utilizando o operador >=. Foi utilizado somente a tabela employees da base de dados e o comando utilizado para esta consulta foi: @Query("FROM Employee e WHERE e.id >= 20000"). Como mostra a Figura 4, o efetuou a consulta em,02s e o Spring Data JPA efetuou a consulta em,055s.,06,05,04,03,02,0,02,055 Figura 4: Busca 0.000 registros do tipo Employee com ID maior ou igual que 20.000. Query5: é uma consulta com JOIN que busca 0.000 registros do tipo Employee que estão no Department de ID 7. Foi utilizado as tabelas employees e dept_emp e o comando utilizado para esta consulta foi: @Query("FROM Employee e INNER JOIN e.deptemps de WHERE de.pk.department = 7"). Como mostra a Figura 5, o efetuou a consulta em 3,787s e o Spring Data JPA efetuou a consulta em 3,470s. 6

3,9 3,8 3,7 3,6 3,5 3,4 3,3 3,787 3,47 Figura 5: Busca 0.000 registros do tipo Employee que estão no Department de ID 7. Query6: é uma consulta simples que busca 0.000 registros do tipo Employee que possuam o ID menor que 20.000 utilizando o operador <. Foi utilizado somente a tabela employees da base de dados e o comando utilizado para esta consulta foi: @Query("FROM Employee e WHERE e.id < 20000"). Como mostra a Figura 6, o efetuou a consulta em 0,997s e o Spring Data JPA efetuou a consulta em,064s.,08,06,04,02 0,98 0,96 0,997,064 Figura 6: Busca 0.000 registros do tipo Employee com ID menor que 20.000. Query7: é uma consulta simples que busca 0.000 registros do tipo Employee que possuam o ID menor ou igual a 20.000 utilizando o operador <=. Foi utilizado somente a tabela employees da base de dados e o comando utilizado para esta consulta foi: @Query("FROM Employee e WHERE e.id <= 20000"). Como mostra a Figura 7, o efetuou a consulta em,007s e o Spring Data JPA efetuou a consulta em,04s.,05,04,03,02,0 0,99,007,04 Figura 7: Busca 0.000 registros do tipo Employee com ID menor ou igual que 20.000. 7

Query8: é uma consulta simples que busca 0.000 registros do tipo Employee que possuam o ID diferente de 20.000 utilizando o operador <>. Foi utilizado somente a tabela employees da base de dados e o comando utilizado para esta consulta foi: @Query("FROM Employee e WHERE e.id <> 20000"). Como mostra a Figura 8, o efetuou a consulta em,006s e o Spring Data JPA efetuou a consulta em,037s.,04,037,03,02,0,006 0,99 Figura 8: Busca 0.000 registros do tipo Employee com ID diferente de 20.000. Query9: é uma consulta simples que busca 0.000 registros do tipo Employee que possuam o ID entre 25.000 e 50.000 utilizando o operador BETWEEN. Foi utilizado somente a tabela employees da base de dados e o comando utilizado para esta consulta foi: @Query("FROM Employee e WHERE e.id BETWEEN 25000 AND 50000"). Como mostra a Figura 9, o efetuou a consulta em 0,998s e o Spring Data JPA efetuou a consulta em,033s.,04,03,02,0 0,99 0,98 0,998,033 Figura 9: Busca 0.000 registros do tipo Employee com ID entre 25.000 e 50.000. Query0: é uma consulta simples que busca 0.000 registros do tipo Employee que são do GENDER(sexo) masculino(m) utilizando o operador IN. Foi utilizado somente a tabela employees da base de dados e o comando utilizado para esta consulta foi: @Query("FROM Employee e WHERE e.gender IN('M')"). Como mostra a Figura 0, o efetuou a consulta em 0,999s e o Spring Data JPA efetuou a consulta em,030s. 8

,04,03,02,0 0,99 0,98 0,999,03 Figura 0: Busca 0.000 registros do tipo Employee que são do sexo masculino. Query: é uma consulta simples que busca 0.000 registros do tipo Employee que possuam primeiro nome com as letras Sa utilizando o operador LIKE. Foi utilizado somente a tabela employees da base de dados e o comando utilizado para esta consulta foi: @Query("FROM Employee e WHERE e.first_name LIKE '%Sa%'"). Como mostra a Figura, o efetuou a consulta em,039s e o Spring Data JPA efetuou a consulta em,066s.,07,066,06,05,04,039,03,02 Figura : Busca 0.000 registros do tipo Employee que possuam Sa no primeiro nome. Query2: foram inseridos.000 objetos do tipo Employee na tabela employees. Todas as propriedades do objeto foram preenchidas, sendo elas: first_name, last_name, gender, hire_date, birth_date. Como mostra a Figura 2, o efetuou a inserção em 0,70s e o Spring Data JPA efetuou a inserção em 5,930s. 7 6 5 4 3 2 0 0,70 5,93 Figura 2: Inserção de.000 objetos do tipo Employee. 9

Query3: foram alterados os últimos 0.000 registros do tipo Employee, os campos alterados foram: first_name, last_name, gender. Como mostra a Figura 3, o efetuou a operação em 0,77s e o Spring Data JPA efetuou a operação em 0,078s. 0,2 0,77 0,5 0, 0,078 0,05 0 Figura 3: Alteração dos últimos 0.000 registros do tipo Employee. Query4: foram excluídos os últimos 0.000 registros do tipo Employee. Como mostra a Figura 4, o efetuou a operação em 0,247s e o Spring Data JPA efetuou a operação em 0,47s. 0,3 0,25 0,2 0,5 0, 0,05 0 0,247 0,47 Figura 4: Exclusão dos últimos 0.000 registros do tipo Employee. 3.2.3 Análise dos Dados do Estudo Comparativo Com base na execução das 4 operações de persistência realizadas neste estudo o obteve melhor desempenho em 9 operações. O Spring Data JPA obteve melhor desempenho em 5 operações. Sendo assim, o framework obteve o melhor desempenho geral com base nas operações utilizadas neste estudo. A Tabela mostra o desempenho dos frameworks categorizados por tipo de operação. Cláusulas Spring Data JPA WHERE 8 JOIN x 2 INSERT x UPDATE x 0

DELETE x Total 9 5 Tabela : Desempenho dos frameworks categorizados por tipo de operação. Assim, o estudo realizado fornece indícios de que a hipótese nula (H0) deve ser rejeitada e, consequentemente, a hipótese alternativa (H) deve ser aceita, sendo que na média, o framework obteve melhor desempenho do que o framework Spring Data JPA para as operações realizadas neste estudo. O resultado do desempenho geral dos frameworks pode ser visto na Figura 5. 2,5,99,544 0,5 0 Figura 5: Desempenho geral dos frameworks. 4. Conclusões e Trabalhos Futuros Este artigo apresentou uma análise de desempenho baseada em benchmark por meio de uma série de operações de persistência com o intuito de fornecer evidências iniciais podendo guiar analistas e gerentes na escolha do framework de persistência mais adequado para os seus projetos. Com base nos resultados obtidos pode-se observar uma ligeira vantagem na utilização do com relação ao Spring Data para o conjunto de operações definidas pelo benchmark utilizado. Como direção a trabalhos que podem ser desenvolvidos futuramente tem-se: (i) a análise do desempenho em um sistema multiusuário; (ii) planejamento e realização de uma análise comparativa utilizando benchmarks com operações de persistência mais complexas; (iii) estudo comparativo dos diferentes tipos de linguagem de queries suportadas pelos frameworks; e (iv) comparação de funcionalidades entre os frameworks. Referências Bibliográficas [] PIETER VAN ZYL, DERRICK G. KOURIE, ANDREW BOAKE Comparing the Performance of Object Databases and ORM Tools. Disponível em: <http://odbms.org/download/027.0 Zyl Comparing the Performance of Object Databases and ORM Tools September 2006.PDF>. Acesso em: 0, set, 203. [2] MIKAEL KOPTEFF The Usage and Performance of Object Databases compared with ORM tools in a Java environment. Disponível em: <http://www.odbms.org/download/045.0

Kopteff The Usage and Performance of Object Databases Compared with ORM Tools in a Java Environment March 2008.PDF>. Acesso em: 0, set, 203. [3] MARCIO BALLEM S. Persistencia com Spring Data JPA. Disponível em: <http://www.devmedia.com.br/persistencia-com-spring-data-jpa-revista-java-magazine-03/24390>. Acesso em: 0, set, 203. [4] MYSQL Employees Sample Database Introduction. Disponível em: <http://dev.mysql.com/doc/employee/en/employees-introduction.html>. Acesso em:, set, 203. [5] ORACLE The Java Persistence Query Language. Disponível em: <http://docs.oracle.com/javaee/6/tutorial/doc/bnbtg.html>. Acesso em:, set, 203. [6] PETRI KAINULAINEN Spring Data JPA Tutorial Part Three: Custom Queries with Query Methods. Disponível em: <http://www.petrikainulainen.net/programming/spring-framework/springdata-jpa-tutorial-three-custom-queries-with-query-methods/>. Acesso em: 0, out, 203. [7] DIOGO V. DOS SANTOS, MARCELO DE R. MARTINS Métricas para avaliação das alternativas de persistência de dados num ambiente objeto relacional. São Paulo: IME/USP, 2007. [8] SHOAIB MAHMOOD BHATTI, ZAHID HUSSAIN ABRO, FARZANA RAUF ABRO Performance Evaluation of Java Based Object Relational Mapping Tools. Disponível em: <http://publications.muet.edu.pk/research_papers/pdf/pdf755.pdf>. Acesso em: 6, nov, 203. [9] CHRISTIAN BAUER, GAVIN KING Java Persistence with. Manning Publications, Revised edition, p. 4, 2006. [0] YULI VASILIEV Beginning Database-Driven Application Development in Java EE: Using GlassFish. Apress, edition, p. 283 284, 2008. [] MIKE AULT, DONALD K. BURLESON, CLAUDIA FERNANDEZ, KEVIN KLEIN, BERT SCALZO - Database Benchmarking: Practical Methods for Oracle & SQL Server. Rampant Techpress, PAP/CDR edition, p. 9, 2007. [2] JONATHAN L. BRISBIN, OLIVER GIERKE, THOMAS RISBERG, MARK POLLACK, MICHAEL HUNGER Spring Data. O'Reilly Media, edition, p. 3, 202. 2