Buscar

Um estudo comparativo entre Bancos de Dados Relacionais e Bancos de Dados NoSQL Orientados a Grafos


Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 17 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 17 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 17 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Um Estudo Comparativo entre Bancos 
de Dados Relacionais e Bancos de Dados 
NoSQL Orientados a Grafos. 
 Publicado em 12 de dezembro de 2017 
 
Joyce Lima 
Analista de Sistemas na Empresa Sendas Comércio Exterior e Armazéns 
Gerais S.A 
Joyce S. Aquino 
Bacharelado em Ciências da Computação - Centro Universitário Augusto Motta 
(UNISUAM). 
Avenida Paris, Nº 72 – Bonsucesso, Rio de Janeiro – RJ – Brasil. 
joycesaquino@gmail.com 
 Abstract. The constant evolution of applications related to Web environment, the 
growth of heterogeneous data and the need to handle interconnected data providing high 
performance brings a new challenge to the relational environment, the rigid model 
prevents some solutions and the need increasingly constant provide results to the 
market, highlights a new paradigm when it comes to databases. Faced with the need, the 
still emerging concept NoSLQ databases is driven and has matured every day providing 
solutions and becoming increasingly present in large enterprises. This article it is a 
comparative study between relational databases and NoSQL databases oriented graphs, 
bringing aspects of modeling, and giving the advantages and disadvantages between the 
two models. 
 
Resumo. A evolução constante de aplicações voltadas para o ambiente Web, o 
crescimento de dados heterogêneos e a necessidade de se tratar dados interconectados 
provendo altas performances traz um novo desafio para o ambiente relacional, o modelo 
rígido inviabiliza algumas soluções e a necessidade cada vez mais constante em prover 
resultado para o mercado, evidência um novo paradigma no que se trata de bancos de 
dados. Diante da necessidade o conceito ainda emergente de bancos de dados NoSLQ é 
impulsionado e vem amadurecendo a cada dia provendo soluções e se tornando cada 
vez mais presente em grandes empresas. Esse artigo trata-se de um estudo comparativo 
entre bancos de dados relacionais e bancos de dados NoSQL orientado a grafos, 
trazendo aspectos de modelagem, e expondo as vantagens e desvantagens entre os dois 
modelos. 
1. Introdução 
 Com o decorrer dos anos enfrentamos um crescimento considerável no número de 
aplicações e recursos voltados para sistemas computacionais, consequentemente o 
volume de dados provenientes de tais sistemas apresentou um ritmo de crescimento 
exponencial se tornando uma preocupação e gerando novos paradigmas no mercado de 
tecnologia. 
Quando falamos em armazenamento e manipulação de dados, o uso de banco de dados 
relacionais se tornou um ponto focal no mercado, porém com o dinamismo das 
informações e a complexidade das soluções impostas pelo mercado, o ambiente 
relacional, dado aos seus esquemas estáticos e inflexíveis tem se tornado ineficiente 
inviabilizando soluções de alta complexidade, principalmente em casos que existe a 
necessidade de manipulação de dados heterogêneos e seu armazenamento de diversas 
formas. 
De maneira geral um dos principais problemas de bancos de dados relacionais está 
diretamente associado a dificuldade em conciliar o modelo rígido com a crescente 
demanda de escalabilidade, porém tendo visto que no cenário atual os dados crescem 
substancialmente em pouco tempo e o número de usuários não para de aumentar a cada 
dia a escalabilidade e processamento se torna um ponto indispensável para o 
armazenamento e manipulação de dados. 
É neste ponto que entra em cena o conceito de bancos de dados NoSQL “que é 
completamente distinto do modelo relacional, portanto, deveria ser mais 
apropriadamente chamado "NoREL" ou algo que produzisse o mesmo efeito”. [5] 
O termo NoSQL significa “Not Only SQL – Não Somente SQL” e surgiu inicialmente 
no ano de 1998, usado por Carlo Strozzi para definir bancos de dados não relacionais. 
Em 2006, o artigo: BigTable: A Distributed Storage System for Structured Data, 
publicado pelo Google, trouxe novamente o conceito NoSQL à tona e novamente em 
2009 o termo foi re-introduzido por Eric Evans, quando Johan Oskarsson teve a 
intenção de organizar um evento para discutir bancos de dados de código aberto. De 
maneira mais simplista podemos considerar NoSQL como uma maneira de descrever o 
surgimento de um número crescente de banco de dados não relacionais, que em sua 
grande maioria não tem a preocupação de fornecer garantias ACID. 
2. Desenvolvimento 
 2.1 Banco de Dados NoSQL. 
Bancos de dados NoSQL foram criados na tentativa de resolver determinadas soluções 
em que banco de dados relacionais não apresentam total eficiência. Fatores como a 
rigidez e inflexibilidade do modelo relacional, a necessidade de processamento em larga 
escala e alta performance, deram força ao conceito de bancos de dados não relacionais 
que atualmente são apresentados como uma nova alternativa aos bancos de dados 
relacionais, que por muito tempo foi o único modelo aceito no mercado. 
No geral quando modelamos um banco de dados relacional, para que possamos 
assegurar a integridade dos dados é uma premissa que o banco de dados mantenha em 
suas transações quatro propriedades conhecidas pela sigla ACID, descritas a seguir: 
A (Atomicidade): todas as transações devem ser atômicas, ou seja, só podem ser 
consideradas efetivadas se executadas em sua totalidade, logo caso aconteça alguma 
falha no decorrer do processo significa que toda transação será invalidada. 
C (Consistência): tudo deve ser consistente desde o início até o final de determinada 
transação, caso a transação não aconteça o banco de dados garante a integridade dos 
dados retornando ao estado consistente anterior. 
I (Isolamento): as transações só podem acontecer de maneira isolada, nenhuma 
transação pode interferir em outra. 
D (Durabilidade): por último deve ser durável, uma vez que a transação foi concluída os 
dados consequentes da mesma não podem ser perdidos. 
O uso das propriedades ACID trouxe ao modelo relacional, segurança e eficiência, mas 
em contrapartida o tornou de certa forma inflexível pois este conjunto de propriedades é 
demasiadamente restritivo para ambientes de processamento distribuídos de grande 
porte e acaba inviabilizando soluções que necessitam de maior flexibilidade. 
Banco de dados NoSQL são mais flexíveis pois se baseiam em um grupo de 
propriedades denominadas BASE2, definidas a seguir: 
 BA (Basicamente Disponível): prioriza a disponibilidade dos dados 
 S (Estado Leve): o sistema não precisa estar consistente o tempo todo. 
 E (Eventualmente Consistente): é consistente em momento indeterminado. 
 As propriedades BASE de certa forma competem com as propriedades ACID e tornam 
os bancos de dados NoSQL mais recomendados para trabalhar com distribuição de 
processamento e suportar aplicações que contam com um grande volume de dados, 
como Big Data e BI por exemplo, e que por sua vez crescem de maneira significativa 
em pouco tempo como acontece em redes sociais. 
Levando em consideração o crescimento substancial de dados que temos nos dias atuais, 
é extremamente necessário investir na robustez do banco de dados, adicionando 
novas máquinas e distribuindo o processamento, o que chamamos de escalabilidade 
horizontal. Para bancos de dados relacionais a escalabilidade é um problema que não se 
resolve tão facilmente, pois, esse modelo se comporta bem somente usando 
escalabilidade vertical que consiste no aumento de memória e processamento dos 
servidores, o problema é que soluções do tipo além de possuírem alto custo tornam o 
banco dependente exclusivamente dos fornecedores de tecnologias em hardware. 
O uso da escalabilidade horizontal em bancos de dados relacionais se torna inviável pois 
o mesmo aumentaria consideravelmente o tempo de resposta do banco devido ao 
número de acessos a simultâneos das máquinas distribuídas, já os bancos de dados 
NoSQL tratam a questão da escalabilidade com mais facilidade devidoao seu modelo 
flexível e livre de esquemas além de em alguns casos já serem projetados para trabalhar 
com auto- particionamento, aumentando sua capacidade viabilizando seu uso em 
ambientes com grandes volumes de dados. 
Além de contar com propriedades mais flexíveis e serem mais escaláveis, bancos de 
dados NoSQL trabalham com processamento baseado em alguns frameworks como 
MapReduce que foi criado pela Google e é usado como solução para otimizar o 
processamento em larga escala. 
 “Esse modelo para computação distribuída consiste na especificação de uma função de 
mapeamento (map), que processa um conjunto de pares chave/valor e retorna um 
conjunto intermediário de pares chave/valor, e uma função de redução (reduce), que usa 
os conjuntos chave/valor retornados pela função de mapeamento para mesclar todos os 
valores intermediários que possuem a mesma chave disponibilizando assim um 
resultado para uma determinada consulta” [3] 
 Com o intuito de prover ao usuário fácil manipulação dos dados, bancos de dados 
NoSQL contam com APIs para diversas linguagens facilitando o uso de algoritmos para 
manipulação e busca dos dados, alguns bancos de dados NoSQL possuem suas próprias 
query languages geralmente de fácil interpretação assim como é o caso do Neo4J que é 
um banco de dados NoSQL orientado a grafos e o CassandraDB que usa o modelo de 
família de colunas. Os modelos de bancos de dados NoSQL são classificados em quatro 
categorias, chavevalor, os modelos orientados a documentos, os orientados a coluna, e 
os sistemas baseados em grafos conforme representação gráfica abaixo. 
 
 Figura 1. Representação gráfica do quadrante de bancos de dados NoSQL em suas 
estruturas de armazenamento de dados. Fonte: Graph Databases 2º Edição – O’Reilly 
 2.2 Chave-valor. 
 Os bancos de dados NoSQL que utilizam o modelo chave-valor são conhecidos por sua 
arquitetura simples. No geral, armazenam os dados em uma estrutura de tabela hash e 
usam a função hashing para o mapeamento, busca e exclusão de tais dados. 
Os dados são indexados por chaves, e cada chave está associada a um único valor o que 
possibilita uma rápida busca a partir das chaves. 
 
 Figura 2. Exemplo de estrutura dos dados salvos na arquitetura chave e valor. 
 Além do armazenamento simples, outra vantagem do modelo chave-valor é a fácil 
manipulação dos dados, onde comandos simples como get( ) e set( ) são utilizados para 
retornar e capturar os valores. 
 Um exemplo no mercado que podemos usar para o modelo chave-valor é o DynamoDB 
que foi desenvolvido pela Amazon e já possui uma vasta documentação em seu site 
oficial, facilitando para os profissionais que tem a intenção de utilizá-lo, além de possuir 
APIs para plataformas como JAVA, PHP, Ruby e outras linguagens. 
 O Dynamo é um modelo livre de esquemas logo se torna altamente flexível e conta 
com recursos como auto particionamento, escrita dos dados em disco e replicação de 
dados, mantendo assim a consistência e disponibilidade. 
 
 2.3 Banco de dados orientado a documentos. 
 
 Bancos de dados orientados a documentos trabalham com dados semi-estruturados, 
geralmente armazenados como uma coleção de documentos onde cada documento 
possui um identificador único parecido com a arquitetura do modelo chave-valor. Esse 
tipo de modelo é conhecido por ser livre de esquemas rígidos, o que os torna 
extremamente flexível a nível de armazenamento de dados com extensões diversas e sua 
manipulação. 
Como este modelo de dados é livre de esquemas e os documentos geralmente não 
possuem uma estrutura rígida, conseguimos facilmente adicionar novos campos em um 
único documento de uma coleção sem que seja necessário fazer nenhuma alteração nos 
demais documentos. O exemplo abaixo exibe a representação de uma coleção de 
documentos onde cada documento possui sua estrutura única apesar de fazerem parte da 
mesma coleção. 
 
 Figura 3. Exemplo de coleção de documentos com documentos com estruturas 
distintas 
Um exemplo de como poderíamos adicionar novos valores em um único documento 
dentro de uma coleção seria buscando o documento pelo seu ID e adicionando os 
campos e seus respectivos valores, conforme representado. 
 
 Figura 4. Pseudocódigo para adicionar novos valores em um documento buscando pelo 
ID 
Bancos de dados orientados a documentos são os mais maduros no contexto NoSQL e 
apesar de existirem outros, usaremos o MongoDB que conta com uma query language 
nativa e a nível de mercado anda crescendo a cada dia, atualmente já existem exames de 
certificação para MongoDB DBA. 
 O MongoDB assim como outros bancos de dados NoSQL, utiliza a replicação 
mestreescravos usando um nó mestre para processar as atualizações e distribuir pelos 
nós definidos como escravos, é possível trabalhar com dados distribuídos dessa forma 
configurando uma réplica entre nós mestres em diferentes espaços geográficos. É com 
base nesse conceito que bancos de dados NoSQL são conhecidos por consistência 
eventual, pois nem todos os nós estão atualizados todo o tempo, isso vai acontecendo 
eventualmente. Como nem todo sistema é consistente podem acontecer conflitos de 
réplica no caso de dois usuários estarem usando o mesmo documento ao mesmo tempo 
daí temos a tolerância a inconsistência conforme citam as propriedades BASE. Nesse 
caso pode-se optar por uma abordagem pessimista não permitindo que um documento 
possa ser usado por mais de um usuário por vez evitando assim que ocorram conflitos, 
já quando optamos por uma abordagem otimista eliminamos problemas com 
concorrência, mas consequentemente permitimos conflitos, porém, nesse caso são 
utilizados métodos de detecção e correção. 
 Um problema encontrado na utilização de replicação mestre-escravos é que caso o nó 
mestre falhe o sistema só ficará apto para leitura até que o nó mestre seja reestabelecido 
ou que substituído por um escravo. Para evitar esse problema o MongoDB permite que 
mais de um nó seja configurado como mestre. 
 
2.4 Banco de dados de família de colunas. 
 
Devido a simplicidade e praticidade dos bancos de dados que usam arquitetura chave e 
valor, os demais bancos de dados NoSQL acabaram adotando o mesmo conceito. Assim 
como bancos de dados orientados a documentos os bancos do tipo família de colunas 
também usam o conceito de chave e valor, porém tem seus dados organizados de 
maneira diferente. 
Bancos de dados de famílias de colunas foram impulsionados pelo surgimento da 
BigTable, desenvolvido pela Google com a intenção de armazenar dados distribuídos e 
projetado para suportar até petabytes de dados, esse modelo armazena os dados 
agrupados em famílias de colunas, que é de certa forma parecido com a estrutura tabular 
usada em bancos de dados relacionais. A nível de busca esse modelo usa o conceito 
chave e valor usando um hash para cada linha ou cada família, como forma de mapear 
os dados e acessa-los com rapidez e eficiência. 
Dentre os bancos de dados que usam a arquitetura de família de colunas podemos 
destacar o CassandraDB que foi desenvolvido pelo Facebook usando a arquitetura do 
DynamoDB e a estrutura de armazenamento da BigTable, em consequência dessa 
junção o Cassandra consegue ser rápido e altamente robusto em armazenamento pois é 
extremamente escalável, além de contar com uma query language nativa chamada CQL 
(Cassandra Query Language) que muito se aproxima do próprio SQL. 
Ao contrário do armazenamento em tuplas, (atributo e valor) utilizado em modelos 
relacionais, o Cassandra usa o conceito de triplas que consiste em linhas, colunas e a 
propriedade timestamp. 
Cada linha representa uma família de colunas e possui um rowKey ou ID referente 
aquele grupo de colunas, cada coluna possui um nome de identificação e o valor a ser 
salvo, além do timestamp que representa o momento em quedeterminada informação 
efetivamente foi salva no banco de dados, essa propriedade é usada para diferenciar 
múltiplas versões do mesmo dado pois o Cassandra trabalha com o conceito de 
desnormalização visando a alta disponibilidade e rapidez. 
 
 Figura 5. Exemplo de estrutura de armazenamento por famílias de colunas. 
 
 Um ponto importante do Cassandra DB é o conceito de super colunas, usado para 
otimizar buscas para dados agrupados. Uma super coluna é composta por várias famílias 
de colunas agrupadas, geralmente utiliza-se dados que possuem alguma relação entre 
eles. Isso minimiza a busca, levando em consideração que o acesso será filtrado pelo ID 
da super coluna e os dados das sub colunas que compõem a super coluna estariam 
dispostos após uma única busca. 
 Ao contrário do Mongo DB o Cassandra usa consistência P2P onde não existe um nó 
mestre. Todos os nós trabalham em conjunto recebendo e replicando suas atualizações, 
caso um nó apresente falha os demais continuam efetuando suas atualizações e no 
momento em que o nó falho retornar o mesmo recebe os dados dos outros nós. 
 Além do Cassandra existem outros bancos de dados de família de colunas como Hbase, 
HyperTable entre outros. 
 
2.5 – Banco de dados de grafos. 
 
Formalmente, podemos descrever um grafo como um conjunto de vértices e arestas 
interligados entre si. No contesto de bancos de dados um grafo pode possuir N vértices 
também conhecidos como nodos, que representam as entidades, e N arestas interligando 
os nodos e consequentemente criando relacionamentos entre tais nodos, conforme 
representado na imagem abaixo. 
 
 
Figura 6. Representação gráfica da estrutura de um grafo. Fonte: Documentação do 
Neo4J 
 
Os bancos de dados de grafos vêm se disseminando no mercado e já ocupam uma das 
categorias mais importantes no meio NoSQL. Alguns bancos que utilizam esse tipo de 
estrutura são: Neo4J, InfiniteGraph, OrientDB, Titan, InforGrid, HyperGraphDB entre 
outros. 
Geralmente uma dificuldade encontrada na utilização de bancos de dados NoSQL é a 
representação gráfica do modelo, os modelos de grafos são os que mais se aproximam a 
um modelo de entidade e relacionamento, isso torna seu entendimento mais fácil em 
relação aos demais modelos NoSQL. 
Utilizando o modelo de grafos que é extremamente expressivo é possível modelar todo 
tipo de cenário, desde um corpo humano onde os órgãos poderiam ser representados 
pelos nós e as veias seriam suas arestas, até o mapa mundo representando cada 
continente ou cada país e suas fronteiras. Agora vamos imaginar os cenários citados em 
um banco de dados relacional. Seriam inúmeras tabelas, relacionamentos, heranças, 
chaves primárias e estrangeiras, quando em um banco de dados de grafos resumimos 
tudo isso em nós e arestas. 
 Conforme citado anteriormente os bacos de dados NoSQL são potencialmente mais 
rápidos e facilmente manipuláveis e é nesse ponto que grafos são mais eficientes que 
tabelas. Se compararmos uma busca um pouco mais complexa em um banco relacional, 
composta por selects e joins e ao mesmo tempo levarmos em consideração a mesma 
busca utilizando algoritmos voltados para grafos, se torna notória a simplicidade que 
bancos de dados de grafos buscam dados em relação as complexas querys utilizadas em 
bancos de dados relacionais. 
Devido ao modelo de dados os relacionamentos em grafos acontecem de maneira 
simples e natural, de maneira geral criamos relacionamentos entre os nodos e é possível 
percorrer todo o grafo usando os relacionamentos criados para efetuar uma travessia 
desde o nodo 1 até o nodo N do grafo. 
Dentre os modelos citados, o modelo que mais se destaca no mercado atualmente é o 
Neo4J, implementado em Java e lançado em 2010 pela NeoTechnology. 
Diferente da maioria de bancos de dados NoSQL o Neo4J é compatível com as 
propriedades ACID, o que consequentemente o torna tão confiável quanto um banco de 
dados relacional, porém mais flexível devido a sua estrutura de dados. O Neo4J é o 
único dentre os bancos de dados de grafo que possui uma linguagem de consulta 
própria, além de ser código aberto e seu armazenamento físico pode ser feito tanto em 
memória quanto em disco. 
Contando ainda com a maior e mais ativa comunidade de desenvolvimento voltado para 
grafos do mercado, o que contribui para sua constante evolução além de possuir vasta 
documentação e recursos como API’s para diversas linguagens como Java, Python, PHP 
e Ruby. Mediante aos fatos citados usaremos o Neo4J nos exemplos da análise 
comparativa desde artigo. 
 
2.6 Cypher. 
 
 Para efetuar busca em grafos usamos os conceitos de busca em largura e profundidade, 
a maioria dos bancos de dados de grafos utiliza o Gremlin que é uma linguagem usada 
especificamente para percorrer grafos, porém tal linguagem é considerada pouco 
intuitiva. 
Na intenção de prover uma melhor experiência o Neo4J conta com uma linguagem 
específica utilizada para criar e manipular grafos. 
O Cypher, query language do Neo4J é uma linguagem muito expressiva e bem parecida 
com o que usamos no SQL para executar as querys, essa linguagem foi projetada para 
ser facilmente entendida por desenvolvedores e está diretamente associada a maneira 
que descrevemos grafos em sua forma gráfica. 
Utilizando a linguagem SQL trabalhamos com tabelas e registros, com o Cypher 
usamos componentes chamados labels que fazem basicamente o mesmo papel das 
tabelas, outro componente são os nodes que seriam equivalentes aos registros em SQL 
além das relações entre tais nodos que são chamados de relatioship e tem um papel 
muito importante na criação de um grafo, relationships são representados pelos 
relacionamentos em bancos relacionais. 
Assim como em outras linguagens, o Cypher é composto por clausulas também 
conhecidas como palavras reservadas da linguagem, a cláusula MATCH tem a mesma 
importância do SELECT que usamos em SQL e é considerada uma das principais 
cláusulas usadas na linguagem, a cláusula RETURN é usada para retornar nodos, 
relacionamentos e propriedades. 
Outras cláusulas como WHERE, CREATE, DELETE, SET entre outras também são 
utilizadas para manipular grafos e basicamente são familiares em outras linguagens o 
que torna o uso do Cypher muito autoexplicativo para desenvolvedores e profissionais 
de bancos de dados. 
 
 Tabela 1 – Representação dos principais componentes de bancos de dados de grafos e 
bancos de dados relacionais. 
 
2.7 A Modelagem utilizando Grafos. 
 
Uma característica importante de bancos de dados orientados a grafos é o modelo livre 
de esquemas, o que torna o cenário mais amplo e traz mais flexibilidade na modelagem, 
isso se dá devido a facilidade em que bancos de dados de grafos trabalham com 
relacionamentos e a forma como esses relacionamentos são tratados no banco, 
basicamente podemos dizer que bancos de dados de grafos foram feitos para trabalhar 
com relacionamentos. 
Apesar do nome sugestivo, bancos de dados relacionais não trabalham tão bem com 
relacionamentos pois o modelo rígido acaba trazendo certa complexidade tanto na 
modelagem quanto na manipulação dos dados. 
Digamos que precisamos modelar um cenário em que é necessário representar as 
relações entre N pessoas. Em um banco relacional seria necessário criar uma tabela para 
cada tipo de relacionamento conforme representado a seguir. 
 
Baseando-se no modelo representado digamos que gostaríamos de saber quem são os 
amigos de Pedro. É uma pergunta simples, porém gera uma consulta um tanto complexa 
tendo visto que precisaremos trabalhar com duas tabelas e logo usaremos JOINS para 
retornar os valores e depois efetuar o filtro pelo nome e ID da pessoa que nesse caso 
seria Pedro. 
Vejamos a consulta. 
SELECT tabelaPessoaA.ID, tabelaPessoaA.Pessoa 
AS AmigosDePedro 
FROMPessoa tabelaPessoaA JOIN AmigoPessoa 
ON AmigoPessoa.AmigoID = tabelaPessoaA.ID 
JOIN Pessoa tabelaPessoaB 
ON AmigoPessoa.PessoaID = tabelaPessoaB.ID 
WHERE tabelaPessoaB.Pessoa = 'Pedro' AND tabelaPessaB.ID = '1' 
Modelando o mesmo cenário em bancos de dados de grafos trabalhamos com um único 
label que seria equivalente a uma tabela e cada pessoa representa um nó dentro do grafo, 
daí criamos os relacionamentos entre os nós que podem ser unilaterais ou bilaterais. 
 
 
 
Figura 7. Modelagem de um cenário de pessoas e seus relacionamentos. Fonte: Console 
do Neo4J 
 
Partindo do mesmo princípio, queremos saber quem são os amigos de Pedro, vejamos a 
consulta utilizando o Cypher. 
MATCH (p: Pessoa {nome: “Pedro”}) -[relacionamento: AMIGO_DE]-> 
(amigo) 
RETURN type (relacionamento) as Pedro, amigo.nome as Pessoas; 
 
 Ambas as consultas representadas retornam os mesmos valores, porém podemos notar 
a simplicidade da busca usando o Cypher em relação a complexidade da busca feita em 
SQL, analisando do ponto de vista computacional o uso de Joins se torna 
performaticamente caro para o banco porque toda vez que uma query é executada é 
necessário fazer a junção das duas tabelas e a consulta no tempo da query. Quando 
usamos o Neo4J mesmo que a quantidade de dados seja enxuta o banco pré-calcula as 
informações de modo que já se sabe quantos relacionamentos e quais relacionamentos, 
quantos nodos e labels já existem cadastrados, essas informações serão utilizadas para 
otimizar as travessias que serão feitas no grafo retornando os valores com muito mais 
rapidez do que em bancos de dados relacionais. Conforme representado a seguir. 
 
 Figura 8. Resultado da busca de Amigos de Amigos usando Neo4J e Bancos 
Relacionais. Fonte: Graph Database 2º Edição Editora - O’Renlly. 
 
 Se dentro desse mesmo cenário fosse necessário modelar mais um tipo de 
relacionamento, de pessoas casadas por exemplo, precisaríamos de mais uma tabela 
para armazenar os registros e ids de pessoas casadas conforme exemplo a seguir. 
 
 
 
Modelando o cenário com grafos é necessário incluir somente mais um tipo de 
relacionamento utilizando o mesmo label e nodos já existentes. 
 
 
 Figura 8. Modelagem de um cenário de pessoas e seus relacionamentos. Fonte: Console 
do Neo4J 
 
O que podemos notar é que a cada entidade ou relacionamento adicionado o modelo de 
dados relacional se torna mais complexo, dificultando na modelagem e 
consequentemente nas consultas em contrapartida o modelo de grafos é expressivo e 
fácil de ser modelado. 
 
2.8 Transações utilizando Grafos. 
 
O fato do Neo4J fornecer suporte transacional o diferencia dos demais bancos de dados 
NoSQL essa característica o torna mais confiável pois garante a integridade dos dados 
assim como acontece atualmente com bancos de dados relacionais. No momento em que 
se inicia uma transação invocada pelo método BeginTx(), toda operação que for 
relacionada aquele processo se torna parte da transação que só é considerada completa 
no ato de invocação dos métodos success() ou failure() e então é finalizada pelo método 
finish() conforme exemplo abaixo. 
public class CadastraPessoa { 
public static void main(String[] args) { 
GraphDatabaseService db = new EmbeddedGraphDatabase(“/tmp/db”); 
Transaction tx = db.beginTx(); 
try { Node Pessoa = db.createNode(); 
 Pessoa.setProperty(“Nome”,”Pedro”); 
 Pessoa.setProperty(“Profissão”,”Desenvolvedor”); 
 System.out.println(“Nova categoria gravada com id: ” + 
 noCategoria.getId()); 
 tx.success(); 
 } finally { 
tx.finish(); 
} 
 
3. Vantagens e Desvantagens. 
 
 Assim como toda tecnologia emergente, bancos de dados NoSQL ainda estão em 
processo evolutivo em contrapartida bancos de dados relacionais apresentam um 
modelo totalmente maduro, existem outras vantagens e desvantagens no uso de ambas 
as tecnologias, que estão representadas na tabela a seguir. 
 
Tabela 2 – Comparação entre as principais características de ambos os modelos de 
bancos de dados. 
 
4. Conclusão. 
 
 Cada modelo apresentado nesse artigo possui suas particularidades, vantagens e 
desvantagens, bancos de dados relacionais são extremamente funcionais onde a 
consistência e integridade dos dados são indispensáveis, a maturidade do modelo traz 
confiabilidade, sendo assim um fator de extrema importância, o que justifica sua 
permanência e destaque no mercado durante tanto tempo. Apesar da teoria de grafos 
existir a mais de dois séculos, o modelo de grafos, dentro do paradigma de bancos de 
dados, ainda é uma novidade, tão logo, ainda é considerado imaturo, porém, tem se 
mostrado muito funcional em modelagens complexas, processamento, armazenamento e 
manipulação de grandes volumes. 
 É importante ressaltar que a intenção de tecnologias NoSQL não é, e nem possui 
condições de substituir totalmente o modelo relacional. Assim como outras tecnologias 
emergentes no mercado o NoSQL tem a intenção de agregar valor e prover resultados 
eficientes, funcionando como uma alternativa ao modelo relacional e somando para o 
meio tecnológico. Atualmente já é possível encontrar bancos híbridos que usam tanto 
modelo relacional quanto o não relacional na ideia de complementar as défices 
existentes em ambos e provendo um novo conceito denominado NewSQL. 
Levando em consideração os estudos feitos no desenvolvimento deste artigo conclui-se 
que ambos possuem destaque em cenários hora distintos, hora similares e a escolha em 
relação a sua implementação depende diretamente do modelo de negócio proposto. 
 
 5. Referências Bibliográfica. 
 
[1] - Chang, F.; Dean, J.; Ghemawat, S.; Hsieh, Wilson C.; Deborah A.; Mike 
Burrows, W.; Chandra; Fikes, A.; Gruber, Robert E. – 2006 – Google. Bigtable: A 
Distributed Storage System for Structured Data. 
 
[2] – Decandia, G.; Hastorun, D.; Jampani, M.; Kakutapati, G.; Laksman, A.; 
Pilchin, A.; Sivasubramanian, S.; Vosshal, P. e Vogels, W. Dynamo: Amazon’s 
Highly Available Key-value Store. 
 
[3] - ELOY, Leonardo A. de Oliveira. O Estado da Arte em Bancos de Dados 
Orientados a Documentos. 2009. 78f. Trabalho de conclusão de curso (Graduação). 
Universidade de Fortaleza, Ceará. 
[4] - NEO4J. Disponível em [http://www.neo4j.org]. 
[5] - NoSQL Relational Database Management System: Home Page Strozzi.it 
 
[6] - Pramod J. Sadalage e Martin Fowler – 2013 – Novatec. NoSQL Um Guia 
Conciso para o Mundo Emergente da Persistência Poliglota. 
 
[7] - Robinson, I., Webber, J., and Eifrem, E. Graph Database 2º Edição Editora - 
O’Renlly. 
 [8] - SILBERSCHATZ, Abraham; KORTH, Henry F.; SUDURSHAN, S. Sistemas 
de Bancos de Dados.

Continue navegando