Neo4j: Uma solução para Big Data
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.
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.