Este documento fornece um resumo sobre bancos de dados de grafos e o banco de dados de grafos Neo4j. Ele discute brevemente a teoria dos grafos, categorias de bancos de dados NoSQL, como Neo4j armazena e consulta dados usando um modelo de grafo, e recursos para aprender mais sobre o tópico.
2. Cleber Dantas
• 8+ anos de experiência na área de TI
• Especialista em desenvolvimento Web
• Líder técnico e Desenvolvedor
• Ministro treinamentos sobre desenvolvimento
Web
• Dou algumas palestras em eventos de tecnologia
• @cleberdantas
• http://www.cleberdantas.com
3. NOSQL
• NOSQL não é “Nunca SQL”
• NOSQL não é “Não ao SQL”
• NOSQL não é “Geladeira”
5. NOSQL
Key-Value
• Key-value stores
• Based on DHTs / Amazon's Dynamo paper
• Data model: (global) collection of K-V pairs
• Example: Dynomite, Voldemort, Tokyo
• BigTable clones Column Family
• Based on Google's BigTable paper
• Data model: big table, column families
• Example: Hbase, Hypertable
6. NOSQL
Document
• Document databases
• Inspired by Lotus Notes
• Data model: collections of K-V collections
• Example: CouchDB, MongoDB
• Graph databases Graph
• Inspired by Euler & graph theory
• Data model: nodes, rels, K-V on both
• Example: AllegroGraph, VertexDB, Neo4j
15. Graph Theory – Algoritmos de percurso
• depth-first search — DFS – Profundidade
• breadth first search — BFS - Largura
16. Graph Theory – DFS
1
A
R
A
S
F
Q
2
B 4
C 8
D 12
E 13
F E
K
D Pilha
3
G 5
H 7
I 9
J 14
K 16
L 19
M L
C
M
B
6
N 10
O 11
P 15
Q 17
R 18
S O
G
P
ALGORITMO: I
empilhe o nó raiz da árvore; J
H N
enquanto existirem nós empilhados:
desempilhe e marque o nó;
para todos os nós filhos deste nó marcado:
empilhe o nó filho;
Peguei da net
17. Graph Theory – BFS
S
A
1
A R
B
Q
C
P
2 3 4 5 6
B C D E F D Fila
O
E
N
7
G 8
H 9
I 10
J 11
K 12
L 13
M F
M
G
14
N 15
O 16
P 17
Q 18
R 19
S L
H
K
I J
ALGORITMO:
enfileire o nó raiz da árvore;
enquanto existirem nós enfileirados:
desenfileire e marque o nó;
para todos os nós filhos deste nó marcado:
enfileire o nó filho;
18. Graph Databases
• O que é?
– É um sistema que armazena dados em forma de grafo
(a mais genérica das estruturas de dados), capaz de
representar qualquer tipo de dado de uma maneira
altamente acessível.
19. NEO4J
• O que é?
– Um banco de dados de grafo (ver slide anterior, sem
maldade)
– Open source (mas não free, quer dizer depende -
AGPL)
– Escrito em Java, a princípio para linguagens da JVM
(4J)
– Possui API REST (Client de .NET utiliza)
– Escala bem na vertical, mas na horizontal ainda não
(estão trabalhando nisso)
24. NEO4J – Índice
• Podemos criar índices para propriedades de
nós e relacionamentos
• Por padrão quando criamos um nó ele é
indexado pelo ID incremental interno do
NEO4J (não muito útil a princípio)
• A indexação é feita utilizando Lucene
• auto_index parece que funciona mesmo
29. Recursos
• http://en.wikipedia.org/wiki/Graph_theory
• http://www.neo4j.org/
• http://stackoverflow.com/questions/tagged/neo4j
• http://watch.neo4j.org/
• http://lmgtfy.com/?q=neo4j
• http://www.cleberdantas.com (não tem nada sobre
isso, mas é sempre válido um jabá)