Return to search

Otimizando sistemas intensivos em E/S através de programação concorrente

Submitted by Isaac Francisco de Souza Dias (isaac.souzadias@ufpe.br) on 2015-10-21T17:31:57Z
No. of bitstreams: 2
license_rdf: 1232 bytes, checksum: 66e71c371cc565284e70f40736c94386 (MD5)
Dissertação de Mestrado.pdf: 1668983 bytes, checksum: 98951747828368f07a28ba2b442a63ef (MD5) / Made available in DSpace on 2015-10-21T17:31:57Z (GMT). No. of bitstreams: 2
license_rdf: 1232 bytes, checksum: 66e71c371cc565284e70f40736c94386 (MD5)
Dissertação de Mestrado.pdf: 1668983 bytes, checksum: 98951747828368f07a28ba2b442a63ef (MD5)
Previous issue date: 2015-04-06 / ORMs (Object-Relational Mappers) são bastante populares porque eles reduzem o esforço
de desenvolvimento de camadas de acesso a dados ao permitir, entre outras coisas, que
sistemas manipulem objetos transientes e persistentes de maneira similar. Em particular,
ORMs permitem que sistemas naveguem por objetos de ambos os tipos exatamente
da mesma maneira. Infelizmente, entretanto, navegar por objetos persistentes é muito
mais lento do que navegar por objetos transientes. Para atenuar este problema, ORMs
pré-carregam objetos executando consultas SQL (Structured Query Language) que, no
lugar de carregar os atributos de um único objeto, tal como ocorre quando objetos são
carregados sob demanda, carregam os atributos de vários objetos. Em muitos casos, estas
consultas podem ser executadas concorrentemente. Entretanto, a maioria dos ORMs
executa consultas apenas sequencialmente.
Esta pesquisa visa aumentar o desempenho de sistemas baseados em ORMs. Para tanto,
ela define uma DSL (Domain-Specific Language) de especificação de navegações por objetos
chamada Litoral. Também integra esta pesquisa o projeto e a implementação de um
interpretador de especificações Litoral. O interpretador navega por objetos transientes
(aqueles que existem apenas na memória primária) e persistentes (aqueles que armazenados
em um banco de dados relacional) e pré-carrega os do segundo tipo executando consultas
sequencialmente ou concorrentemente.
A estratégia desta pesquisa foi avaliada com os benchmarks sintéticos Emeio e OO7,
desenvolvidos, respectivamente, no contexto desta pesquisa e por terceiros. No primeiro,
pré-carregar objetos executando consultas concorrentemente aumentou a velocidade de
execução em até 323,6%. No segundo, o aumento foi de até 245,7%. Os benchmarks
também foram implementados com os ORMs Hibernate e EcliseLink JPA, os quais
aderem à especificação JPA (Java Persistence Architecture). O primeiro foi escolhido
por ser bastante popular. O segundo foi escolhido por ser a implementação de referência
desta especificação. As implementações baseadas no Hibernate e EclipseLink JPA foram
significativamente otimizadas. Entretanto, em todos os cenários de Emeio e OO7 que
oferecem oportunidades para pré-carregar objetos executando consultas concorrentemente,
o desempenho delas foi inferior ao da implementação baseada no interpretador de Litoral. / ORMs (Object-Relational Mappers) are quite popular because they reduce the effort of
developing data access layers by allowing, among other things, systems manipulate transient
and persistent objects in similar ways. In particular, ORMs allow systems navigate through
objects of both types exactly the same way. Unfortunately, however, navigating through
persistent objects is much slower than navigating through transient ones. To alleviate this
problem, ORMs prefetch objects executing SQL (Structured Query Language) queries
that fetch the attributes of multiple objects. In many cases, these queries can be executed
concurrently. However, most ORMs execute queries sequentially only.
In this research, we aim to increase the performance of ORM based systems. To this
end, we define a DSL (Domain-Specific Language) for specifying navigations through
objects called Litoral. We also implement a Litoral interpreter that navigates through
transient (objects that exist only in the primary memory) and persistent objects (objects
stored in a relational database) and prefetches the second type with queries executed
sequentially or concurrently.
We evaluated our strategy with the synthetic benchmarks Emeio and OO7. In the first
one, prefetching objects with queries concurrently executed increased execution speed up
to 323.6%. In the second one, the increase was up to 245.7%. We also implemented the
benchmarks with the Hibernate and EcliseLink JPA ORMs, which adhere to the JPA (Java
Persistence Architecture) specification. We chose the first one because it is quite popular
and the second one because it is the reference implementation of JPA. We optimized
the implementations based on Hibernate and EclipseLink JPA extensively. However, in
all scenarios of Emeio and OO7 that offer opportunities for prefetching objects with
queries concurrently executed, their performance was inferior to the performance of the
implementations based on the Litoral interpreter.

Identiferoai:union.ndltd.org:IBICT/oai:repositorio.ufpe.br:123456789/14229
Date06 April 2015
CreatorsARAÚJO, Saulo Medeiros de
Contributorshttp://lattes.cnpq.br/4973731190814126, MEIRA, Silvio Romero de Lemos
PublisherPrograma de Pos Graduacao em Administracao, UFPE, Brasil
Source SetsIBICT Brazilian ETDs
LanguagePortuguese
Detected LanguageEnglish
Typeinfo:eu-repo/semantics/publishedVersion, info:eu-repo/semantics/masterThesis
Sourcereponame:Repositório Institucional da UFPE, instname:Universidade Federal de Pernambuco, instacron:UFPE
RightsAttribution-NonCommercial-NoDerivs 3.0 Brazil, http://creativecommons.org/licenses/by-nc-nd/3.0/br/, info:eu-repo/semantics/openAccess

Page generated in 0.0019 seconds