Banco de Dados

9 jan, 2014

GraphDB Series: o que é um banco de dados de grafos

Publicidade

É normal, quando falamos de banco de dados, lembrarmos primeiramente de bases relacionais, do tipo SQL. Uma base relacional possui a tabelas, colunas, tuplas (linhas), chaves e relacionamentos. Quando temos um relacionamento entre uma tabela e outra, uma das tabelas possui a indicação de foreign key, chave estrangeira. Quando possuímos então o chamado Many to Many (muito para muito) colocamos uma terceira tabela ligando às outras duas e seus relacionamentos.

Em um banco de dados de grafos, relacionamentos são mais naturais. Temos as entidades chamadas de vértices (ou node) que são ligadas entre elas pelas arestas (ou relationships) cada um podendo guardar dados entre os relacionamentos e cada relacionamento pode ter uma direção.

Grafos

A imagem mostra um exemplo da ideia de grafos. As esferas vermelhas são os vértices e as arestas seus relacionamentos. Apesar de todos aqui possuírem a indicação “relaciona”, cada relacionamento pode guardar dados diferentes sobre o relacionamento. Por exemplo: no twitter podemos ligar uma pessoa a outra pelo relacionamento de seguir. Podemos guardar junto a data de início da relação e a pessoa pode seguir de volta. Podemos também ter vértices de outros tipos, como tweets. Uma pessoa se relaciona a um tweet escrevendo ele ou dando RT.

Baseado na teoria de grafos, essas bases são um tipo dentro do mundo das bases noSQL. Ao pensar em noSQL já lembramos que esses são bancos mais rápidos (potencialmente menos seguros) e fáceis de escalar. A velocidade de se comparar um banco de dados relacional com um banco de dados de grafos vem na hora de se comparar uma busca cheia de joins index em um banco SQL e a simplicidade de se buscar relacionamentos em grafos.

“Native graph processing (index-free adjacency) benefits traversal performance, but at the expense of making some non-traversal queries difficult or memory intensive”. Graph Database – Ian Robson, Jim Webber e Emil Eifrem – 2013 – O’Relly

Itens de um banco de dados de Grafos

Vértice:

Também pode ser chamado de nó é a nossa unidade de dados, um conjunto de propiedades do tipo chave valor que representam uma entidade. Um exemplo seria um usuário o Twitter:

  • nome: “Priscila Sato”
  • arroba: “MayogaX”

Aresta:

São os nossos relacionamentos. Eles ligam os vértices por meio de uma rede semântica. Uma aresta pode possuir um sentido, uma orientação e, se necessário, dados sobre esse relacionamento. Exemplo baseado no Twitter: vértice “Priscila” segue o vértice  “Lucas” desde 2012. “Priscila” e “Lucas” são vértices ligados pelo relacionamento “segue” que possui um sentido: do primeiro ao segundo, e possui também dados: a data de início do relacionamento.

Como manipulo acesso a dados em bases de dados de grafos?

A maioria das bases de dados de grafos disponibilizam uma API REST para você poder manipular os dados. Algumas feitas em java disponibilizam um meio amigável para acessar suas classes e fazer buscas em suas bibliotecas. No caso de Neo4J, você pode usar uma linguagem de query específica chamada cypher.

Existe também o BrightstarDB que possui uma lib que eles chamam de Entity Framework para noSQL.

Exemplos de banco de dados de grafos existentes:

  • AllegroGraph

  • ArangoDb

  • Bitsy (java)

  • BrightstarDB (feito para .Net)

  • DEX (possui api .Net e roda em windows)

  • Filament

  • InfiniteGraph

  • InfoGrid

  • HyperGraphDb

  • Oracle Spatial

  • Titan

  • Neo4J (provavelmente o mais famoso de todos)

Mais conteúdo:

Veja também o episódio do DataBase Cast em que eu, Mauro e Wagner falamos sobre banco de dados de grafos. Slides da minha palestra sobre banco de dados de Grafos no TDC 2013 Floripa.

Fonte desse artigo: MayogaX Dev Blog