Neo4j: Uma solução para Big Data

Maykon L Fonseca
Quick Mobile Labs
Published in
3 min readAug 24, 2016

Click here for English version

Um dos maiores desafios do Big Data está em relacionar grandes volumes de dados de forma consistente e eficiente. O que se torna ainda mais complexo quando não se sabe que tipos de dados podem ser inseridos a longo prazo. O que poderia ser melhor para relacionar esses dados do que um banco de dados em grafo? É justamente isso que o Neo4j torna possível.

Neo4j é um banco de dados orientado a grafo, altamente escalável e construído para trabalhar não só com os dados em si mas também os relacionamentos entre eles. Sua engine nativa de armazenamento e processamento de grafos entregam uma performance constante e real-time.

Antes de aprofundar mais sobre o Neo4j é preciso conhecer alguns conceitos:

  • Nó: é uma unidade de dado dentro do grafo;
  • Relacionamento: conecta dois nós;
  • Propriedade: são as informações armazenadas, no formato chave-valor.

A forma mais fácil de começar é através de um container:

docker run --publish=7474:7474 --publish=7687:7687 \
--volume=$HOME/neo4j/data:/data neo4j:3.0

Depois que o container estiver rodando basta acessar http://localhost:7474 e logar com neo4j/neo4j. Em seguida você deverá redefinir a senha de acesso.

Tela Inicial do Neo4j

Nessa primeira tela já ficam disponíveis alguns tutoriais e textos de introdução ao Neo4j.

Na lateral esquerda ficam os menus e no topo é onde são digitados os comandos a serem executados.

Executaremos aqui todas as operações em Cypher, linguagem de consulta em grafo do próprio Neo4j.

Para criar um nó basta executar:

CREATE (:Movie { title:"The Matrix",released:1997 })

Criamos aqui um nó com a label “Movie”, que possui as propriedades “title” e “released”. Os parênteses são utilizados para representar o nó;

Vamos agora criar algo um pouco mais complexo:

CREATE (matrix:Movie { title:"The Matrix",released:1997 })
CREATE (cloudAtlas:Movie { title:"Cloud Atlas",released:2012 })
CREATE (forrestGump:Movie { title:"Forrest Gump",released:1994 })
CREATE (keanu:Person { name:"Keanu Reeves", born:1964 })
CREATE (robert:Person { name:"Robert Zemeckis", born:1951 })
CREATE (tom:Person { name:"Tom Hanks", born:1956 })
CREATE (tom)-[:ACTED_IN { roles: ["Forrest"]}]->(forrestGump)
CREATE (tom)-[:ACTED_IN { roles: ['Zachry']}]->(cloudAtlas)
CREATE (robert)-[:DIRECTED]->(forrestGump)

Nesse exemplo criamos nós “Person” relacionados à nós “Movie” com tipos diferentes de relação(“ACTED_IN”, “DIRECTED”).

As relações são apresentadas entre colchetes e podem possuir também labels e propriedades assim como os nós. Todas as relações devem possuir uma direção.

O resultado deve ser algo semelhante a esse:

Vamos filtrar alguns resultados:

MATCH (p:Person)-[:ACTED_IN]->(m)
WHERE NOT (p)-[:DIRECTED]->()
RETURN p,m

Temos agora todos os atores(“Person”) que atuaram(“ACTED_IN”) em um filme(“Movie”) que não tem nenhum diretor relacionado(“DIRECTED”).

Esses foram apenas alguns exemplos bem simples para demostrar como trabalhar com nós e relacionamentos.

Trabalhar com o Neo4j é muito simples, intuitivo e muito flexível. E é possível fazer muito além do demonstrado aqui.

Para conhecer melhor acesse: https://neo4j.com.

--

--