<!  Blog Deal >

Insights, tendências, tecnologia e mais!

Descubra quando utilizar o Graph Databases

Para falar de Graph Databases (também conhecido como banco de dados orientado a grafos) é importante saber o que é um grafo. O grafo teve seu conceito fundamentado no século XVIII por Leonhard Euler. Ele é uma abstração que permite codificar relacionamentos entre pares de objetos e são utilizados nas mais diversas áreas do conhecimento. Esses objetos, que vamos chamar de nós, são conectados por linhas também conhecidas por arestas. 

Basicamente, um banco de dados orientado a grafos é uma coleção de nós e arestas, em que cada nó representa uma entidade e cada aresta representa uma relação entre dois nós. Tanto os nós quanto as arestas podem conter propriedades que são representações de informações dos modelos do mundo real. Em um banco de dados orientado a grafos, temos a possibilidade de dizer qual o sentido de relacionamento da aresta entre dois nós: a entidade X (nó) se relaciona de uma forma específica (aresta) com a entidade Y (nó).  

Abaixo está o exemplo do grafo que vou utilizar neste artigo: 

No exemplo, há uma modelagem de dados (grafo) das informações privadas de um cliente de uma instituição financeira. A modelagem mostra como as entidades Bank Account, Device, Phone Number, Email, Customer e City estão relacionadas entre si. 

Observe que podemos “ir” de uma entidade a outra (não necessariamente diretamente ligadas) por meio de um caminho de vértices e arestas. Em nosso exemplo, podemos buscar quais são os números de telefones que estão indiretamente ligados ao cliente (“passando” por Device ou Bank Account). Isso é o que chamamos de traverse ou travessia. 

Caso a modelagem acima fosse feita em um banco de dados relacional e precisássemos realizar esse mesmo “caminho” entre as entidades, seria preciso usar um ou mais JOINS, o que geralmente não é performático. 

Em vias gerais, essa é a grande vantagem da performance do banco de dados orientado a grafos em relação aos bancos de dados relacionais: bancos de dados orientados a grafos foram criados para situações em que é necessário fazer o traverse. 

Atualmente existem muitas situações em que a utilização dos bancos de dados orientados a grafos é bastante satisfatória no quesito de performance e modelagem de dados de itens altamente relacionados. 

Algumas dessas áreas são: 

  • Serviços financeiros; 
  • Redes sociais; 
  • Manufatura; 
  • Varejo; 
  • Detecção de fraudes fiscais; 
  • Redes de computadores e operações de TI; 
  • Provedores de identidade e gerência de acessos; 
  • Telecomunicações; 
  • E muitas outras! 

Agora, vou dar um exemplo prático de como implementar um Graph Database utilizando o exemplo introduzido anteriormente.  Nós utilizaremos como serviço de grafos o Azure Cosmos DB Gremlin API que é baseado no Apache TinkerPop. A linguagem de consulta do Apache TinkerPop é a Gremlin, uma linguagem imperativa e funcional que oferece a interface necessparia para implementar algoritmos de consultas em grafos. 

Temos a estrutura de uma query simples do Gremlin: 

 

Observe que é um passo a passo exato dos resultados que desejamos adquirir. Vale reforçar que a ordem em que a query é escrita importa, pois ela pode ser interpretada de várias formas de acordo com as ordens dos comandos. 

O primeiro passo para a criação deste grafo é a inserção dos vértices. Para isso, utilizaremos o comando g.AddV(), onde g representa o grafo. 

 

Para contextualizar, uma label em um Graph Database é uma estrutura utilizada para agrupar nós em um conjunto. No exemplo que estamos utilizando, temos as labels PhoneNumber e E-mail. 

As Primary Keys (pks) que utilizamos são uma propriedade do Cosmos DB Gremlin Api que se baseia em um “Id” em forma de guid, que é um valor exclusivo para o seu vértice. 

É hora de criar as arestas responsáveis por ligar (relacionamento) vértices por meio do comando g.AddE(): 

 

Uma característica crucial das arestas é que elas devem obrigatoriamente estar ligadas entre dois nós, ou seja, é impossível que haja uma aresta com uma de suas extremidades sem ligação direta a um nó. 

Com os vértices e arestas já criados, é possível realizar consultas por meio do Gremlin. Abaixo, vemos alguns exemplos de query diretamente no grafo:  

 

Exemplo 1 – Retornando o vértice do cliente pelo seu id:

 

Exemplo 2 – Retornando as labels e suas respectivas quantidades presentes no grafo:

Obs.: podemos perceber, entre essa query e a anterior, que seus resultados já são estruturalmente diferentes. No exemplo 1, buscamos pela entidade (nó) de chave primária específica.  Já no segundo exemplo, utilizamos a query para buscar dados analíticos sobre o agrupamento das entidades, que é retornado em formato JSON. 

 

Exemplo 3 – Retornando os números de telefone relacionados a um cliente (pelo seu id):


 

Neste exemplo, utilizamos o conceito de travessia citado anteriormente, uma vez que percorremos o caminho entre diferentes vértices por meio das arestas existentes entre eles para encontrar um resultado desejado.  

Close Bitnami banner
Bitnami