Otimizando sistemas intensivos em E/S através de programação concorrente
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...
Main Author: | ARAÚJO, Saulo Medeiros de |
---|---|
Other Authors: | MEIRA, Silvio Romero de Lemos |
Format: | masterThesis |
Language: | por |
Published: |
UFPE
2015
|
Subjects: | |
Online Access: |
https://repositorio.ufpe.br/handle/123456789/14229 |
Tags: |
Add Tag
No Tags, Be the first to tag this record!
|
Summary: |
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. |
---|