desenvolvimento de aplicaco es
Antonio Alves Lopes Filho1 , Adriana M. R. Nascimento1 ,
Elidiane Martins Freitas1 , Francisco Edvan Chaves1 ,
Hitalo Joserfeson Batista Nascimento 1
1
Ciencia da Computaca o - Faculdade Integrada da Grande Fortaleza (FGF)
Av. Porto Velho, 410 60.510-040 Fortaleza CE Brasil
{tonyalveslopes@gmail.com}, {adri,edvan,hitalo,elidiane}@fgf.edu.br
Resumo. A Internet apos a WEB 2.0 vem gerando uma quantidade expressiva
de dados e com isso vem a necessidade de agilizar o gerenciamento desses da-
dos, bem como seu armazenamento de forma que fiquem disponveis sempre que
precisar. NoSQL (Not Only SQL) vem com a missao de resolver esse gargalo de
forma eficaz, com isso o presente artigo visa apresentar os conceitos que envol-
vem o termo NoSQL, a sua necessidade de implementaca o para com a escalabi-
lidade e performance na WEB 2.0, relata comparaco es com o modelo relacional
nas propriedades ACID e BASE e a sua relaca o com o Teorema CAP. No estudo
de caso e mostrada uma implementaca o utilizando o MongoDB, demonstrando
a abordagem de desenvolvimento junto com o seu driver e a tecnologia Java.
Por fim, ele explana os resultados do estudo de caso e sugere como trabalhos
futuros a implementaca o do algoritmo MapReduce.
Palavras-chave: nosql, sgbd, sql.
Abstract. The Internet after Web 2.0 has generated a significant amount of data
and with that comes the need to streamline the management of these data and
their storage so they are available whenever you need. NoSQL ( it Not Only
SQL) comes with the mission to solve this bottleneck effectively, thus this article
is to present the concepts involving the term NoSQL, their need for implemen-
tation towards the scalability and performance on the Web 2.0 reports compari-
sons with the relational model in ACID and BASE and its relationship with the
CAP theorem. In the case study is shown an implementation using MongoDB,
demonstrating the development approach together with its it driver and Java
technology. Finally, he explains the results of the case study and suggests future
work as the implementation of the MapReduce algorithm.
Keywords: nosql, sgbd, sql.
1. Introduca o
Durante muito tempo os Sistemas Gerenciadores de Banco de Dados (SGBD) relacio-
nais dominaram com eficiencia a forma como as pessoas armazenavam e buscavam seus
dados, de forma segura e consistente. Porem, com o advento da WEB 2.0 e sua gama
incontavel de dados manipulaveis, gerou-se um problema para abordagem antes domi-
nante, o armazenamento e a escalabilidade desses dados. Atualmente, os grandes sites
coletam informaco es acerca de seus usuarios, que hoje passam de bilhoes (caso do Go-
ogle e Facebook)[Rubinstein and Good 2013], e cada usuario tem diversas nuances que
devem ser analisadas para melhor gerenciamento dessas informaco es, e por conseguinte
gerar receita para essas empresas atraves de propagandas e desenvolvimento de platafor-
mas especficas para utilizaca o em massa.
Diante deste novo panorama, termos como escalabilidade e performance vieram
a` tona com mais forca do que nunca. Os grandes SGBDs nao possuam suporte ade-
quado a` s novas exigencias, como escalonamento horizontal e velocidade de manipulaca o
de uma grande quantidade de dados. Com isso, vem a ideia do NoSQL (Not Only
SQL), onde se torna mais facil o escalonamento horizontal e a grande capacidade para
armazenamento[Leavitt 2010].
Ao pesquisar trabalhos relacionados com o assunto aqui enfatizado foram
identificados artigos que abordam as diversas nuances do modelo nao relacio-
nal, dentre estes podemos citar: NoSQL no desenvolvimento de aplicaco es Web
colaborativas[Loscio et al. 2011]; o artigo Bancos de Dados NoSQL x SGBDs Rela-
cionais: Analise Comparativa[Brito 2010]; foi utilizado tambem o minicurso Bancos
de Dados NoSQL: Conceitos, Ferramentas, Linguagens e Estudos de Casos no Con-
texto de Big Data[Vieira et al. 2012]; e o livro NoSQL: Um Guia Conciso para o
Mundo Emergente da Persistencia Poliglota[Sadalage and Fowler 2012] e NoSQL para
leigos[Fowler 2015].
Este artigo tem como objetivo mostrar os conceitos norteados em torno do
NoSQL, suas caractersticas, as diferencas com o modelo relacional, os seus tipos de ar-
quitetura, e por fim demonstrar uma aplicaca o usando MongoDB com o uso da sua API de
manipulaca o. Ele esta dividido da seguinte forma: na seca o 2 e dado um breve compara-
tivo da tecnologia nao relacional com a relacional, e explicado como funciona o Teorema
CAP e o seu surgimento, e mostrado o conceito de escalonamento horizontal e vertical
e os tipos de particionamento em rede, tambem e mostrado o historico do termo NoSQL
e como foi dada a sua influencia de desenvolvimento, no final da seca o e explanado os
principais tipos de bancos de dados nao relacionais e uma pequena comparaca o com um
banco de dados relacional, na seca o 3 e descrita a metodologia utilizada para desenvolver
o trabalho, na seca o 4 e feita uma analise dos dados utilizando uma implementaca o como
estudo de caso com MongoDB e Java, e finalmente na seca o 5 temos as consideraco es
finais sugerindo trabalhos futuros.
2. Referencial Teorico
Neste captulo apresentamos paralelos entre o modelo atual de gerenciamento de dados, os
modelos relacionais, com o paradigma de dados distribudos, os ditos NoSQL. E definido
alguns conceitos primordiais na elaboraca o do modelo NoSQL atraves do Teorema CAP.
Tambem apresentamos as caractersticas dos banco de dados nao relacionais, junto com os
metodos de implementaca o e distribuica o em rede. Sao apresentados os quatro principais
tipos de banco de dados nao relacionais conhecidos atualmente, representado por cada
um de seus representantes no mercado. E por fim e apresentado algumas caractersticas
do MongoDB, objeto de caso de estudo deste artigo.
No incio dos anos 2000, quando o mundo foi imerso pela crescente utilizaca o da WEB
e os domnios .com, enquanto ainda surgiam questionamentos quanto ao funciona-
mento em si e o futuro economico desse novo paradigma, houve, tambem, uma crescente
preocupaca o com a forma que essa grande e frequente quantidade de dados seria utilizada,
armazenada e processada.
Seguir com este aumento de dados exige tecnicas de expansao de hardware, que
hoje podem ser[Sadalage and Fowler 2012]: escalonamento vertical (scale-up) ou escalo-
namento horizontal (scale-out). Escalonamento vertical diz respeito a adquirir maquinas
maiores, mais processadores, mais memoria primaria, aumento da memoria secundaria,
ou seja, aumentar os componentes de determinado servidor que atende as requisico es
para determinada tarefa, no entanto, isso tende a se tornar extremamente caro com o
passar do tempo, e uma hora ira esbarrar na propria limitaca o fsica da maquina, visto
que ha um limite para este tipo de crescimento. Ja o escalonamento horizontal visa au-
mentar o numero de servidores e dividir a carga entre eles formando um cluster. Esses
servidores nao precisam ser maquinas super potentes, e sim maquinas de menor custo
(commodity server), o que deixaria o projeto bem mais barato do que o apresentado an-
teriormente. Outra caracterstica positiva dessa abordagem e a resiliencia, onde e normal
que maquinas apresentem problemas de funcionamento, no entanto, caso uma apresente
neste modelo, nao interferira no trabalho das outras (exceco es se for um modelo master-
slave e o que falhar for o master), atribuindo, assim, um aspecto de alta confiabilidade.
Na Tabela 1 [Appuswamy et al. 2013] e apresentado uma analise comparativa dessas duas
abordagens.
Ao passo que a maioria das empresas percebe que a segunda alternativa e a mais
viavel, surge um novo problema: bancos de dados relacionais nao foram projetados para
serem executados em clusters [Sadalage and Fowler 2012]. Os bancos relacionais atuais
baseiam-se no conceito de um subsistema de disco compartilhado. Eles utilizam um
sistema que reconhece o ambiente de cluster, porem ha uma rotina de replicaca o para
um disco de alta disponibilidade. Sendo assim, mesmo balanceando as cargas, ainda
necessita de um ponto u nico, o que pode gerar falhas, caso ocorra algo com este ponto,
todo o sistema fica comprometido.
Todo esse gargalo com relaca o aos clusters e aos bancos de dados relacionais,
Pros Contras
- Menor consumo de energia do que - Alto custo a medida que a neces-
Escalonamento Vertical
comparado a` multiplos servidores. sidade aumenta.
- Maior risco de falha por estar lo-
- Manutenca o de refrigeraca o.
calizado em um u nico ponto.
- Custo com licencas de softwares
- Limite fsico para crescimento.
diminudas.
- Mais barato do que um u nico ser- - Pode ser usado mais licencas de
- Escalonamento Horizontal
vidor robusto. softwares.
- Lida bem com falhas no nos. (To-
- Maior custo com energia eletrica.
lerancia a falhas).
- Precisa de mais equipamentos de
- Upgrade mais acessvel.
rede (switches/roteadores).
levou grandes empresas a buscarem uma nova forma de armazenar os dados. Com
isso, entra em cena duas empresas percussoras da arquitetura de dados e sistemas dis-
tribudos, Google e Amazon. Essas empresas no incio da decada ja projetavam suas
soluco es para contornar esta falha dos modelos relacionais. Com isso, em 2004 a Google
comecava seu trabalho com o BigTable[Chang et al. 2008] e a Amazon, em 2005, com
o Dynamo[DeCandia et al. 2007]. Ambas as empresas publicaram seus resultados para o
publico em geral, e por causa disso, se tornaram as percussoras e grandes influentes no
mercado quando o assunto era sistemas distribudos em clusters e NoSQL.
Uma das caractersticas em NoSQL e a sua capacidade de executar em varios nos da rede
(particionamento). Sendo assim, a` medida que os dados fossem evoluindo, pode-se usar
cluster de servidores para gerenciar e balancear as cargas.
Cada modelo de distribuica o possui uma forma de armazenamento de dados,
gerencia de trafego de rede com relaca o a leitura e gravaca o, ou mais disponibilidade
quanto a atrasos e interrupco es na rede. Os benefcios sao muito atrativos para sua
utilizaca o, no entanto deve-se lembrar que existe varios custos relacionados. A execuca o
em ambiente de cluster introduz uma complexidade muito alta, portanto nao trata-se de
algo trivial e so deve ser utilizada em casos em que os benefcios sejam bastantes recom-
pensadores.
Atualmente, sao discutidos dois metodos de distribuica o em rede de
dados[Sadalage and Fowler 2012]: fragmentaca o (sharding) e replicaca o. De forma resu-
mida, pode-se dizer que fragmentaca o busca distribuir dados diferentes em varios pontos
da rede, enquanto que a replicaca o distribui os dados de um ponto u nico e os replica aos
diversos nos na rede. Essas duas tecnicas sao diferentes, porem nao precisam ser imple-
mentadas isoladamente, podem se complementar.
2.3. NoSQL
Nesta seca o e explanado acerca do historico do NoSQL, as principais caractersticas e os
principais tipos de bancos de dados existentes hoje no Mercado.
2.3.1. Historico
O termo NoSQL foi utilizado pela primeira vez em 1998, por Carlo
Strozzi[Nascimento 2015], como nome de seu SGBD, baseado no Modelo Relacio-
nal de codigo aberto (open source), sem interface SQL. Este banco de dados utilizava
shell script para recuperar os dados, e estes, por sua vez, ficavam armazenados em forma
de arquivos ASCII, uma tupla era representada por uma linha com os campos separados
por tabulaco es, ou seja, nao se assemelha em nada aos modelos de NoSQL atuais,
assemelhando-se mais a um SGBD onde nao se utilizava o modelo relacional para as
consultas, pode ser melhor abordado como NoREL (No Relational), concluindo-se que,
apesar do nome, o termo de Strozzi nao teve influencia sobre o que sera abordado neste
artigo.
Ja o termo NoSQL como conhecemos atualmente foi introduzido no incio de
2009[Evans 2009] por um funcionario do Rackspace, Eric Evans, quando Johan Oskars-
son, um desenvolvedor de software de Londres que trabalhava na Last.fm5 , organizou um
evento para discutir bancos de dados open source distribudos. Este evento ocorreu em
Sao Francisco, nos Estados Unidos. Johan estava interessado em descobrir mais sobre
esses novos tipos de bancos, inspirados no BigTable6 e DynamoDB7 , Google e Amazon,
respectivamente. Como ele dispunha de pouco tempo na cidade, viu que nao era viavel
visitar todas as empresas que estava participando do desenvolvimento desses softwares,
entao decidiu realizar o evento e convidou a todos para mostrar seus trabalhos e discu-
tir sobre o futuro da tecnologia. Este evento ficou conhecido como primeiro encontro
NoSQL.
Atualmente ha diversas soluco es NoSQL implementadas, sendo majoritariamente
Open Source, mostrando o interesse da comunidade em disseminar da forma mais a gil
possvel essa nova tecnologia. Porem, com isso, vem o que pode ser problematico a longo
prazo, a quantidade relativamente grande de SGBDs implementando diferentes padroes
NoSQL. Dentre eles citamos: Key-value, Document store, Column Store e Graphs.
2.3.2. Caractersticas
Nesta seca o e mostrado os quatro tipos de banco de dados relacionais existentes atual-
mente que sao: Chave-Valor, Documentos, Famlia de Colunas e Grafos. Aqui elenca-se
as suas caractersticas, tracando um paralelo com alguns modelos relacionais e exempli-
ficado com alguns representantes de cada um.
PostgreSQL MongoDB
Banco de dados Instancia MongoDB
Esquema Banco de dados
Tabela Coleco es
Linha Documento
OID id
Junca o DBRef
PostgreSQL Cassandra
Banco de dados Keyspace
Tabela Famlia de colunas
Linha Linha
Coluna (a mesma para todas as linhas) Colunas (podem ser diferentes por linha)
2.4. MongoDB
MongoDB e um banco de dados de codigo aberto, nao relacional orientado a documen-
tos, que prove mecanismos para aumento de performance, alta disponibilidade e esca-
lonamento horizontal automatico. A API de manipulaca o de dados, que sera mostrada
na implementaca o do estudo de caso, deriva do conceito de ORM (Object Relational
Map), Mapeamento Objeto-Relacional, para ODM (Objetct Document Model), Mapea-
mento Objeto-Documento. Esta tecnica, por sua vez, determina a interoperabilidade entre
a programaca o orientada a objetos e os modelos relacionais de banco de dados.
2.4.1. Documentos
Um registro em MongoDB e um documento, que por sua vez e uma estrutura que consiste
em um par de chave e valor, porem, diferentemente de um outro banco Chave-Valor, este
par pode ser aninhado com outros pares dessa mesma estrutura, algo bastante similar
ao que ja temos com objetos JSON (Java Script Object Notation), que e um formato
leve para intercambio de dados computacionais, no entanto, em MongoDB, temos uma
melhoria dessa estrutura de dados, onde o seu armazenamento e feito em BSON, que e
o documento JSON guardado e indexado em forma binaria, isso traz muitas melhorias
com relaca o a velocidade de acesso e manipulaca o das informaco es, em contra-partida,
documentos BSON sao maiores o que gera maior tamanho em disco. Um documento
20
http://neo4j.com
21
http://www.objectivity.com/products/infinitegrap
22
http://orientdb.com/orientdb
23
https://github.com/twitter/flockdb
24
http://www.objectivity.com/products/infinitegraph
em MongoDB e equivalente a um registro no banco de dados relacional. O codigo 1
exemplifica um documento JSON utilizado pelo MongoDB[MongoDB 2016].
Codigo 1 - Exemplo de objeto JSON
1
2 {
3 "address": {
4 "building": "1007",
5 "street": "Morris Park Ave",
6 "zipcode": "10462"
7 },
8 "borough": "Bronx",
9 "cuisine": "Bakery",
10 "name": "Morris Park Bake Shop",
11 "restaurant_id": "30075445"
12 }
2.4.2. Coleco es
3. Metodologia
Para exemplificar os conceitos discorridos ate agora, foi implementado uma aplicaca o
que usa os conceitos de banco de dados nao relacional. Ela e uma aplicaca o WEB usando
Java e MongoDB para consulta e manipulaca o de informaco es referentes a um catalogo
de restaurantes. Nela o usuario podera consultar restaurantes por endereco, nome e ci-
dade. Podera, tambem, mesclar as consultas em uma u nica usando o full text search do
MongoDB e cadastrar um novo restaurante no catalogo.
Para esta aplicaca o foi usado o driver Java do MongoDB, API de consultas dire-
tamente da linguagem, que se assemelha bastante com a implementada no MongoShell.
Tambem foi utilizado uma base de dados disponibilizada na documentaca o do MongoDB,
que consiste em uma coleca o de documentos JSON com informaco es de restaurantes,
como nome, endereco e avaliaca o de qualidade.
Por padrao, todas as leituras e escritas sao feitas no servidor primario, mas e
possvel que as leituras sejam feitas nos servidores secundarios, para isso e necessario
configurar as preferencias de leitura conforme codigo a seguir.
1 mongoClient.setReadPreference
2 (ReadPreference.secondaryPreferred ());
5. Consideraco es Finais
Neste artigo foi visto a historia por tras da criaca o do NoSQL, os conceitos basicos para
o reconhecimento dessas aplicaco es, fundamentaca o de pontos chaves na implementaca o
de uma soluca o nao relacional com escalabilidade horizontal e implementando o Teo-
rema CAP. Foi visto tambem as caractersticas das principais implementaco es existentes
no Mercado e suas comparaco es com outros bancos relacionais. E por fim, foi mostrado
um estudo de caso usando MongoDB, para demonstrar como e usada a API de consultas
e o seu driver desenvolvido para a plataforma Java. Com base nisso, este trabalho agrega
o conhecimento necessario para o entendimento dos modelos nao relacionais de gerenci-
amento de dados, e como este relaciona-se com os modelos relacionais existentes. Aqui
tem-se tambem, os conhecimentos iniciais para o desenvolvimento de uma aplicaca o que
o usa o driver para Java do MongoDB.
Diante deste artigo, sugere-se como trabalhos futuros o aprofundamento na
questao de escalabilidade horizontal, dando e nfase aos algoritmos de mapeamento e
reduca o (MapReduce), visando a verificaca o da eficiencia quanto a disponibilidade e con-
sistencia em ambiente de cluster. Tambem pode-se verificar as outras APIs de consultas
dos outros SGBDs, bem como sua integraca o com as linguagens de programaca o atuais
atraves de seus frameworks.
Por fim, percebe-se que estamos no incio de uma caminhada em tecnologia bas-
tante promissora, que se apoia nas costas de gigantes, como Google, Amazon e Facebook,
que a cada dia contribuem com o fomento e disseminaca o dessa nova forma de manipular
e armazenar nossos dados. Vale ressaltar que o modelo relacional ainda e o mais apropri-
ado para a maioria dos casos e, principalmente, onde o crescimento dos dados nao seja
tao grande.
Referencias
Appuswamy, R., Gkantsidis, C., Narayanan, D., Hodson, O., and Rowstron, A. (2013).
Scale-up vs scale-out for hadoop: Time to rethink? In Proceedings of the 4th annual
Symposium on Cloud Computing, page 20. ACM.
Brito, R. W. (2010). Bancos de dados nosql x sgbds relacionais: analise comparativa.
Faculdade Farias Brito e Universidade de Fortaleza.
Browne, J. (2009). Brewers CAP Theorem Disponvel em: http://www.
julianbrowne.com/article/viewer/brewers-captheorem. Acessado
em: 01/06/2016.
Chang, F., Dean, J., Ghemawat, S., Hsieh, W. C., Wallach, D. A., Burrows, M., Chandra,
T., Fikes, A., and Gruber, R. E. (2008). Bigtable: A distributed storage system for
structured data. ACM Transactions on Computer Systems (TOCS), 26(2):4.
DeCandia, G., Hastorun, D., Jampani, M., Kakulapati, G., Lakshman, A., Pilchin, A.,
Sivasubramanian, S., Vosshall, P., and Vogels, W. (2007). Dynamo: amazons highly
available key-value store. In ACM SIGOPS Operating Systems Review, volume 41,
pages 205220. ACM.
Evans, E. (2009). NoSQL 2009. Disponvel em: http://blog.sym-link.com/
2009/05/12/nosql_2009.html. Acessado em: 03/06/2016.
Fowler, A. (2015). NoSQL for Dummies. John Wiley & Sons.
Gilbert, S. and Lynch, N. (2002). Brewers conjecture and the feasibility of consistent,
available, partition-tolerant web services. ACM SIGACT News, 33(2):5159.
Gray, J. et al. (1981). The transaction concept: Virtues and limitations. In VLDB, vo-
lume 81, pages 144154.
Hadjigeorgiou, C. et al. (2013). Rdbms vs nosql: Performance and scaling comparison.
Leavitt, N. (2010). Will nosql databases live up to their promise? Computer, 43(2):1214.
Loscio, B. F., OLIVEIRA, H. R. d., and PONTES, J. C. d. S. (2011). Nosql no desen-
volvimento de aplicaco es web colaborativas. VIII Simposio Brasileiro de Sistemas
Colaborativos, Brasil.
MongoDB (2016). Documentaca o MongoDB Disponvel em: http://api.
mongodb.com/java/3.0, Acessado em: 01/06/2016.
Nascimento, J. C. (2015). Introduca o ao NoSQL.
Rubinstein, I. S. and Good, N. (2013). Privacy by design: A counterfactual analysis of
google and facebook privacy incidents. Berkeley Tech. LJ, 28:1333.
Sadalage, P. J. and Fowler, M. (2012). NoSQL distilled: a brief guide to the emerging
world of polyglot persistence. Pearson Education.
Vieira, M. R., FIGUEIREDO, J. M. d., Liberatti, G., and Viebrantz, A. F. M. (2012). Ban-
cos de dados nosql: conceitos, ferramentas, linguagens e estudos de casos no contexto
de big data. Simposio Brasileiro de Bancos de Dados.