Graph Databases
       e
    Neo4J
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
NOSQL

• NOSQL não é “Nunca SQL”
• NOSQL não é “Não ao SQL”
• NOSQL não é “Geladeira”
“Categorias” de NOSQL

 •   Key-Value
 •   Column family
 •   Document
 •   Graph
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
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
Graph Theory
Graph Theory




   • Físico e matemático do século 18
   • Primeiro paper publicado sobre teoria de
     grafos foi feito por Euler em 1736
Graph Theory




   • Vamos ao que interessa 
Graph Theory
Graph Theory




   Grafo – Um conjunto de vértices ligados por arestas
Graph Theory




   Grafo – Um conjunto de vértices ligados por arestas
   Grafo – Um conjunto de nós e relacionamentos que se
           conectam 
Graph Theory



 • nós
 • relacionamentos entre os nós
 • propriedades em ambos




  Property Graph
Matrix Graph
Graph Theory – Algoritmos de percurso



• depth-first search — DFS – Profundidade
• breadth first search — BFS - Largura
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 
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;
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.
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)
DEMO




 Sem mandinga agora por favor
NEO4J – Consultando dados



• Traversal Framework
• Cypher Query Language
NEO4J – Voltando ao Matrix




  • Buscar amigos do NEO
  • Traversal
NEO4J – Voltando ao Matrix




  • Buscar amigos do NEO
  • Traversal
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
NEO4J – WebAdmin
DEMO– Criando índice




• Criando índice de maneira porca só para mostrar o WebAdmin 
NEO4J – Cyper Query Language



• “Tipo um SQL”
• Novo jeito de “queriar”
• Bem mais intuitivo para nós (SQL boys) do que o
  Traversal Framework
DEMO – Cyper Query Language
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á)
Obrigado. Perguntas? Se eu souber responder claro 

[MinhaVida TechDay] NEO4J

  • 1.
  • 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”
  • 4.
    “Categorias” de NOSQL • Key-Value • Column family • Document • Graph
  • 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
  • 7.
  • 8.
    Graph Theory • Físico e matemático do século 18 • Primeiro paper publicado sobre teoria de grafos foi feito por Euler em 1736
  • 9.
    Graph Theory • Vamos ao que interessa 
  • 10.
  • 11.
    Graph Theory Grafo – Um conjunto de vértices ligados por arestas
  • 12.
    Graph Theory Grafo – Um conjunto de vértices ligados por arestas Grafo – Um conjunto de nós e relacionamentos que se conectam 
  • 13.
    Graph Theory •nós • relacionamentos entre os nós • propriedades em ambos Property Graph
  • 14.
  • 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 • Oque é? – É 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)
  • 20.
    DEMO Sem mandingaagora por favor
  • 21.
    NEO4J – Consultandodados • Traversal Framework • Cypher Query Language
  • 22.
    NEO4J – Voltandoao Matrix • Buscar amigos do NEO • Traversal
  • 23.
    NEO4J – Voltandoao Matrix • Buscar amigos do NEO • Traversal
  • 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
  • 25.
  • 26.
    DEMO– Criando índice •Criando índice de maneira porca só para mostrar o WebAdmin 
  • 27.
    NEO4J – CyperQuery Language • “Tipo um SQL” • Novo jeito de “queriar” • Bem mais intuitivo para nós (SQL boys) do que o Traversal Framework
  • 28.
    DEMO – CyperQuery Language
  • 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á)
  • 30.
    Obrigado. Perguntas? Seeu souber responder claro 