neo4 j

70
Regis Hideki Hattori

Upload: bankfacil

Post on 07-Aug-2015

161 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Neo4 j

Regis Hideki Hattori

Page 2: Neo4 j

Introdução

Page 3: Neo4 j

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

Page 4: Neo4 j

Características

• Armazenado e processados como grafo;

Page 5: Neo4 j

Características

• Armazenado e processados como grafo;• Transações ACID;

Page 6: Neo4 j

Características

• Armazenado e processados como grafo;• Transações ACID;• Operações CRUD;

Page 7: Neo4 j

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;

Page 8: Neo4 j

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;

Page 9: Neo4 j

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;

Page 10: Neo4 j

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;

Page 11: Neo4 j

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;

Page 12: Neo4 j

APIs

Page 13: Neo4 j

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

Page 14: Neo4 j

Alguns Clientes

Page 15: Neo4 j

Documento x Grafo

Page 16: Neo4 j

Tabela x Grafo

Page 17: Neo4 j

Sharding

Page 18: Neo4 j

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);

Page 19: Neo4 j

Neo4J Server

Page 20: Neo4 j

Dashboard

Page 21: Neo4 j

Data Browser - Console

Page 22: Neo4 j

Data Browser - Grafo

Page 23: Neo4 j

Data Browser – Tabela

Page 24: Neo4 j

Data Browser - Tabela

Page 25: Neo4 j

Data Browser - Estilo

Page 26: Neo4 j

Console – Shell, Gremlin, HTTP

Page 27: Neo4 j

Cypher

Page 28: Neo4 j

joão

ilda

josé

jean

olga

lara

Criar

Page 29: Neo4 j

joão

ilda

josé

jean

olga

lara

Buscar todos

Page 30: Neo4 j

joão

ilda

josé

jean

olga

lara

Buscar por id, casar

Page 31: Neo4 j

joão

ilda

josé

jean

olga

lara

2010

2011

2009

Casar com condição, ?, renomear

Page 32: Neo4 j

joão

ilda

josé

jean

olga

lara

Caminho variável, retorno sem repetição, ordenação

Page 33: Neo4 j

joão

ilda

josé

jean

olga

lara

?

Adição de Relacionamento

Page 34: Neo4 j

joão

ilda

josé

jean

olga

lara

?

Adição de Relacionamento

Page 35: Neo4 j

joão

ilda

josé

jean

olga

lara

ilda

josé

Adição de Relacionamento

Page 36: Neo4 j

joão

ilda

josé

jean

olga

lara

Adição de Relacionamento

Page 37: Neo4 j

joão

ilda

olga

dd

ee

bb

cc

aa

josé

Sistema de Recomendação

Page 38: Neo4 j

joão

ilda

olga

dd

ee

bb

cc

aa

josé

Sistema de Recomendação

Page 39: Neo4 j

joão

ilda

olga

dd

ee

bb

cc

aa

josé

Sistema de Recomendação

Page 40: Neo4 j

Sistema de Recomendação

joão

ilda

olga

dd

ee

bb

cc

aa

josé

Page 41: Neo4 j

Sistema de Recomendação

joão

ilda

olga

dd

ee

bb

cc

aa

josé

Page 42: Neo4 j

Travessia

u

v

x

z

w

y

Page 43: Neo4 j

Travessia “todos os caminhos”

u

v

x

z

w

y

Page 44: Neo4 j

u

v

x

z

w

y

Travessia “todos os caminhos”

Page 45: Neo4 j

Travessia – sem repetir nó

u

v

x

z

w

y

Page 46: Neo4 j

Travessia – sem repetir nó

u

v

x

z

w

y

Page 47: Neo4 j

u

v

x

z

w

y

Travessia – sem repetir nó

Page 48: Neo4 j

Travessia – menor caminho

u

v

x

z

w

y

Page 49: Neo4 j

Travessia – considerando custos

u

v

x

z

w

y

2

1

2 3

3

1

2

5

1

5

Page 50: Neo4 j

Travessia – considerando custos

u

v

x

z

w

y

2

1

2 3

3

1

2

5

1

5

Page 51: Neo4 j

Travessia – considerando custos

u

v

x

z

w

y

2

1

2 3

3

1

2

5

1

5

Page 52: Neo4 j

Detecção de ciclos

u

v

x

z

w

y

Page 53: Neo4 j

Detecção de ciclos

u

v

x

z

w

y

Page 54: Neo4 j

Detecção de ciclos

u

v

x

z

w

y

Page 55: Neo4 j

Detecção de ciclos

u

v

x

z

w

y

Page 56: Neo4 j

Detecção de ciclos

u

v

x

z

w

y

Page 57: Neo4 j

Detecção de ciclos

u

v

x

z

w

y

Page 58: Neo4 j

Detecção de ciclos

u

v

x

z

w

y

Page 59: Neo4 j

Detecção de ciclos

u

v

x

z

w

y

Page 60: Neo4 j

Detecção de ciclos

u

v

x

z

w

y

Page 61: Neo4 j

Detecção de ciclos

u

v

x

z

w

y

Page 62: Neo4 j

Detecção de ciclos

u

v

x

z

w

y

Page 63: Neo4 j

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;

Page 64: Neo4 j

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

Page 65: Neo4 j

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

Page 66: Neo4 j

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

Page 67: Neo4 j

Questão de ModelagemNome:João

rua:Rua Yrua:Rua X

end_comend_resendend

Page 68: Neo4 j

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;

Page 69: Neo4 j

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;

Page 70: Neo4 j

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.