Você está na página 1de 18

BANCO DE DADOS

NÃO RELACIONAL

Luiz Fernando Calaça Silva


Bancos de dados orientados
a grafos (graph DBMS)
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:

„„ Descrever as funcionalidades e características dos bancos de dados


orientados a grafos.
„„ Ilustrar a criação e o relacionamento de grafos em bancos de dados.
„„ Demonstrar o acesso e a manipulação a dados em bancos de dados
orientados a grafos.

Introdução
A teoria dos grafos é aplicada em diversos problemas matemáticos, inclu-
sive em implementações de algoritmos computacionais, com o objetivo
de representar um problema complexo e abstrato com uma abordagem
visual para a resolução do problema.
Neste capítulo, você conhecerá as funcionalidades e características
dos bancos de dados orientados a grafos. Além disso, verá como se dá a
criação e o relacionamento de grafos em bancos de dados. Por fim, verá
como ocorre o acesso e a manipulação a dados nesses bancos.

1 Funcionalidades e características
dos bancos de dados orientados a grafos
A matemática e a computação caminham juntas, e suas teorias foram aplicadas
nos sistemas computacionais. Uma delas é a teoria dos grafos, que pode ser
aplicada na representação de diversos problemas e implementada em software.
Segundo Cardoso (2005), a teoria dos grafos foi criada devido ao problema
das pontes de Königsberg (Alemanha), dado que a cidade se localizava entre
duas ilhas do rio Pregel, as quais estavam ligadas umas às outras através de
sete pontes, conforme a Figura 1a.
2 Bancos de dados orientados a grafos (graph DBMS)

A história das pontes data de 300 anos atrás. Königsberg foi uma impor-
tante cidade da Prússia, localizada ao norte da Europa, próximo à costa do
Mar Báltico, a qual hoje é chamada de Kaliningrado. A cidade possuía duas
ilhas cortadas pelo rio Pregel e, na época, seis pontes as ligavam às margens,
ao passo que outra fazia a ligação das duas ilhas entre si. Por volta de 1735,
os moradores de Königsberg se depararam com o seguinte problema: como
seria possível fazer um passeio a pé pela cidade de forma a passar uma única
vez por cada uma das sete pontes e retornar ao ponto de partida? Na época,
foi o matemático Leonhard Euler quem decifrou o enigma, revelando ser
impossível tal façanha.
A história transcreve que os habitantes de Königsberg tinham por hábito
atravessar todas as pontes em seus passeios, contudo, havia um certo descon-
forto, pelo fato de não ter sido encontrada uma forma de realizar um trajeto
com partida e chegada a um mesmo lugar atravessando apenas uma vez cada
uma das pontes.
No caso do problema das pontes, o grafo criado por Leonhard Euler (Fi-
gura 1b) tinha quatro pontos: um representando uma das margens do rio e
outro a outra margem. Já o terceiro ponto representava uma das ilhas, e o
quarto, a outra ilha. Sendo assim, o grafo tinha quatro pontos e sete linhas,
que representavam as pontes. O desafio era fazer um passeio pelo grafo que
partisse de um dos quatro pontos, percorresse cada uma das sete linhas uma
única vez e voltasse ao ponto de partida.

(a) (b)

Figura 1. Início da teoria dos grafos: (a) problema da ponte de Königsberg; (b) grafo criado
por Leonhard Euler.
Fonte: Globo Ciência (2011, documento on-line).
Bancos de dados orientados a grafos (graph DBMS) 3

A teoria dos grafos é hoje um campo de interesse crescente, cujas aplicações


vão desde problemas de localização e de traçado de rotas para diversos tipos de
serviços, ao projeto de processadores eletrônicos, passando pelo planejamento
de horários, pelo estudo da estrutura do DNA e pelo projeto de códigos, além
de problemas mais simples, como o da interligação elétrica e o da engenharia
molecular (NETTO; JURKIEWICZ, 2009).
Conforme Anton e Rorres (2012), os grafos podem ser divididos em duas
grandes categorias: os direcionados, denominados dígrafos, e os não dire-
cionados, relacionados apenas como grafos. Os grafos direcionados possuem
um conjunto de vértices (V) e um conjunto de arestas (A), sendo s, t : A → V,
onde s(e) é a fonte (source) e t(e) é o alvo (target) da aresta direcionada e. Em
contrapartida, os grafos não direcionados são representados por um conjunto
de vértices (V), um conjunto de arestas (A) e uma função w : A → P(V), que
associa a cada aresta um subconjunto de dois ou de um elemento de V, inter-
pretado como os pontos terminais da aresta.
Assim, um banco de dados orientado a grafos aplica diretamente a teoria
dos grafos em sua implementação, pois, por meio do uso de nós e arestas para
a representação do conjunto de dados, tem-se grafos direcionados. O Quadro1,
a seguir, apresenta os componentes de um banco de dados orientado a grafos.

Quadro 1. Componentes de um banco de dados orientado a grafos

Contém os pares chave–valor com as informações de


Nós (vértices)
uma entidade.

Subgrafo É um grafo dentro de um grafo maior.

Realiza a conexão de dois nós, de modo que sempre


Relacionamentos
haverá um nó de início e um de fim, os quais têm uma
(arestas)
única direção e tipo.

Propriedades Propriedades dos nós e relacionamentos.


4 Bancos de dados orientados a grafos (graph DBMS)

Os bancos de dados orientados a grafos implementam um sistema que


armazena os dados em estruturas de grafos e provê consultas mais semânticas,
por meio de dados interconectados por nós e arestas. Uma das vantagens desse
tipo de banco é a flexibilidade do modelo dos dados, oriundo dos bancos de
dados NoSQL (não relacional). Ao contrário dos bancos relacionais, em que
é necessária a criação ou a alteração de tabelas existentes para adicionar
novos tipos de dados, em um banco orientado a grafos, é permitida a adição
de novos tipos de vértices e arestas a um grafo existente sem precisar fazer
modificações no esquema de dados.
Segundo Even (2011), o processamento dentro dos bancos de dados orien-
tados a grafos inclui os métodos pelos quais as cargas de trabalho e as tarefas
de grafos são realizadas. A maioria das consultas de grafos considera partes
específicas do gráfico (p. ex., um nó inicial), e o trabalho geralmente é focado
no subgrafo circundante. Esse tipo de processamento é chamado de grafo local
e implica consultar declarativamente a estrutura de um grafo, sendo utilizado
com frequência para transações em tempo real e consultas baseadas em padrões.

2 Criação e relacionamento de grafos


em bancos de dados
Ao modelar os dados de bancos relacionais, o modelo de dados é criado
levando-se em consideração as entidades envolvidas, a cardinalidade entre elas
e as ligações por meio da chave estrangeira. Em contrapartida, nos bancos de
dados orientados a grafos, faz-se necessário considerar apenas as entidades e
o relacionamento direto entre elas.
Inicialmente, é preciso compreender que há três tipos de grafos utilizados
no contexto de bancos de dados (Figura 2), os quais são descritos a seguir
(EVEN, 2011).

„„ Grafo simples: pode ter apenas uma relação com os outros grafos.
„„ Multigrafo: pode ter múltiplos relacionamentos com os outros grafos.
„„ Pseudografo: pode ter múltiplos relacionamentos com os outros grafos,
bem como autorrelacionamento.
Bancos de dados orientados a grafos (graph DBMS) 5

Figura 2. Tipos de grafos utilizados em bancos de dados: (a) grafo simples; (b) multigrafo;
(c) pseudografo.
Fonte: Adaptada de Even (2011).

Além disso, no contexto dos bancos de dados orientados a grafos, tem-se


os grafos direcionados, que darão significado às entidades e seus subnós,
interligados pelas arestas. Assim, seria possível ter cinco entidades em um
conjunto de dados: A, B, C, D e E, onde A tem ligação com C; C tem ligação
com A e B; D tem ligação com A e C; e, por fim, E tem ligação com D, con-
forme a Figura 3. A direção visa a adicionar outra dimensão da informação,
e relacionamentos do mesmo tipo, mas em direções opostas, têm significado
semântico diferente, podendo expressar uma dependência ou indicar um fluxo.

Figura 3. Grafos direcionado em um conjunto de dados


hipotético dentro de um banco de dados orientado a grafos.
Fonte: Adaptada de Even (2011).
6 Bancos de dados orientados a grafos (graph DBMS)

Para realizar a criação e o relacionamento de grafos nesses bancos, faz-se


necessário utilizar a teoria de grafos, aplicada à modelagem de dados orien-
tada a grafos. Uma intuição inicial, por exemplo, se dá quando pensamos nas
redes sociais, em que é possível observar a relação entre os usuários, seus
amigos e as curtidas das postagens. Um usuário pode seguir vários amigos,
que podem o seguir também, e todos podem realizar diversas postagens,
assim como o próprio autor pode reagir à sua postagem. Logo, pode-se
observar a aplicação do grafo direcionado no contexto das redes sociais.

Confira, a seguir, um exemplo de grafo direcionado com autorrelacionamento em um


banco de dados orientado a grafos no contexto das redes sociais.

O Usuário 1 (vértice) tem dois relacionamentos direcionados (arestas) ao Usuário 2:


ele o segue e teve uma reação à uma postagem específica. Já o Usuário 2 não segue
o Usuário 3, mas reagiu à uma postagem dele. O Usuário 3, por sua vez, não segue os
Usuários 1 e 2 e teve uma reação na própria postagem (autorrelacionamento). Assim,
pode-se observar a aplicação da modelagem orientada a grafos dentro de um conjunto
de dados em redes sociais.
Bancos de dados orientados a grafos (graph DBMS) 7

Segundo Robinson, Webber e Eifrem (2013), a modelagem orientada a


grafos é uma maneira natural para abstrair certos domínios que utilizam
apenas círculos (nós) e setas (vértices) para a representação. Os gráficos são
extremamente úteis para entender uma grande diversidade de conjuntos de
dados em áreas como ciência, governo e negócios. O mundo real — dife-
rentemente do modelo baseado em formulários por trás do banco de dados
relacional — é rico e inter-relacionamentos: uniforme e vinculado a regras em
partes, excepcional e irregular em outras partes. Assim, quando entendemos
os grafos, começamos a vê-los em todos os tipos de lugares.

Criação e manuseio dentro do banco de dados


orientado a grafos: Neo4j
É possível utilizar o banco Neo4j para implementar a orientação a grafos, a fim
de observar, na prática, a criação de vértices (nós) e arestas (relacionamentos),
em que os nós podem ter tipos de dados e diversos atributos. Esse banco é
um projeto de código aberto, implementado na linguagem Java, e possui uma
linguagem de consulta chamada Cypher. O manuseio aos dados no banco Neo4j
pode ser realizado utilizando uma API RESTful em qualquer linguagem, ou,
ainda, utilizando o console de comando de que ele dispõe.

Exemplo

Por meio do aplicativo desktop disponibilizado pela Neo4j, é possível criar


um novo banco de dados ao clicar em Add Database. Na linha de comando,
a sintaxe do comando para a criação de um nó e o retorno dele é a seguinte:

CREATE (usuario1:Usuario {nome:'João Matias', sexo:'M',


idade:'28'}) RETURN usuario1

Ou seja, foi criado um nó usuario1 com os atributos nome, sexo e


idade, com vários tipos de dados. Além disso, foi pedido que seja realizado
o retorno do grafo criado com o RETURN e o identificador usuario1, cujo
resultado pode ser observado na Figura 4. O Neo4j é visual, de modo que é
possível observar o nó criado.
8 Bancos de dados orientados a grafos (graph DBMS)

Figura 4. Retorno do comando para criar um novo nó dentro do Neo4j.

Para criar os usuários 2 e 3, utilizam-se os seguimentos comandos:

CREATE (usuario2:Usuario {nome:'Micael Batista', sexo:'M',


idade:'25'}) RETURN usuario2
CREATE (usuario3:Usuario {nome:'Yasmin Tereza', sexo:'F',
idade:'20'}) RETURN usuario3

Observe, na aba Table, que foi criado um JSON do nó, que, para o usuário 3,
é o seguinte:

{
"nome": "Yasmin Tereza",
"sexo": "F",
"idade": "20"
}

Em seguida, tanto para a criação de uma aresta como para a consulta de


relacionamentos, utiliza-se a notação da seta -[REL]->, em que a ponta indica
a direção do relacionamento. Se o relacionamento for bidirecional, a notação
utiliza é -[REL]-, sem a seta. Confira esse processo a seguir:
Bancos de dados orientados a grafos (graph DBMS) 9

CREATE (usuario1:Usuario)-[:segue {comecou_a_seguir:


'16-02-2020'}]->(usuario2:Usuario)
CREATE (usuario2:Usuario)-[:segue {comecou_a_seguir:
'18-02-2020'}]->(usuario3:Usuario)
CREATE (usuario1:Usuario)-[:reacao {emocao:
'curtida'}]->(usuario2:Usuario)
CREATE (usuario2:Usuario)-[:reacao {emocao:
'coracao'}]->(usuario3:Usuario)
CREATE (usuario3:Usuario)-[:reacao {emocao:
'coracao'}]->(usuario3:Usuario)

Após os comandos, o Neo4j retornará o seguinte:

Created 3 nodes, set 5 properties, created 5 relationships

Ou seja, demonstrando que foram criados três nós (vértices), cinco pro-
priedades e cinco relacionamentos (arestas). Para a verificação de que o grafo
foi corretamente construído, pode-se realizar o seguinte comando:

MATCH p=()-[r:segue]->() RETURN p

A Figura 5, a seguir, apresenta o retorno desse comando.

Figura 5. Retorno dos relacionamentos dentro do Neo4j.


10 Bancos de dados orientados a grafos (graph DBMS)

3 Acesso e manipulação a dados


Nos bancos de dados orientados a grafos, a busca ocorrerá conforme a interli-
gação entre os nós e suas arestas. Ao utilizar a linguagem de consulta Cypher
do Neo4j, pode-se realizar a manipulação dos dados. Assim, é possível realizar
as operações de criar, recuperar, atualizar e deletar (CRUD — create, read,
update and delete) para um registro, conforme o Quadro 2.

Quadro 2. Manipulação de dados por meio operações CRUD

CRUD Operação Descrição Exemplo

create CREATE Realiza a CREATE (amigo:Pessoa


inserção de um {nome: 'Marcos'})
novo dado.

update SET Atualiza os Atualização de um


atributos atributo no nó:
dos nós ou MATCH (p:Pessoa
relacionamentos {nome:”Marcos''})
e realiza a SET p.data_nascimento
criação de um = data('1980-01-01')
novo atributo.
Atualização de um atributo
em um relacionamento:
MATCH (:Pessoa
{nome: 'Joana'})-
[rel:TRABALHA_
PARA]-(:Empresa
{nome: 'Neo4j'})
SET rel.anoInicio =
data({ano: 2018})
RETURN rel

(Continua)
Bancos de dados orientados a grafos (graph DBMS) 11

(Continuação)

Quadro 2. Manipulação de dados por meio operações CRUD

CRUD Operação Descrição Exemplo

delete DELETE Deleta um nó, Deleção de um nó:


atributo ou MATCH (m:Pessoa
relacionamento. {nome: 'Marcos'})
DELETE m

Deleção de um atributo:
MATCH (n:Pessoa
{nome: 'Joana'})
REMOVE
n.data_nascimento

Deleção de um relacionamento:
MATCH (j:Pessoa
{nome: 'Joana'})-
[r:IS_AMIGOS_COM]-
>(m:Pessoa {nome:
'Marcos'})
DELETE r

read MATCH Realiza a busca MATCH (p:Pessoa


de um registro. {nome: 'Joana'})
RETURN p

Para exemplificar, prosseguindo com o modelo de redes sociais, é possível


aplicar as operações básicas do Neo4j para a manipulação de dados, conforme
a seguir.

Realizando operações CRUD em um banco de dados orientado a grafos no


contexto das redes sociais
No exemplo anterior, foram realizadas as operações CREATE e MATCH, agora, serão
utilizadas as atualizações SET e DELETE.
12 Bancos de dados orientados a grafos (graph DBMS)

Criação de um novo atributo no nó

MATCH (usuario1:Usuario)
SET usuario1.postagem1 = 'Olá, pessoal! Tudo bem?'
RETURN usuario1

Dentro do Neo4j, há o retorno JSON da atualização do registro:

{
"name": "João Matias",
"idade": "28",
"postagem1": "Olá, pessoal! Tudo bem?",
"sexo": "M"
}

Atualização de um atributo de um relacionamento

MATCH (usuario1)-[s: segue]->(usuario2)


SET s.deixou_de_seguir = '18-05-2020'
return s

Deleção de um relacionamento

MATCH (usuario1)-[s: segue]->(usuario2)


DELETE s

Deleção de um nó

MATCH (usuario2)
DELETE usuario2

Assim, pode-se observar a prática da manipulação dos dados, conforme as funções


do Cypher aplicadas ao exemplo do modelo de dados em redes sociais.
Bancos de dados orientados a grafos (graph DBMS) 13

Muitas aplicações na indústria, na ciência, no governo e na engenharia


compartilham o mesmo problema: dado um subgrafo, como encontrar suas
ocorrências em um banco de dados orientado a grafos? O tamanho crescente
dos bancos de dados de aplicativos requer algoritmos de pesquisa de estrutura
eficientes.
Segundo Shmueli e Shnaiderman (2018), o processador de controle de uma
consulta recebe uma árvore de consulta e compreende a pluralidade de nós
e arestas que serão observados para que se recupere um conjunto de dados
aguardado. Assim, é possível perceber que cada consulta envolve percorrer
os nós e as arestas, conforme pode ser indicado em uma sintaxe de alguma
linguagem de consulta de grafos.
A linguagem de consulta de grafos do Neo4j é baseada no modelo de dados
orientado a grafos de propriedades rotuladas, que é o modelo mais popular para
representar grafos (RUSU; HUANG, 2019). Um grafo de propriedades rotuladas
é um grafo direcionado com rótulos (ou propriedades) nos vértices e nas arestas,
bem como nos pares <propriedade, valor> associados a ambos.
Em geral, existem várias propriedades associadas a um vértice ou a uma
aresta, conforme visto no exemplo da implementação de uma rede social.
Em termos relacionais, o rótulo do nó corresponde ao nome da tabela, ao passo
que as propriedades correspondem aos atributos da tabela, se comparado com
o contexto relacional. Além disso, cada vértice ou aresta pode ter seu próprio
rótulo e propriedades independentes.
Como visto, o modelo de grafos de propriedades rotulados é sem esquema,
conforme o padrão NoSQL. Por um lado, isso fornece extrema flexibilidade, por
outro, aumenta o armazenamento e torna a avaliação de uma consulta menos
eficiente. As consultas do Cypher são cláusulas que especificam caminhos
no grafo. Elas identificam os vértices por seu rótulo e restringem o conjunto,
que pode ser bem volumoso, de correspondência por suas propriedades.
As arestas do caminho também são selecionadas com base em seus rótulos.
Conforme Hölsch, Schmidt e Grossniklaus (2017), o sistema de banco de
dados relacional supera o Neo4j em consultas analíticas, mas o Neo4j é mais
rápido para consultas que não filtram em tipos de aresta específicos. Assim,
para diversos projetos, faz-se necessário analisar quais são os parâmetros
necessários para a implantação de um banco de dados relacional ou NoSQL.
14 Bancos de dados orientados a grafos (graph DBMS)

Para realizar novas manipulações e testes, é possível encontrar na web informações


de diversos conjuntos de dados orientados a grafos. Confira, a seguir, alguns deles.
„„ O Projeto de Análise de Rede de Stanford (SNAP) inclui vários conjuntos de dados
com documentos relacionados e guias de uso.
„„ O Índice Colorado de Redes Complexas (ICON) é um índice pesquisável de conjuntos
de dados de rede com qualidade de pesquisa de vários domínios da ciência de rede.
„„ O Koblenz Network Collection (KONECT) inclui grandes conjuntos de dados de
rede de vários tipos para realizar pesquisas em ciência de redes.

ANTON, H.; RORRES, C. Álgebra linear: com aplicações. 10. ed. Porto Alegre: Bookman,
2012.
CARDOSO, D. M. Teoria dos grafos e aplicações. 2005. Dissertação (Mestrado em Mate-
mática) – Departamento de Matemática, Universidade de Aveiro, Aveiro, 2005.
EVEN, S. Graph algorithms. Cambridge: Cambridge University, 2011.
GLOBO CIÊNCIA. Entenda o enigma das pontes de Königsberg que instigou a geome-
tria. 2011. Disponível em: http://redeglobo.globo.com/globociencia/noticia/2011/12/
entenda-o-enigma-das-pontes-de-konigsberg-que-instigou-geometria.html. Acesso
em: 06 jun. 2020.
HÖLSCH, J.; SCHMIDT, T.; GROSSNIKLAUS, M. On the performance of analytical and
pattern matching graph queries in neo4j and a relational database. In: INTERNATIONAL
WORKSHOP ON QUERYING GRAPH STRUCTURED DATA (GRAPHQ), 6., 2017, Venice.
Proceedings [...]. Venice: [s. n.], 2017.
NETTO, P. O. B.; JURKIEWICZ, S. Grafos: introdução e prática. São Paulo: Blucher, 2009.
ROBINSON, I.; WEBBER, J.; EIFREM, E. Graph databases. [S. l.]: O'Reilly Media, 2013.
RUSU, F.; HUANG, Z. In-depth benchmarking of graph database systems with the Linked
Data Benchmark Council (LDBC) Social Network Benchmark (SNB). [S. l.: s. n.], 2019.
SHMUELI, O.; SHNAIDERMAN, L. Processing query to graph database. Depositante: Te-
chnion Research and Development Foundation Ltd. US n. 20140244687-A1. Depósito:
24 fev. 2013. Concessão: 27 Mar. 2018.
Bancos de dados orientados a grafos (graph DBMS) 15

Leituras recomendadas
ALVAREZ, G. M.; CECI, F.; GONÇALVES, A. L. Análise comparativa dos bancos orientados
a grafos de primeira e segunda geração–uma aplicação na análise social. [S. l.: s. n.], 2015.
GONÇALVES, A. L. Grafos: aplicações ao jogo. 2007. Dissertação (Mestrado em Mate-
mática/Educação) – Universidade Portucalense, Porto, 2007.
SILVA, G. H. M. A. Um modelo de visualização de dados utilizando banco de dados orientado
a grafo suportado por big data. 2016. Dissertação (Mestrado em Engenharia Elétrica) –
Universidade de Brasília, Brasília, 2016.
SKIENA, S. S. The algorithm design manual. 2nd ed. New York: Springer, 2008.
ZANATO, K. Y. S.; VENTURA, T. M.; RIBEIRO, J. M. Análise da evasão de alunos da área de
tecnologia da informação por meio de um banco de dados orientado a grafos. Revista
Eletrônica Argentina-Brasil Tecnologias da Informação e da Comunicação, [s. l.], v. 1, n. 8,
p. 1–15, 2017.

Os links para sites da web fornecidos neste capítulo foram todos testados, e seu fun-
cionamento foi comprovado no momento da publicação do material. No entanto, a
rede é extremamente dinâmica; suas páginas estão constantemente mudando de
local e conteúdo. Assim, os editores declaram não ter qualquer responsabilidade
sobre qualidade, precisão ou integralidade das informações referidas em tais links.

Você também pode gostar