veja o trabalho

Propaganda
UNIVERSIDADE FEDERAL DE SANTA CATARINA
CENTRO TECNOLÓGICO
DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA
CURSO DE SISTEMAS DE INFORMAÇÃO
SimpleSQL: Uma Camada Relacional sobre o SimpleDB
Aluno: André Luiz Calil Roslindo
Orientador: Ronaldo dos Santos Mello
Florianópolis, SC
Maio de 2012
SUMÁRIO
LISTA DE TABELAS ........................................................................................................................................... 4
LISTA DE FIGURAS ........................................................................................................................................... 5
LISTA DE COMANDOS ...................................................................................................................................... 6
LISTA DE REDUÇÕES ....................................................................................................................................... 7
RESUMO ............................................................................................................................................................... 8
ABSTRACT ........................................................................................................................................................... 9
1
INTRODUÇÃO .......................................................................................................................................... 10
1.1
VISÃO GERAL .......................................................................................................................................... 10
1.2
OBJETIVOS ............................................................................................................................................... 12
1.2.1
Geral .............................................................................................................................................. 12
1.2.2
Específicos ..................................................................................................................................... 12
1.3
METODOLOGIA ........................................................................................................................................ 12
1.4
ESTRUTURA DO TRABALHO ..................................................................................................................... 13
2
COMPUTAÇÃO NAS NUVENS .............................................................................................................. 15
3
BANCOS DE DADOS EM NUVEM ........................................................................................................ 17
4
3.1
NOSQL .................................................................................................................................................... 19
3.2
AMAZON SIMPLEDB ................................................................................................................................ 20
SIMPLESQL .............................................................................................................................................. 25
4.1
PRÉ-REQUISITOS ...................................................................................................................................... 27
4.2
INTERFACE ............................................................................................................................................... 28
4.3
DECOMPOSIÇÃO DO COMANDO ................................................................................................................ 29
4.4
EXECUÇÃO E RETORNO ............................................................................................................................ 31
4.4.1
INSERT .......................................................................................................................................... 31
4.4.2
UPDATE e DELETE ..................................................................................................................... 32
4.4.3
SELECT ......................................................................................................................................... 32
2
5
AVALIAÇÃO EXPERIMENTAL ........................................................................................................... 34
5.1
CARGA ..................................................................................................................................................... 36
5.2
SELEÇÃO .................................................................................................................................................. 37
6
TRABALHOS RELACIONADOS ........................................................................................................... 42
7
CONCLUSÃO ............................................................................................................................................ 44
7.1
TRABALHOS FUTUROS .............................................................................................................................. 45
3
LISTA DE TABELAS
TABELA 1: REQUISITOS DE BANCOS DE DADOS NAS NUVENS [20]. ......................................................................... 18
TABELA 2: EQUIVALÊNCIA ENTRE CONCEITOS RELACIONAIS E O MODELO DO SIMPLEDB...................................... 26
TABELA 3: ATRIBUTOS GERADOS NO SIMPLESQL A PARTIR DO COMANDO 2. ....................................................... 27
TABELA 4: COMANDOS DML SUPORTADOS E SUAS EXPRESSÕES REGULARES........................................................ 30
TABELA 5: RESULTADO DAS OPERAÇÕES DE CARGA. ............................................................................................. 36
TABELA 6: CONSULTAS SIMPLES PARA AVALIAÇÃO. .............................................................................................. 38
TABELA 8: CONSULTA COMPLEXA NA FORMA ORIGINAL E NA SINTAXE DO SIMPLEDB .......................................... 40
TABELA 9: DURAÇÃO MÉDIA DA EXECUÇÃO DE CADA ETAPA DO PROCESSAMENTO DE UMA CONSULTA COMPLEXA
..................................................................................................................................................................... 41
4
LISTA DE FIGURAS
FIGURA 1: MODELO DE DADOS DO SIMPLEDB [5]. ................................................................................................. 21
FIGURA 2: ARQUITETURA DO SIMPLESQL. ............................................................................................................ 25
FIGURA 3: PERSISTÊNCIA NO MODELO DO SIMPLESQL. ......................................................................................... 27
FIGURA 3: DIAGRAMA DE CLASSES DO DOMÍNIO DO SIMPLESQL. .......................................................................... 31
FIGURA 4: ESQUEMA RELACIONAL USADO NOS EXPERIMENTOS. ............................................................................ 35
FIGURA 5: GRÁFICO COMPARATIVO PARA A MÉDIA DE TUPLAS CARREGADAS POR MINUTO. .................................. 37
5
LISTA DE COMANDOS
COMANDO 1:EXEMPLO DE UM COMANDO DE CRIAÇÃO DE ITEM NA API REST DO SIMPLEDB ATRAVÉS DE GET. 24
COMANDO 2: EXEMPLO DE UM COMANDO GENÉRICO DE INSERÇÃO. ...................................................................... 26
6
LISTA DE REDUÇÕES
SGBD
Sistema de Gerenciamento de Bancos de Dados
SQL
Structured Query Language
XML
Extended Markup Language
7
RESUMO
Este trabalho apresenta os principais conceitos de bancos de dados NoSQL,
seu vínculo com sistemas distribuídos e características de utilização. Estes conceitos
fundamentam o desenvolvimento do SimpleSQL, uma camada de acesso relacional
ao SimpleDB, um banco de dados NoSQL orientado a documentos e também
abordado no trabalho. O SimpleSQL provê uma interface SQL simplificada,
abstraindo qualquer conhecimento a respeito do método de acesso ao SimpleDB,
persistência de dados na nuvem e seu modelo de representação .
A avaliação experimental apresentada sustenta a viabilidade da camada e sua
evolução é sugerida nos trabalhos futuros.
Palavras chave: banco de dados em nuvem, NoSQL, SimpleDB, SimpleSQL.
8
ABSTRACT
This work presents the key concepts of NoSQL databases, its distributed
system characteristics and the scenarios for its application. This research serves as
basis for the development of SimpleSQL, a relational layer for accessing SimpleDB, a
NoSQL document database available at the cloud. SimpleSQL offers a simplified
SQL interface, covering any knowledge about the access layer to SimpleDB, data
persistence in the cloud and its data modeling.
Experimental evaluation shows the feasibility of our layer, and its evolution is
discussed in terms of future work.
9
1
INTRODUÇÃO
1.1
Visão Geral
O conceito de software as a service transformou-se de paradigma inovador a
modelo de negócio durante os últimos anos. Enquanto o modelo de software
licenciado e mantido pela companhia representava um alto custo em termos de
aquisição e manutenção, software mantido pelo provedor do serviço e faturado de
acordo com o uso (modelo pay as you go) [3], com garantias contratuais de
disponibilidade e privacidade, passou a se tornar atrativos e populares [7]. Este
paradigma se insere no que se denomina computação nas nuvens (cloud
computing), onde os serviços utilizados, como software e infraestrutura, são
remotos.
Seguindo esse paradigma, soluções de armazenamento e gerenciamento de
dados também passaram a ser oferecidos como serviço [14]. Este movimento
modificou a arquitetura dos sistemas gerenciadores de bancos de dados para
atribuir-lhes características de sistemas distribuídos, como alta disponibilidade e
tolerância a falhas. Neste processo, surgiram SGBDs com modelos de dados
divergentes do modelo relacional clássico [1]. Esses modelos são compatíveis com
os paradigmas de programação e aplicações web correntes, que lidam com alto
volume de dados e transações, mais orientados a objetos do que a relações.
Exemplos desses novos modelos são coleções chave-valor, documento ou
super-coluna [15]. Bancos de dados baseados nesses modelos são conhecidos
como NoSQL [19]. A principal diferença entre estes sistemas e SGBDs relacionais
está no aprimoramento à disponibilidade de dados em detrimento da consistência
[8], além do modelo de dados propriamente dito.
10
Bancos de dados NoSQL, que são intimamente relacionados com conceitos
de cloud computing, possuem também um forte relacionamento com as plataformas
atuais de desenvolvimento de sistemas. A modelagem da solução segundo um
paradigma orientado a objetos é mais facilmente persistida em um modelo de dados
NoSQL e sua interface de acesso simplificada, geralmente desenvolvida sobre
HTTP. Tal fato possibilita a sua utilização com menos esforço.
Como esses novos bancos de dados não são relacionais, não há suporte ao
padrão SQL, o que dificulta a migração e adoção de aplicações baseadas no modelo
relacional de representação e acesso aos dados. Para atender esta demanda, este
trabalho apresenta uma camada relacional, chamada SimpleSQL, para acesso ao
SimpleDB [4], solução NoSQL da Amazon para gerenciamento de dados na nuvem.
A escolha do SimpleDB foi motivada pela sua popularidade entre as ferramentas
NoSQL do mercado e pela sua simplicidade de configuração e uso. SimpleSQL
suporta uma versão restrita do SQL ISO/IEC, que permite inserção, atualização,
remoção e consulta aos dados. Ao utilizar o SimpleSQL, a aplicação cliente fica
isolada da interface de acesso ao SimpleDB, das suas operações e modelo de
dados, tendo, desta forma, uma interface relacional para acesso a dados na nuvem.
Além da transparência para manipulação e armazenamento dos dados, o
SimpleSQL suporta consultas com junções, recurso indisponível no SimpleDB e
raramente encontrado em soluções NoSQL. A camada é capaz de decompor uma
consulta que relaciona diversas tabelas com junções em um conjunto de consultas
individuais, para cada tabela relacionada, e combinar os dados obtidos para gerar
uma única tabela de retorno no formato desejado e com os parâmetros de junção
definidos.
11
1.2
Objetivos
1.2.1 Geral
Desenvolver uma camada de software para acesso relacional ao sistema
Amazon SimpleDB, abstraindo da aplicação cliente conhecimento sobre o modelo de
dados não relacional, interface de acesso e manipulação de dados.
1.2.2 Específicos
 Oferecer uma interface relacional, suportando uma versão simplificada do
SQL ISO/IEC, para acesso ao Amazon SimpleDB;
 Realizar experimentos que comprovem a viabilidade de utilização desta
camada relacional;
 Transformar resultados primitivos, com um conjunto de objetos não
relacionais, em uma tabela relacional no esquema definido pelo cliente;
 Prover um vínculo entre o modelo relacional de manipulação de dados e
bancos de dados NoSQL.
1.3
Metodologia
Para atender aos objetivos expostos, este trabalho segue as etapas abaixo
elencadas:
 Estudo sobre cloud computing e NoSQL;
 Estudo detalhado sobre o funcionamento e operação do Amazon
SimpleDB;
 Implementação do SimpleSQL;
12
 Apresentação de avaliações experimentais.
Na primeira etapa, é apresentado um breve histórico e os conceitos
atualmente aceitos sobre recursos computacionais oferecidos no modelo de serviço
e o surgimento de novos bancos de dados não relacionais.
A segunda etapa consiste em uma pesquisa sobre o repositório escolhido
para o trabalho, apresentando sua forma de operação, funcionamento e conceitos
necessários para seu entendimento.
A terceira etapa refere-se à implementação da ferramenta, que consiste na
decomposição de instruções SQL em um modelo genérico e sua tradução para a
interface do SimpleDB, tratamento dos dados e retorno.
Na quarta etapa são apresentadas as avaliações experimentais executadas
sobre o SimpleSQL, atestando seu funcionamento e desempenho.
1.4
Estrutura do Trabalho
Este trabalho está dividido da seguinte forma:
 Capítulo 1: Introdução – Apresentação geral do trabalho, com breve
contextualização sobre as tecnologias envolvidas, exploração do problema
chave e a solução proposta;
 Capítulo 2: Computação nas nuvens – Apresentação dos conceitos,
histórico e visão atual da computação nas nuvens;
 Capítulo 3: Bancos de dados nas nuvens – Motivação e problemática de
bancos de dados publicados na nuvem, apresentação das definições
existentes para bancos de dados NoSQL, classificações das principais
ferramentas e detalhamento sobre o Amazon SimpleDB;
13
 Capítulo 4: SimpleSQL – Explicação da ferramenta desenvolvida, com
detalhamento
sobre
o
funcionamento,
implementação
e
conceitos
utilizados;
 Capítulo 5: Avaliação experimental – Apresentação das baterias de
experimentos realizados com a ferramenta, com avaliação do desempenho
e comparações;
 Capítulo 6: Trabalhos Relacionados – Análise de alguns trabalhos com
temas correlatos;
 Capítulo 7: Conclusões – Este capítulo apresenta as conclusões extraídas
da pesquisa e desenvolvimento do SimpleSQL, bem como uma análise
sobre restrições de escopo e limitações do SimpleSQL, abrindo
possibilidades para trabalhos futuros.
14
2
COMPUTAÇÃO NAS NUVENS
Sendo um dos principais paradigmas de computação nos dias de hoje [15], a
computação nas nuvens representa o modelo de utilização de recursos
computacionais em que o usuário, abstraído de toda a complexidade de instalação,
manutenção e infraestrutura, possui acesso a um determinado recurso através de
uma simples interface. Por isolar o usuário de todas as questões internas do recurso
em questão e prover apenas uma interface externa para consumo, entende-se que
computação nas nuvens segue também o paradigma as a service.
Os recursos oferecidos podem ser de diferentes naturezas, que compõem os
modelos de serviços que podem ser encontrados [16]:
 Software as a Service (SaaS): softwares para fins específicos,
disponibilizados para o usuário final através de uma interface amigável,
geralmente Web. Serviços de webmail, como Gmail e Hotmail, são
exemplos deste modelo;
 Plataform as a Sevice (PaaS): sistemas operacionais, linguagens de
programação e ambientes de desenvolvimento e publicação de
aplicações. Assim como no modelo anterior, a infraestrutura subjacente
não é controlada pelo usuário. Google App Engine e Microsoft Azure
podem ser citados como PaaS;
 Infrastructure as a Service (IaaS): recursos computacionais de baixo
nível de abstração, como armazenamento, ativos de rede e poder de
processamento. Um exemplo deste modelo é o Amazon EC2.
15
É importante destacar que a nuvem não necessariamente refere-se à Internet.
Há diferentes modelos de implantação, quem podem variar entre nuvens públicas,
privadas ou híbridas [15].
Ainda assim, recursos no modelo de computação nas nuvens são sempre
alcançados através de uma rede de computadores. Desta forma, características
essenciais como alta disponibilidade e elasticidade [15] trazem para a computação
nas nuvens conceitos fundamentais de sistemas distribuídos [9].
Em termos comerciais, a computação nas nuvens proporcionou que a
cobrança fosse feita de acordo com o uso (pay as you go) [15], conveniência já
observada em outros serviços do cotidiano.
Considerando este paradigma de computação nas nuvens, o próximo capítulo
concentra-se em apresentar os novos desafios para bancos de dados neste
paradigma.
16
3
BANCOS DE DADOS EM NUVEM
A oferta de bancos de dados em nuvem possui várias vantagens para os
usuários, dentre elas:
 Previsibilidade e custos mais baixos, proporcional à qualidade do
serviço e cargas de trabalho reais;
 Complexidade técnica reduzida, graças a interfaces de acesso
unificado e a delegação de tuning e administração dos sistemas;
 Elasticidade e escalabilidade, proporcionando a percepção de recursos
quase infinitos.
Diversos sistemas e arquiteturas estão sendo desenvolvidos para suprir as
novas demandas de aplicações com diferentes requisitos de processamento e
armazenamento [2]. Estes novos sistemas tentam fornecer uma visão de
armazenamento e escalabilidade infinitos, mas tem que tratar o problema de
provisionar recursos. Este problema, que em SGBDs tradicionais consiste em
determinar quais recursos são alocados para um único banco de dados, no ambiente
em nuvem torna-se um problema de otimização, onde se tem uma grande
quantidade de usuários, múltiplos repositórios em nuvem e grandes centros de
dados. Isso fornece uma oportunidade sem precedentes para explorar a economia
em escala, balanceamento dinâmico de carga e gerenciamento de energia.
Esse aumento no número de abordagens disponíveis de repositórios em
nuvem [2] agrava o problema da escolha, implantação e soluções de administração
para a gestão de dados.
17
Com isso, os bancos de dados em nuvem estão sendo disponibilizados como
serviços, que encapsulam a complexidade do gerenciamento por meio de formas de
acesso simples e garantias de acordos de nível de serviço (SLAs).
A Tabela 1 apresenta os requisitos de um banco de dados oferecido como
serviço, sob as perspectivas do usuário, do provedor e da nuvem subjacente [20].
Estes parâmetros reforçam o diferente contexto em que os bancos de dados na
nuvem estão incluídos.
Tabela 1: Requisitos de bancos de dados nas nuvens [20].
Requisitos de usuário
API simples com pouca configuração e administração
Alto desempenho
Alta disponibilidade e confiança
Acesso fácil a características avançadas
Requisitos do Provedor
Atender o SLA do usuário
Limitar hardware e custo de energia
Limitar custo de administração
Requisitos extra de Nuvem Pública
Esquema de preço: barato, previsível e proporcional ao uso
Garantias de segurança e privacidade
Baixa latência
18
3.1
NoSQL
Este novo cenário de implantação de um banco de dados e os requisitos
demandados pelo mercado impulsionaram a criação de novas soluções de
armazenamento de dados. Como um dos principais objetivos era otimizar a
distribuição dos dados em diferentes máquinas [21], as ferramentas que surgiram
não seguiram o modelo relacional.
Esta tendência vem sendo chamada de NoSQL. Muito embora haja
discordância se o nome significa Not Only SQL [8] ou No SQL [19], concorda-se em
algumas características apresentadas nesta nova abordagem:
 Suporte à escalabilidade horizontal [8], isto é, aumento na capacidade
de processamento através da inclusão de novas máquinas à grade;
 Replicação e particionamento de dados entre diferentes servidores;
 Interface de acesso simples e com alto nível de abstração;
 Liberdade de esquema.
Nota-se, mais uma vez, similaridade com sistemas distribuídos. Para suportar
tais características e atender aos requisitos esperados do serviço, bancos de dados
NoSQL possuem menor controle transacional em termos de concorrência, como
proposto no teorema CAP (Consistency, Availability, and Partition-tolerance) [12], que
afirma que sistemas distribuídos, para que possam assegurar os benefícios do seu
modelo, devem escolher apenas duas características entre consistência, alta
disponibilidade e tolerância a falhas.
Neste
sentido,
as
características
ACID
(Atomicidade,
Consistência,
Isolamento e Durabilidade) dos bancos de dados relacionais são substituídas pelo
19
acrônimo BASE (Basically Available, Soft state, Eventually consistent) [8] [13],
destacando a disponibilidade em detrimento à consistência.
Em termos de modelo de dados, bancos de dados NoSQL são basicamente
agrupados em três categorias [8][19]:
 Chave-valor: sistemas de persistência baseados em pares chave-valor.
Esta estrutura oferece apenas um índice para acesso a dados, através
da sua chave. As interfaces de acesso costumam ter apenas os
métodos de inserção, remoção e consulta pelo índice. Em ambientes
distribuídos, é comum encontrar a denominação DHT (distributed
hashtable, tabela de espalhamento distribuída);
 Documento: persistência do objeto em um documento, que não deve
ser confundido com um arquivo em um sistema de arquivos. Estes
bancos
geralmente
suportam
múltiplos
índices
e
documentos
(estruturas) aninhados;
 Super coluna (wide column): também conhecido por família de colunas,
é uma persistência em tabela que suporta particionamento horizontal e
vertical. O particionamento respeita as chaves primárias, quando
horizontal, ou “grupo” de colunas, quando vertical, de forma a deixar
dados relacionados entre si em um mesmo nó.
Na próxima seção são apresentados detalhes do Amazon SimpleDB, um
banco de dados NoSQL que segue o modelo de documento [8].
3.2
Amazon SimpleDB
SimpleDB é um dos serviços que compõe o Amazon Web Services, uma suíte
da Amazon com ferramentas para diferentes aplicações, todas oferecidas na nuvem
20
na forma de serviços. O SimpleDB é um banco de dados NoSQL de rápida
contratação e configuração. Sendo oferecido exclusivamente como um serviço, não
há opção de licenciar para uso interno em uma corporação ou afins.
Durante a configuração do sistema, o usuário deve escolher uma região
geográfica onde seus dados serão mantidos. As opções são EUA (Virgína, Oregon
ou Norte da Califórnia), Irlanda, Cingapura, Tóquio e São Paulo. Esta seleção é
importante para manter os dados próximos da região de maior acesso e para
respeitar legislações locais quanto a armazenamento de dados. Há também variação
no preço do serviço entre as diferentes regiões.
Dentro da região selecionada há um conjunto de data centers onde os dados
serão
replicados.
Informações
detalhadas
sobre
esta
operação
não
são
disponibilizadas ao usuário, mas a Amazon garante que, em uma operação de
escrita, todas as cópias do dado são atualizadas [4].
O modelo de dados do SimpleDB é composto de domínios, itens, atributos e
valores, conforme apresentado na Figura 1.
Figura 1: Modelo de dados do SimpleDB [5].
Um domínio possui um nome e uma coleção de itens. Um item, por sua vez,
possui uma identificação única e um conjunto de atributos, que são pares chavevalor.
21
O domínio é a unidade de replicação e alocação de recursos. Um usuário
pode ter até 250 domínios, com no máximo 10 Gb de dados cada um. A distribuição
de dados entre domínios, conforme decisão do usuário, deve ser cuidadosamente
selecionada. Como o SimpleDB não suporta operações entre domínios, deve ficar a
cargo da aplicação cliente a junção dos dados. Da mesma forma, caso seja
necessário processar um item para decidir em qual domínio inseri-lo, o desempenho
da aplicação poderá ser comprometida.
Assim como ocorre com os domínios, o nome de um item deve identificá-lo
exclusivamente. Um atributo é um par chave-valor, e o SimpleDB suporta múltiplos
valores para uma mesma chave e não há limites para a quantidade de atributos que
um item pode possuir. Também não há restrição quando ao número de atributos dos
itens de um mesmo domínio. Seguindo a liberdade de esquema, itens em um
mesmo domínio podem ter atributos completamente diferentes entre si.
Como vimos, em termos de consistência o SimpleDB garante que uma
operação de escrita atualiza todas as cópias do item em questão, muito embora não
imediatamente após a conclusão do comando. Para leituras, entretanto, não há esta
garantia. Há duas opções de consistência para as operações de leitura: leituras
coerentes e leituras eventualmente coerentes [4]. A primeira opção aguarda a
finalização de qualquer operação de escrita nos itens em questão e os bloqueia
durante sua execução, garantindo que o valor retornado é o último valor atualizado.
Consequentemente, operações de leitura com esta configuração apresentam um
tempo de resposta maior e também podem impactar em outras operações sobre os
mesmos dados. A segunda opção, que é o comportamento padrão, retorna o valor
do nó que estiver mais disponível. Desta forma, pode não refletir uma última escrita
que, eventualmente, ainda não tenha sido replicada.
22
A interface de acesso ao SimpleDB é implementada em uma API REST [10].
Como é baseada em requisições HTTP, a maior parte das plataformas de
desenvolvimento possuem a capacidade de utilizá-la. Todas as operações de escrita,
leitura e até mesmo administração de domínios são realizadas por requisições HTTP
GET e POST. Ambos os verbos são suportados para todos os comandos da API,
mas o cliente deverá utilizar POST caso os atributos excedam o limite máximo de
parâmetros suportados em um GET.
Tanto a operação sendo executada quanto seus parâmetros são enviados
através da requisição HTTP. O Comando 1 ilustra uma operação PutAttributes, que é
utilizada na criação de um item (caso o nome não exista) ou para atualizar seu
conjunto de atributos.
Há de ser destacado que o nome da operação, PutAttributes, é determinado
pela API da Amazon, devidamente documentada pela companhia. Cada operação
suportada pela API possui uma ação (Action, no comando), e todos parâmetros da
operação são enviados através da requisição HTTP (POST ou GET, a critério do
cliente).
23
GET https://sdb.amazonaws.com/?Action=PutAttributes
&DomainName=dominio
&ItemName=nomeDoItem
&Attribute.1.Name=quantidade&Attribute.1.Value=20
&Attribute.2.Name=categoria&Attribute.2.Value=alimento
&AWSAccessKeyId=accessKey
&Version=2009-04-15
&Signature=assinatura
&SignatureVersion=2
&SignatureMethod=HmacSHA256
&Timestamp=2010-01-25T15%3A01%3A28-07%3A00 HTTP/1.1
Comando 1:Exemplo de um comando de criação de item na API REST do SimpleDB
através de GET.
Um comando PutAttributes é utilizado tanto para as operações SQL INSERT e
UPDATE. No exemplo, está sendo criado um item com dois atributos (quantidade e
categoria) e dois valores (20 e alimento, respectivamente).
24
4
SIMPLESQL
O SimpleSQL foi proposto neste trabalho para solucionar as barreiras de
adoção de um banco de dados NoSQL, tanto em termos de adaptação de sistemas
legados quanto de capacitação de profissionais. Como não há padrão de interface
de acesso entre os sistemas NoSQL, o SimpleSQL, na sua versão atual, suporta
unicamente o Amazon SimpleDB.
Desenvolvido como uma biblioteca de classes, o SimpleSQL serve como a
única camada de comunicação necessária entre a aplicação cliente e o SimpleDB.
Ele recebe instruções SQL em formato texto e trata da sua interpretação,
manipulação e execução no SimpleDB. Para consultas, o resultado é transformado
em uma tabela, construída com as colunas esperadas como resultado da consulta.
SimpleSQL foi
desenvolvido
utilizando
a
plataforma
Microsoft
.NET
Framework 3.5 e a linguagem de programação C# 3.0. Sua arquitetura é
apresentada na Figura 2, que ilustra as três etapas do processamento de um
comando, detalhadas nas seções a seguir.
Comandos
Interface de
acesso
Decomposição
Processamento
e retorno
Respostas tabulares
Figura 2: Arquitetura do SimpleSQL.
25
REST
Para que seja viável a tradução de comandos SQL em comandos SimpleDB,
utilizou-se o relacionamento entre conceitos dos modelos relacional e de documento
do SimpleDB apresentados na Tabela 1.
Tabela 2: Equivalência entre conceitos relacionais e o modelo do SimpleDB.
Relacional
Esquema
Tabela
Tupla
Atributo
Valor
Chave primária
SimpleDB
Domínio
Item
Chave de atributo
Valor de atributo
Nome do item
Muito embora o esquema e o domínio sejam conceitos equivalentes, o
SimpleSQL não suporta o nome do esquema como qualificador de uma tabela. Vale
observar que o SimpleDB não possui um conceito equivalente à tabela do modelo
relacional, que determina um tipo de objeto. Para contornar esta característica e
sustentar a execução dos comandos, o SimpleSQL persiste o nome da tabela como
um atributo do item.
Para ilustrar o processo de criação de um item, considere o Comando 2,
genérico para uma operação de inserção de dados a seguir.
INSERT INTO tabela (coluna1, coluna2)
VALUES (valor1, valor2)
Comando 2: Exemplo de um comando genérico de inserção.
Após a submissão deste comando ao SimpleSQL, o mesmo identifica qual o
domínio responsável pelos objetos do tipo tabela e gera um item com a coleção de
atributos, conforme apresentado na Tabela 3.
26
Tabela 3: Atributos gerados no SimpleSQL a partir do Comando 2.
Chave
coluna1
coluna2
SimpleSQL_TableName
Valor
valor1
valor2
tabela
Depois de traduzido o INSERT para a API do SimpleDB e executado o
comando, a tupla ficaria disposta em um esquema similar ao apresentado no Figura
3, em uma notação ilustrativa. Destaca-se que o nome do domínio é identificado a
partir de uma configuração enviada pelo usuário ao SimpleSQL (discutida na
próxima seção) e que o nome exclusivo do item é gerado automaticamente pelo
SimpleSQL
dominio:
{
1234567890:
{
coluna1: valor1;
coluna2: valor2;
SimpleSQL_TableName: tabela;
}
}
Figura 3: Persistência no modelo do SimpleSQL.
4.1
Pré-requisitos
Para que seja capaz de conectar-se ao SimpleDB e identificar os domínios, o
SimpleSQL deve receber, quando da sua instanciação, as seguintes informações:
 Access Key: chave de acesso do usuário ao SimpleDB. Esta
informação pode ser encontrada no portal da Amazon, após
autenticação;
27
 Secret Access Key: chave de acesso secreta. Junto da access key,
formam o par de autenticação e autorização do usuário. Também é
encontrada no portal da Amazon;
 Distribuição de domínios: caso o usuário tenha mais de um domínio,
ele deverá prover ao SimpleSQL um dicionário que tenha como chave
o nome do domínio e como valor a lista de tabelas daquele domínio.
Caso seja apenas um (1) domínio, é informado apenas o seu nome,
simplificando o processo.
Como um requisito não funcional, o ambiente de execução do SimpleSQL
deve ter acesso ao website da Amazon.
4.2
Interface
A interface de acesso do SimpleSQL é composta por dois métodos:
ExecuteQuery, que retorna um objeto do tipo DataTable (estrutura tabular), e
ExecuteNonQuery, que retorna um texto (string). Ambos recebem um comando SQL,
em formato texto, como único parâmetro.
Como apresentado anteriormente, SimpleSQL suporta as quarto operações
tradicionais de manipulação de dados. Contudo, como uma restrição de escopo,
cada operação possui limitações quanto à sintaxe suportada nesta primeira versão:
 SELECT: suporta consultas sobre uma única tabela ou conjunto de
tabelas relacionadas através de INNER JOIN. Casa haja junções, todos
os atributos do comando (no retorno, nas junções e nos critérios)
devem estar no formato tabela.atributo;
28
 UPDATE: suporta atualização de múltiplos itens, mas sem subcomandos. Múltiplos critérios de filtro são suportados, mas ao menos
um deve ser informado;
 INSERT: suporta inserção de um item por comando, sem subcomandos ou instruções do tipo INSERT SELECT;
 DELETE: suporta remoção de múltiplos itens. Múltiplos critérios de filtro
são suportados, mas ao menos um deve ser informado.
4.3
Decomposição do comando
O primeiro passo do processamento é decompor o comando SQL,
convertendo-o em um objeto do domínio do SimpleSQL. Para esta operação, cada
tipo de comando suportado pelo SimpleSQL possui uma expressão regular que
possui duas finalidades: (i) validar a sintaxe do comando e (ii) extrair os elementos
determinantes do comando. Tabela 4 apresenta os comandos e suas expressões
regulares.
Os elementos extraídos do comando são utilizados para instanciar o objeto
referente ao tipo de comando submetido no domínio do SimpleSQL. Por exemplo,
para um comando do tipo SELECT, o SimpleSQL extrairia os atributos esperados, a
tabela destino, a lista de junções e o conjunto de critérios.
29
Tabela 4: Comandos DML suportados e suas expressões regulares.
Operação
INSERT
UPDATE
Expressão regular
^(?:\s*(?i:INSERT
INTO)\s+)(?<table>[^\(]+)(?:\(\s*)(?<attributes>(?:\w+\s*)(?:\,\s*\w+\s*)*)(?:\)\
s+)(?:(?i:VALUES)\s+\(\s*)(?<values>(?:[^\,]+|[^\)])+\s*(?:\,\s*[^\)])*)(?:\))$
^\s*(?i:UPDATE)\s+(?<table>\S+\s+)(?i:SET)\s+(?<attributes>(\s*\S+\s*)\=(\s
*\S+\s*)(,(\s*\S+\s*)\=(\s*\S+\s*))*)+(?<condition>((?i:where)|(?i:and)|(?i:or))(\
s+\w+\s*)(=|<|>|<=|>=|<>|(?i:in)|(?i:not
in))((\s*\(?)(\s*\w+\s*)(,\s*\w+\s*)*(\s*\)?)))*$
^(?:\s*(?i:DELETE
DELETE
FROM)\s+)(?<table>\S+\s+)(?<condition>(?:(?i:where)|(?i:and)|(?i:or))(?:\s+.
+\s*)(?:=|<|>|<=|>=|<>|(?i:in)|(?i:not
in))(?:(?:\s*\(?)(?:\s*.+\s*)(?:,\s*.+\s*)*(?:\s*\)?)))*$
^\s*(?i:SELECT)\s+(?<attributes>(\S+\s*)(,\s*\w+\s*)*)\s+(?i:FROM)\s+(?<tab
SELECT
le>\s*\S+\s*)\s+(?<join>(?i:inner
join)\s+(?<toTable>\s*\S+\s*)\s+(?i:on)\s+(?<fromKey>\s*\S+\s*)\s*=\s*(?<to
Key>\s*\S+\s*)\s+)*(?<condition>((?i:where)|(?i:and)|(?i:or))(\s+.+\s*)(=|<|>|<
=|>=|<>|(?i:in)|(?i:not in))((\s*\(?)(\s*.+\s*)(,\s*.+\s*)*(\s*\)?)))*$
É importante observar, na Tabela 4, o uso expressivo de grupos de captura
nomeados, denotados pela sintaxe (?<nome do grupo>expressão). Grupos de
captura nomeados são uma técnica de expressões regulares para pesquisa e
obtenção de partes de um texto sem a necessidade de buscar manualmente os
padrões esperados [11]. Com esta técnica, é possível obter facilmente cada
elemento do comando, como a tabela destino, a lista de atributos ou critérios de
filtro.
Em termos de implementação, o SimpleSQL trabalha com uma classe
abstrata chamada Command, que é especializada nas classes Insert e na classe
abstrata ConditionedCommand, que é herdada e implementada pelas classes
Update, Select e Delete. A Figura 3 apresenta o diagrama de classes do domínio do
SimpleSQL.
30
Figura 4: Diagrama de classes do domínio do SimpleSQL.
4.4
Execução e retorno
Uma vez instanciado o objeto de domínio correspondente à operação
submetida, o SimpleSQL irá traduzi-lo para uma chamada de método na interface
REST do SimpleDB. Todos os comandos iniciam com a identificação do domínio do
SimpleDB a partir da tabela destino, extraída do comando.
DELETE e UPDATE retornam a quantidade de itens afetados. INSERT
retorna o resultado da operação (sucesso ou falha) e SELECT retorna os dados
obtidos em uma estrutura de tabela, utilizando a classe DataTable, nativa do .Net. A
seguir são apresentados maiores detalhes sobre o processamento de cada
comando.
4.4.1 INSERT
Uma tupla corresponde a um item no modelo do SimpleDB. Portanto, um
comando INSERT gera um item.
No início do processamento deste comando, o SimpleSQL verifica se a
quantidade de atributos corresponde à quantidade de valores fornecidos. Além de
31
transformar os atributos do comando em uma coleção de atributos no modelo do
SimpleDB, o SimpleSQL adiciona o atributo SimpleSQL_TableName, para manter o
nome da tabela daquele item no esquema relacional. O nome do item é preenchido
com uma instância de um global unique identifier (GUID) [14].
4.4.2 UPDATE e DELETE
A lista de filtros na parte de condição destes comandos é executada no
formato de um SELECT simples (uma consulta sem junções) para recuperar os itens
a serem atualizados ou removidos.
No caso de um DELETE, cada item obtido é removido em uma operação
isolada. Caso seja um UPDATE, a coleção de atributos de cada item obtido é iterada
na busca do atributo com o nome informado na lista atributos a serem atualizados.
Caso ele exista (como há liberdade de esquema, itens de um mesmo tipo podem
não ter os mesmos atributos), seu valor é atualizado.
4.4.3 SELECT
Ao receber um comando de consulta, o SimpleSQL extrai os atributos
esperados, a tabela destino, as junções e os critérios de filtro. Em havendo junções,
o comando é dividido em consultas simples. Isso significa que, através da notação
tabela.atributo, o SimpleSQL é capaz de identificar todos os componentes do
comando referentes a cada tabela envolvida.
Depois de receber o retorno de cada consulta individual, é criado um objeto
do tipo DataTable com o esquema esperado no resultado do comando principal e as
listas de itens obtidas são combinadas usando os atributos determinados nas
junções, similar a chaves estrangeiras em um esquema relacional, preenchendo a
32
tabela de retorno com os registros resultantes. Recomenda-se que cada tabela
envolvida em uma consulta tenha ao menos um critério de filtro, para evitar que o
SimpleSQL carregue todos os itens daquele tipo ao executar as consultas
individuais.
Para cada consulta submetida ao SimpleDB, o SimpleSQL inclui o nome da
tabela, persistido no atributo SimpleSQL_TableName, como filtro. Com isso, o
SimpleSQL é capaz de distinguir itens de diferentes tipos (tabelas) que tenham
atributos de mesmo nome.
O resultado de consultas submetidas ao SimpleDB é um conjunto de itens. O
SimpleSQL itera em todos os atributos de todos os itens recebidos, de forma a
recuperar seus valores e satisfazer os critérios do comando. Na formação da tabela
de retorno, cada item representa um registro da tabela. Caso os itens obtidos não
contenham o mesmo esquema e ocorra de um item não possuir um dos atributos
esperados como retorno, o valor daquele atributo será definido como nulo (Null).
Outro aspecto do SimpleDB é que a resposta de qualquer comando é limitada
a 1MB, por questões de escalabilidade e desempenho. Isso significa que nem todos
os itens resultantes de uma consulta são enviados na primeira resposta. O resultado
completo é dividido, e o SimpleDB envia um atributo chamado NextToken, para que
a consulta possa ser novamente submetida e o próximo lote de resposta seja
retornado. O SimpleSQL identifica este controle e possui métodos recursivos para
obter o resultado completo.
Um exemplo de decomposição de uma consulta complexa com junções é
apresentado na próxima seção, bem como os resultados obtidos na avaliação
experimental ao qual o SimpleSQL foi submetido.
33
5
AVALIAÇÃO EXPERIMENTAL
Experimentos foram realizados com o intuito de avaliar o impacto no
desempenho com a inclusão do SimpleSQL como uma camada de acesso relacional
sobre o SimpleDB. Estes experimentos foram baseados em uma amostra de dados
relacionais referentes ao sistema de vestibular da UFSC. A amostra consiste em seis
tabelas que representam candidatos, suas opções de curso, seus resultados e a
qual evento (vestibular anual) eles estão associados.
A Figura 4 apresenta o
esquema relacional da amostra, que conta com mais de 500 mil tuplas no total.
Os experimentos foram processados no seguinte ambiente computacional:
 Notebook Dell Vostro 3550;
 Processador Intel Core i5-2430M;
 Memória RAM 6GB DDR3 1066mHz;
 Conexão de internet 10Mbps ADSL2.
No que diz respeito às configurações do SimpleDB, todos os dados foram
persistidos em um único domínio, localizado na região Leste dos EUA. A carga dos
dados ao SimpleDB fez parte dos experimentos, como apresentado nas próximas
seções. Infelizmente, não é possível obter com a Amazon a quantidade de
servidores envolvidos no processamento das consultas, uma vez que esta
transparência é parte das características de um sistema distribuído.
Foram avaliados o desempenho de duas operações: INSERT e SELECT. A
primeira foi escolhida para avaliar o tempo necessário para a carga de um grande
volume de dados. A operação de consulta foi escolhida para avaliar o
processamento para um conjunto de comandos com diferentes complexidades.
Demais operações não foram diretamente avaliadas porque são derivadas do
34
processamento de uma consulta e não agregariam valor na análise do desempenho
do SimpleSQL.
Para cada operação, foi comparado o tempo utilizando o SimpleSQL e o
tempo gasto apenas com a utilização da API .NET do SimpleDB [6]. Os resultados
são detalhados nas seções a seguir.
Figura 5: Esquema relacional usado nos experimentos.
35
5.1
Carga
Operações INSERT foram executadas para carregar dados de duas tabelas,
candidato e opcaoCandidato, apresentadas na Figura 4 (canto superior esquerdo e
direito). A Tabela 5 apresenta o tempo de processamento com o SimpleSQL e
apenas com o SimpleDB, bem como a média de tuplas inseridas por minuto.
Destaca-se o incremento na quantidade de tuplas de cada tabela, para averiguar o
comportamento em escalabilidade da camada.
Tabela 5: Resultado das operações de carga.
Média
Tabela
# tuplas
Modo
Duração
(tuplas/min)
SimpleSQL
03:29:24
238,78
SimpleDB
03:19:24
250,75
SimpleSQL
18:49:10
221,40
SimpleDB
18:41:45
222,87
SimpleSQL
37:32:08
222,01
SimpleDB
37:15:24
223,67
SimpleSQL
07:37:08
218,75
SimpleDB
07:07:32
233,90
SimpleSQL
38:12:16
218,12
SimpleDB
36:53:40
225,87
SimpleSQL
77:15:48
215,71
SimpleDB
73:08:07
227,89
50.000
candidato
250.000
500.000
100.000
opcao
500.000
Candidato
1.000.000
36
A Figura 5 apresenta os dados acima em um gráfico comparativo, facilitando a
análise do desempenho do SimpleSQL em contraste com a carga direta ao
SimpleDB.
Figura 6: Gráfico comparativo para a média de tuplas carregadas por minuto.
Percebe-se um aumento do tempo de processamento do SimpleSQL, o que é
esperado. Contudo, a sobrecarga média foi de 6% e a diferença na média de tuplas
inseridas também foi pequena. Isso mostra que a utilização do SimpleSQL não
compromete o desempenho e escalabilidade do SimpleDB.
5.2
Seleção
SimpleSQL foi avaliado ainda com a execução de consultas simples
(consultas sem junções, executadas apenas em uma tabela) e também com uma
consulta complexa combinando quatro tabelas. A Tabela 6 apresenta as consultas
simples utilizadas para medição, na sintaxe SQL e na sintaxe do SimpleDB, bem
37
como o total de tuplas retornadas. A Tabela 7, por sua vez, apresenta o tempo médio
de processamento destas consultas.
Tabela 6: Consultas simples para avaliação.
Consulta
1
2
SimpleSQL
SimpleDB
SELECT nu_candidate,
SELECT nu_candidate,
cd_race FROM candidate WHERE en_city
like 'FLORIAN%'
cd_race FROM domain1
WHERE en_city like
'FLORIAN%'
SELECT nu_candidate,
cd_race FROM candidate WHERE cd_gender
= 'F'
SELECT nu_candidate,
cd_race FROM domain1
WHERE cd_gender =
'F'
34678
58410
SELECT * FROM do-
SELECT * FROM curse
3
# tuplas
WHERE cd_area = 1
and nm_curse like
'ENGE%' and
nu_places >= 100 AND
nu_applicants > 1000
main1 WHERE cd_area
= '1' and nm_curse
like 'ENGE%' and
nu_places >= '100'
AND nu_applicants >
'1000'
58
Na Tabela 6 podem ser observadas as diferenças entre uma consulta no
padrão SQL e a sintaxe própria utilizada pelo SimpleDB. Muito embora pareçam
similares, a sintaxe do SimpleDB sempre deve referenciar um domínio na cláusula
FROM, todos os valores devem estar entre aspas simples e não há suporte a grande
parte dos operadores de agrupamento. Por outro lado, a sintaxe do SimpleDB possui
funções próprias, como itemName(), para referenciar o nome do item.
38
Tabela 7: Média de duração de cada consulta simples.
Query
SimpleSQL
SimpleDB
1
00:02:22
00:01:34
2
00:03:09
00:02:33
3
00:00:03
00:00:02
A partir dos tempos acima, observa-se que a sobrecarga do SimpleSQL não
foi superior a 40% em todas as consultas. Considera-se este resultado aceitável
(inferior a um minuto no pior caso), dado o alto volume de dados carregados,
especialmente para a tabela Candidato, que possui mais de 160 mil tuplas.
Quanto a consultas complexas, como o SimpleDB não possui o conceito de
tipo de item (tabela) e não suporta o operador de junção, como comentado
anteriormente, ele oferece apenas a liberdade de buscar itens de um único domínio .
A análise e combinação de resultados ficam a cargo da aplicação cliente.
Mesmo assim, o SimpleSQL foi projetado para suportar consultas complexas.
As etapas de processamento envolvidas na execução deste tipo de consulta são as
que seguem:
 Divisão: o comando é dividido em consultas simples sem junções.
Cada atributo esperado e critério de filtro é aplicado à sua consulta
respectiva;
 Acesso: cada consulta simples é submetida ao SimpleDB;
 Transformação: cada resultado obtido é convertido para o esquema
relacional correspondente;
 Junção: as tabelas são combinadas de acordo com os critérios de
junção definidos no comando principal, formando a tabela de retorno.
39
Desta forma, considerando-se o fluxo acima no processamento nativo do
SimpleDB, a etapa de acesso é a única que possui equivalência. Os outros passos
são recursos do SimpleSQL para oferecer suporte ao processamento de consultas
complexas.
Com esta equivalência, para comparar o desempenho do SimpleSQL e do
SimpleDB, foi tomado o tempo de cada etapa de execução, sendo o passo de
acesso foi diretamente comparado ao SimpleDB. A Tabela 8 apresenta a consulta
complexa utilizada na medição, no formato original e nas consultas individuais na
sintaxe do SimpleDB.
Tabela 8: Consulta complexa na forma original e na sintaxe do SimpleDB
SimpleSQL
SimpleDB
SELECT
candidatoClassificado.nu_or
dem, candidato.en_cidade,
estabelecimentoEnsino.nm_es
tabelecimento,
evento.dc_evento FROM
candidato INNER JOIN
estabelecimentoEnsino ON
candidato.cd_estabeleciment
o =
estabelecimentoEnsino.cd_es
tabelecimento INNER JOIN
candidatoClassificado ON
candidato.nu_candidato =
candidatoClassificado.nu_ca
ndidato INNER JOIN evento
ON
candidatoClassificado.cd_ev
ento = evento.cd_evento
WHERE evento.cd_evento = 25
AND
estabelecimentoEnsino.cd_ev
ento = 25 AND
candidatoClassificado.cd_ev
ento = 25 AND
candidato.cd_evento = 25
40
SELECT nu_ordem FROM domain1 WHERE cd_evento =
‘25’
SELECT en_cidade FROM domain1 WHERE cd_evento =
‘25’
SELECT
nm_estabelecimentoEnsino
FROM domain1 WHERE
cd_evento = ‘25’
SELECT dc_evento FROM domain1 WHERE cd_evento =
‘25’
A Tabela 9 apresenta os tempos de cada etapa. Para o SimpleDB, foi
realizada a somatória do tempo de processamento de cada consulta individual. De
acordo com estes dados, nota-se que a etapa mais custosa em todo o processo é o
acesso, mas que apresenta pequena diferença entre o SimpleSQL e o SimpleDB. As
demais etapas, necessárias para suportar a funcionalidade adicional do SimpleSQL,
demandam um pequeno tempo de processamento, se comparado ao benefício
oferecido.
Tabela 9: Duração média da execução de cada etapa do processamento de uma
consulta complexa
Etapa
SimpleSQL
Divisão
00:00:03
Acesso
00:18:17
Transformação
00:02:23
Junção
00:04:08
41
SimpleDB
00:18:05
6
TRABALHOS RELACIONADOS
Há uma variedade de trabalhos que discutem a disponibilização de bancos de
dados relacionais na nuvem. (Rys, 2011) propõe que SGBDs relacionais estejam
divididos em nodos e cada nodo deve estar pareado, para garantir disponibilidade
das informações daquele nodo. Um protocolo de consenso trata da distribuição de
dados entre a grade [22].
(Curino et. al. 2011), por sua vez, concentra-se no processamento paralelo de
uma mesma consulta em diversos nodos [16], onde a problemática está na
consolidação dos resultados, com um escopo similar ao algoritmo de MapReduce
[23].
(Campbell et. al., 2010) descreve uma implementação sobre o Microsoft SQL
Server que funciona sobre um ambiente distribuído e, com o conceito de “domínios
de consistência”, garante alta disponibilidade sem abrir mão das propriedades ACID
dentro dos domínios especificados [17].
Como alternativa ao SimpleDB, a Amazon também oferece o Relational
Database Service (RDS) [18], que oferece uma instância de MySQL, Oracle ou
Microsoft SQL Server para acesso através da nuvem. Em sendo um SGBD
relacional, há total suporte ao padrão SQL, porém as características de
escalabilidade e alta disponibilidade estão restritas à instância, que possui limitações
de tamanho.
(Arnaut et. al., 2011) e (Egger, 2009) possuem trabalhos bastante
relacionados ao SimpleSQL. Ambos utilizaram o MySQL como SGBD e adaptam sua
persistência para o Scalaris [24] e Cloudy [25], respectivamente. Ainda assim, há
uma leve diferença no foco dos trabalhos. Ao aplicarem a interface de um SGBD já
42
existente, toda a parte de tratamento dos comandos é abstraída, sendo substituída
por técnicas eficientes de armazenamento e recuperação da informação nos
repositórios escolhidos. O modelo de dados dos repositórios também varia, sendo o
Scalaris um repositório chave-valor e o Cloudy uma implementação do Casandra,
que segue o modelo de super-coluna.
Destaca-se, ainda assim, a estratégia de utilizar como interface de acesso um
SGBD relacional de mercado. Esta adaptação corrobora da ideia de facilitar a
migração de aplicações para repositórios NoSQL, que é um dos objetivos do
SimpleSQL. Da mesma forma, o trabalho desenvolvido para interpretação dos
comandos seria delegado ao SGBD.
Contudo, muito embora os repositórios utilizados tenham sido desenvolvidos
para ambientes distribuídos, eles não são voltados para a nuvem pública, que é uma
das principais características do SimpleDB. Desta forma, o usuário seria responsável
também pela sua implantação e administração.
Portanto, preserva-se ainda o pioneirismo do SimpleSQL neste sentido. Ainda
assim, é interessante o plano de desenvolver uma camada de persistência do
MysQL para o Amazon SimpleDB, como uma das possíveis evoluções do
SimpleSQL.
43
7
CONCLUSÃO
A oferta de SGBDs como serviço traz vários benefícios, como redução de
custos e menos preocupação com manutenção e administração do banco de dados.
Contudo, a maior parte das aplicações contemporâneas utilizam dados relacionais,
sendo necessário prover um vínculo entre o tradicional modelo relacional para os
dados armazenados em nuvem, que seguem outros modelos.
Este trabalho contribui com esta problemática ao propor o SimpleSQL, uma
solução específica para mapeamento relacional e interface de acesso ao SimpleDB,
um banco de dados NoSQL orientado a documentos. Apesar de ser voltada para um
sbanco de dados NoSQL em especial, esta solução pretende evoluir para uma
proposta genérica de mapeamento entre o modelo relacional e o modelo orientado a
documentos, que é um tema de futuras pesquisas. A intenção é propor uma interface
e um modelo de representação de dados padrão, permitindo ao SimpleSQL suportar
demais bases NoSQL e prover liberdade de escolha ao usuário.
Como apresentado no Capítulo 5, a avaliação experimental mostra que o
SimpleSQL adiciona uma pequena sobrecarga de processamento se comparado à
utilização direta do SimpleDB, mas essa diferença não representa um obstáculo para
sua adoção. Para operações de carga, a sobrecarga média foi de 6%. Para
consultas simples, foi observada uma adição de 40% no tempo total de
processamento, o que é esperado, considerando-se a conversão dos modelos
executada pelo SimpleSQL. Estes resultados mostram que o SimpleSQL não é
proibitivo em termos de desempenho. Uma sobrecarga maior foi observada com
consultas complexas, o que atesta o processamento adicional do SimpleSQL para
44
suportar operações não oferecidas pelo SimpleDB. Ainda assim, observou-se
otimizações que podem ser realizadas no processamento do SimpleSQL.
Como apresentado no capítulo de Trabalhos Futuros, planeja-se continuar o
desenvolvimento do SimpleSQL e a pesquisa no tema de bancos de dados NoSQL.
7.1
Trabalhos futuros
Muito embora a versão atual do SimpleSQL esteja funcional e devidamente
evidenciada na avaliação experimental, ela ainda carece de extensões e algumas
melhorias. Algumas restrições de escopo e limitações podem ser entendidas como
itens para trabalhos futuros:
 Suporte ao SQL ISO/IEC: as operações atualmente suportadas podem
ser aprimoradas para aceitar mais recursos da linguagem, como
operadores de agrupamento para consultas;
 Origem dos dados: a versão atual do SimpleSQL suporta operações
apenas sobre dados que tenham sido inseridos através dele, em
virtude da dependência do atributo SimpleSQL_TableName. Pode ser
elaborada uma ferramenta que opere sobre um volume de dados
existente, preparando-o para o SimpleSQL;
 Suporte a operações DDL: o SimpleSQL não suporta operações SQL
DDL visto que não há como definir esquemas no repositório NoSQL.
Contudo, a principal restrição do SimpleSQL é o suporte exclusivo ao
SimpleDB. Isto ocorre porque não há um padrão na interface de acesso e
representação dos dados entre os diferentes bancos de dados NoSQL.
Estes obstáculos e restrições são potenciais temas para trabalhos futuros, em
nível de graduação e pós.
45
BIBLIOGRAFIA
[1]
Abadi, D. J.: Data management in the cloud: Limitations and opportunities. IEEE
Data Eng. Bull., 32:3-12 (2009).
[2]
Abouzeid, A., Bajda-Pawlikowski, K., Abadi, D. J., Rasin, A., and Silberschatz,
A.: Hadoopdb: An architectural hybrid of Map-Reduce and DBMS technologies
for analytical workloads. PVLDB, 2(1):922-933 (2009).
[3]
Armbrust, M., Fox, A., Griffith, R., Joseph, A. D., Katz, R., Konwinski, A., Lee,
G., Patterson, D., Rabkin, A., Stoica, I., Zaharia, M.: Above the Clouds: A Berkeley View of Cloud Computing. UC Berkeley Reliable Adaptive Distributed
Systems Laboratory (2009).
[4]
Amazon SimpleDB, http://aws.amazon.com/simpledb/. Acesso em 01 de junho
de 2012.
[5]
Amazon
SimpleDB,
Getting
Start
Guide,
http://docs.amazonwebservices.com/AmazonSimpleDB/latest/GettingStartedGui
de/Welcome.html?r=1. Acesso em 03 de maio de 2012
[6]
Amazon Web Services .NET SDK,
http://aws.amazon.com/pt/sdkfornet/.
Acesso em 15 de dezembro de 2011.
[7]
Buyya, R., Yeo, C. S., Venugopal, S., Broberg, J., and Brandic, I.: Cloud computing and emerging it platforms: Vision, hype, and reality for delivering computing
as the 5th utility. Future Gener. Comput. Syst., 25(6):599–616 (2009).
[8]
Cattell, R.: Scalable SQL and NoSQL Data Stores. SIGMOD (2010).
[9]
G. Coulouris, J. Dollimore, T. Kindberg: Distributed Systems: Concepts and Design, 5ª edition. Addison-Wesley, (2011).
[10] Fielding, R. T.: Architectural Styles and the Design of Network-based Software
Architectures. University of California (2000).
46
[11] Friedl, J. E. F.: Mastering Regular Expressions, 2ª edition. O’Reilly (2002).
[12] Gilbert, S., Lynch, N.: Brewer’s conjecture and the feasibility of consistent, available, and partition-tolerant Web services. ACM SIGACT News 33 (2002).
[13] Pritchett, D.: BASE, an ACID alternative. ACM Queue (2008).
[14] MSDN
Library,
Guid
Structure,
http://msdn.microsoft.com/en-
us/library/system.guid%28v=vs.90%29.aspx. Acesso em 03 de maio de 2012
[15] Sousa, F. R. C., Moreira, L. O., de Macêdo, J. A. F., Javam, C. M.:
Gerenciamento de Dados em Nuvem: Conceitos, Sistemas e Desafios. Em:
Tópicos em sistemas colaborativos, interativos, multimídia, web e bancos de
dados. Mini-cursos do XXV Simpósio Brasileiro de Banco de Dados (2010).
[16] Carlo Curino, Evan P. C. Jones, Raluca A. Popa, Nirmesh Malviya, Eugene Wu,
Samuel Madden, Hari Balakrishnan, Nickolai Zeldovich: Relational Cloud: a Database Service for the cloud. CIDR 2011:235-240 (2011).
[17] Campbell, D. G., Kakivaya, G., Ellis, N (2010). Extreme Scale with Full SQL
Language Support in Microsoft SQL Azure.
[18] Amazon Relational Database Service, http://aws.amazon.com/pt/rds/. Acesso
em 18 de maio de 2012.
[19] Fowler,
Martin.
NosqlDefinition,
http://martinfowler.com/bliki/NosqlDefinition.html. Acesso em 18 de maio de
2012.
[20] Curino, C., Jones, E., Zhang, Y., Wu, E., and Madden, S. (2010). Relational
cloud: The case for a database service. Technical report, MIT-CSAIL-TR-2010014. Computer Science and Artificial Intelligence Laboratory, MIT, USA.
47
[21] Fowler,
Martin.
Aggregate
Oriented
Database.
http://martinfowler.com/bliki/AggregateOrientedDatabase.html. Acesso em 18
de maio de 2012.
[22] Rys, Michael. Scalable SQL. Communications of the ACM 54, 6 (2011), 48-53.
[23] Foto N. Afrati, Anish Das Sarma, Semih Salihoglu, Jeffrey D. Ullman: Vision Paper: Towards an Understanding of the Limits of Map-Reduce Computation
CoRR abs/1204.1754 (2012).
[24] D. E. M. Arnaut, R. Schroeder, and C. S. Hara. PHOENIX - UM COMPONENTE
RELACIONAL PARA PLATAFORMAS DE ARMAZENAMENTO EM NUVEM. 4º
IEEE CLOUD, (684-691), 2011.
[25] Egger, D.: SQL in the Cloud. Departamento de Ciências da Computação, ETH
Zurique, 2009.
48
Download