dc.contributorMEIRA, Silvio Romero de Lemos
dc.contributorhttp://lattes.cnpq.br/2753513833413583
dc.contributorhttp://lattes.cnpq.br/4973731190814126
dc.creatorARAÚJO, Saulo Medeiros de
dc.date2015-10-21T17:31:57Z
dc.date2015-10-21T17:31:57Z
dc.date2015-04-06
dc.identifierhttps://repositorio.ufpe.br/handle/123456789/14229
dc.descriptionORMs (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.
dc.descriptionORMs (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.
dc.formatapplication/pdf
dc.languagepor
dc.publisherUFPE
dc.publisherBrasil
dc.publisherPrograma de Pos Graduacao em Administracao
dc.rightsAttribution-NonCommercial-NoDerivs 3.0 Brazil
dc.rightshttp://creativecommons.org/licenses/by-nc-nd/3.0/br/
dc.subjectEngenharia de software
dc.subjectProgramação paralela (Computação)
dc.subjectProgramação orientada a objetos (Computação)
dc.subjectBanco de dados relacionados
dc.titleOtimizando sistemas intensivos em E/S através de programação concorrente
dc.typemasterThesis


Este ítem pertenece a la siguiente institución