neo4 j
TRANSCRIPT
Regis Hideki Hattori
Introdução
BD baseado em
Grafos
NósRelacionamen
tos
Travessias
Caminhos
Propriedades
Neo4J
Índice
Grafos
é um
gerencia
gravam dados
em
percorrem
descobrem
são uma sequência
de
conectam
têm têm
mapeados por
Modelo
Características
• Armazenado e processados como grafo;
Características
• Armazenado e processados como grafo;• Transações ACID;
Características
• Armazenado e processados como grafo;• Transações ACID;• Operações CRUD;
Características
• Armazenado e processados como grafo;• Transações ACID;• Operações CRUD;• Escalável para muitos bilhões de nós,
arestas e propriedades;
Características
• Armazenado e processados como grafo;• Transações ACID;• Operações CRUD;• Escalável para muitos bilhões de nós,
arestas e propriedades;• Alta disponibilidade em sistemas
distribuídos;
Características
• Armazenado e processados como grafo;• Transações ACID;• Operações CRUD;• Escalável para muitos bilhões de nós,
arestas e propriedades;• Alta disponibilidade em sistemas
distribuídos;• Cypher;
Características
• Armazenado e processados como grafo;• Transações ACID;• Operações CRUD;• Escalável para muitos bilhões de nós,
arestas e propriedades;• Alta disponibilidade em sistemas
distribuídos;• Cypher;• Algoritmos de travessia;
Características
• Armazenado e processados como grafo;• Transações ACID;• Operações CRUD;• Escalável para muitos bilhões de nós, arestas
e propriedades;• Alta disponibilidade em sistemas distribuídos;• Cypher;• Algoritmos de travessia;• Biblioteca embutida ou por meio de interface
REST;
APIs
Community
Advanced Enterprise
Ferramenta de gerenciamento avançado
Não Sim Sim
Suporte Comunidade
online
E-mail (5x10)
Telefone
(7x24)
Alta disponibilidade, clustering, failover e backups
Não Não Sim
Assinatura anual/instância 0 6k USD 24k USD
Tabela de Preços
Alguns Clientes
Documento x Grafo
Tabela x Grafo
Sharding
MySQL vs Neo4J
x MySQL Neo4J
2 0,016 s 0,010 s
3 30,267 s 0,168 s
4 1.543 s 1,359 s
5 + 1h 2,132 s
• Rede social com 1.000.000 de pessoas;• Cada pessoa com aproximadamente
50 amigos;• Retornar todos os amigos (x=2),
amigos e amigos de amigos (x=3);
Neo4J Server
Dashboard
Data Browser - Console
Data Browser - Grafo
Data Browser – Tabela
Data Browser - Tabela
Data Browser - Estilo
Console – Shell, Gremlin, HTTP
Cypher
joão
ilda
josé
jean
olga
lara
Criar
joão
ilda
josé
jean
olga
lara
Buscar todos
joão
ilda
josé
jean
olga
lara
Buscar por id, casar
joão
ilda
josé
jean
olga
lara
2010
2011
2009
Casar com condição, ?, renomear
joão
ilda
josé
jean
olga
lara
Caminho variável, retorno sem repetição, ordenação
joão
ilda
josé
jean
olga
lara
?
Adição de Relacionamento
joão
ilda
josé
jean
olga
lara
?
Adição de Relacionamento
joão
ilda
josé
jean
olga
lara
ilda
josé
Adição de Relacionamento
joão
ilda
josé
jean
olga
lara
Adição de Relacionamento
joão
ilda
olga
dd
ee
bb
cc
aa
josé
Sistema de Recomendação
joão
ilda
olga
dd
ee
bb
cc
aa
josé
Sistema de Recomendação
joão
ilda
olga
dd
ee
bb
cc
aa
josé
Sistema de Recomendação
Sistema de Recomendação
joão
ilda
olga
dd
ee
bb
cc
aa
josé
Sistema de Recomendação
joão
ilda
olga
dd
ee
bb
cc
aa
josé
Travessia
u
v
x
z
w
y
Travessia “todos os caminhos”
u
v
x
z
w
y
u
v
x
z
w
y
Travessia “todos os caminhos”
Travessia – sem repetir nó
u
v
x
z
w
y
Travessia – sem repetir nó
u
v
x
z
w
y
u
v
x
z
w
y
Travessia – sem repetir nó
Travessia – menor caminho
u
v
x
z
w
y
Travessia – considerando custos
u
v
x
z
w
y
2
1
2 3
3
1
2
5
1
5
Travessia – considerando custos
u
v
x
z
w
y
2
1
2 3
3
1
2
5
1
5
Travessia – considerando custos
u
v
x
z
w
y
2
1
2 3
3
1
2
5
1
5
Detecção de ciclos
u
v
x
z
w
y
Detecção de ciclos
u
v
x
z
w
y
Detecção de ciclos
u
v
x
z
w
y
Detecção de ciclos
u
v
x
z
w
y
Detecção de ciclos
u
v
x
z
w
y
Detecção de ciclos
u
v
x
z
w
y
Detecção de ciclos
u
v
x
z
w
y
Detecção de ciclos
u
v
x
z
w
y
Detecção de ciclos
u
v
x
z
w
y
Detecção de ciclos
u
v
x
z
w
y
Detecção de ciclos
u
v
x
z
w
y
CRUD
• Para todas as operações abaixo, é preciso buscar o nó/relacionamento com o START.– Excluir:
delete no;– Excluir propriedade:
delete no.propriedade;– Atualizar propriedade:
SET no.propriedade = valor;
Questão de Modelagem
rua:Rua Xtipo:
residencial
rua:Rua Ytipo:comerci
al
Nome:João
end end
rua:Rua X rua:Rua Y
Nome:João
end_res
end_com
Apenas endereço residencial:
START joao = node(id)MATCH (joao)->[:end]->(endereco)WHERE endereco.tipo = ‘residencial’RETURN endereco;
Questão de Modelagem
rua:Rua Xtipo:
residencial
rua:Rua YTipo:comerci
al
Nome:João
end end
Todos os endereços:
START joao = node(id)MATCH (joao)->[:end_res|end_com]->(endereco)RETURN endereco;
Questão de Modelagem
rua:Rua X rua:Rua Y
Nome:João
end_res
end_com
Questão de ModelagemNome:João
rua:Rua Yrua:Rua X
end_comend_resendend
Questão de ModelagemNome:João
rua:Rua Yrua:Rua X
end_comend_resendend
Específico:
START joao = node(id)MATCH (joao)->[:end_res]->(endereco)RETURN endereco;
Questão de ModelagemNome:João
rua:Rua Yrua:Rua X
end_comend_resendend
Genérico:
START joao = node(id)MATCH (joao)->[:end]->(endereco)RETURN endereco;
Referências
• BROWN UNIVERSITY. The Neo4j Manual. Disponível em: <http://cs.brown.edu/courses/cs227/papers/neo4j.pdf>. Acesso em: 6 de setembro de 2013.
• IAN, R.; WEBBER, J.; EIFREM, E. Graph Databases. 1. ed. O’Reilly, 2013.
• NEO4J. Learn. Disponível em: <http://www.neo4j.org/learn>. Acesso em 5 de setembro de 2013.