Graph Databases

Banco de dados baseado em grafos

História dos grafos

Leonard Euler, em 1736, tentou resolver sem sucesso o problema das sete pontes.

Essa foi a primeira vez que um artigo mencionou o uso dos grafos.

Mas que diabos é um grafo?

Matematicamente são conjuntos de vértices e arestas

A imagem representa um grafo com 6 arestas e 4 vértices

Dados no Mundo real

  • Os dados são "bagunçados" e complexos (nem sempre temos uma estrutura definida)
  • As interações entre os dados são complexas e estão sempre mudando
  • Grafos representam facilmente nossa forma de pensar (modelo de dados) e estão em todas as partes

Aplicações

Estruturas que podem ser representadas com grafos:

  • Sistemas de recomendação
  • Redes sociais
  • Mapeamento (rotas físicas ou virtuais)
  • Genética
  • Física
  • Quimica

BANCO DE DADOS

RDBMS

  • Armazenam seus dados em linhas e colunas
  • Relacionamentos são parte do esquema fixo (tabela x tabela ligadas por chaves)

Grafos

  • Armazenam seus dados em uma rede de nós e arestas
  • Relacionamentos são parte dos dados e possuem um nome explícito

Modelo de dados relacional

Como modelamos os dados?

Modelo de dados em grafos

Como modelamos os dados?

Banco de dados em grafo

Neo4j

  • Propriedades ACID
  • Transações
  • Interface REST
  • Embedable e server
  • Alta performance
  • Suporta 34 bilhões de nós e 34 bilhões de relacionamentos em um grafo

Cypher

Query Language utilizada pelo Neo4j


(algo:TIPO)-[relacionamento:TIPO]->(algo:TIPO) (actor:PERSON)-[rel:ACTED_IN]->(movie:MOVIE)

Spring Data Neo4j

  • Facilita mapear as entidades
  • Facilita mapear queries com cypher
@NodeEntity // O nó em si
@GraphId // O id do nó
@Indexed // Se a propriedade do nó será indexada
@RelatedTo // Cria os relacionamentos entre os nós

Necessidade

Mas então porque utilizar um banco de dados em grafo?

O SESC necessita de um sistema que cadastre locais (espaços físicos) que podem estar ligados com outros locais e esses locais possuem N níveis e atributos cadastrados pelo próprio Sesc.

O papo ta bom, mas...

Chega de blah blah blah e vamos ver na prática !!


Outras Alternativas

Quando falamos de NoSQL diversas, existem diversas alternativas hoje em dia

Esses são apenas alguns exemplos entre muitos que existem:

  • Bancos orientados a documentos - MongoDB/CouchDB
  • Bancos orientados a chave/valor - Redis/Infinispan
  • Bancos orientados a grafos e documentos - OrientDB

Conclusão

  • Graph databases focam em relacionamento entre os dados
  • Modelar grafos é facil
  • Fazer queries é fácil, é como caminhar pelo grafo
  • Grafos são a estrutura de dados natural dos seres humanos
  • Neo4j é uma solução robusta

Conclusão 2

Sempre é bom conhecermos outros caminhos para solucionar um problema, pois assim temos a chance de escolher a melhor ferramenta para cada caso

Conclusão 2

Lembrando sempre...

Obrigado!

Quicktalk - Neo4j

By Thiago Xavier

Quicktalk - Neo4j

  • 94