SlideShare a Scribd company logo
The Pathology of Graph Databases

              Marko A. Rodriguez
            Graph Systems Architect

           http://markorodriguez.com
            http://twitter.com/twarko
              http://tinkerpop.com




                      TinkerPop

     WindyCityDB - Chicago, Illinois – June 25, 2011
Abstract



There is nothing more fascinating and utterly mind-
bending than traversing a graph. Those who
succumb to this data processing pattern euphorically
suffer from graph pathology.

This is a case study of the Graph Addict.




                                  Gremlin          G = (V, E)
           What is presented is as of Gremlin 1.1 (Released July 15, 2011)
What you are about to see may disturb you.

It has infected
  Neo4j, OrientDB, DEX, RDF Sail, TinkerGraph, and ReXster.



                                                    reXster


    ...it will infect others.
?
        ?
?
~$ cd /tmp/graphdb
graphdb$ gremlin
,,,/
         (o o)
-----o00o(_)-o00o-----
gremlin>
The Basics
Gremlin is a Groovy DSL and as such, has native JVM access.




'Gremlin is a Groovy DSL and as such, has native JVM access.'
3




1+2
gremlin




'gremlin'
emlin




'gremlin'.substring(2)
[1,2,3,4,5]




list = [1,2,3,4,5]
key1=value
               key2=123




map = [key1:'value',key2:123]
<modem sound/>




socket = new Socket('127.0.0.1',8182)
true




TextAnalysis.isMean('You are that which is not good.')
Graph Traversing
/tmp/graphdb




g = new Neo4jGraph('/tmp/graphdb')
/tmp/graphdb




g
1




g.v(1)
name=marko

              1




g.v(1).name
1




g.v(1)
city=santafe

                   1




g.v(1).city
1




g.v(1)
name=marko
          city=santafe

               1




g.v(1).map()
1




g.v(1)
created




              1    knows



                  knows




g.v(1).outE
created




              1    knows



                  knows




g.v(1).outE
null
                       created



                    since=2010
              1        knows


                    since=2005
                      knows




g.v(1).outE.since
created




              1    knows



                  knows




g.v(1).outE
2



                  created




              1   knows     3


                  knows



                            4
g.v(1).outE.inV
2   name=rexster



                       created




              1        knows     3   name=stephen


                       knows



                                 4   name=peter
g.v(1).outE.inV.name
/tmp/graphdb




g
1




g.v(1)
created




              1    knows



                  knows




g.v(1).outE
created




              1      knows



                    knows




g.v(1).outE[[label:'knows']]
1




g.v(1)
created




              1    knows



                  knows




g.v(1).outE
created




              1      knows



                    knows




g.v(1).outE.filter{it.label=='knows'}
2




g.v(1).outE.filter{it.label=='knows'}.count()
created




              1    knows



                  knows




g.v(1).outE
created




              1      knows



                    knows




g.v(1).outE.filter{it.label=='knows' & since > 2006}
[OutEdgesPipe, LabelFilterPipe(NOT_EQUAL,knows), InVertexPipe]




g.v(1).outE[[label:'knows']].inV.toString()
1




g.v(1)
1        knows


                       knows




g.v(1).outE('knows')
1     knows   3


                    knows


                            4

g.v(1).outE('knows').inV
[OutEdgesPipe(knows), InVertexPipe]




g.v(1).outE('knows').inV.toString()
1




g.v(1)
1       knows   3


                      knows


                              4

g.v(1).out('knows')
1     knows   3   name=stephen


                    knows


                            4   name=peter

g.v(1).out('knows').name
1     knows   3   name=stephen


                    knows


                            4   name=peter

g.v(1).out('knows').name.filter{it.startsWith('st')}
1     knows   3   name=stephen


                    knows


                            4   name=peter

g.v(1).out('knows').name.filter{it.matches('p.{4}')}
1     knows   3   name=stephen


                    knows


                            4   name=peter

g.v(1).out('knows').name.filter{it.matches('p.{4}') & false}
[OutPipe(knows)]




g.v(1).out('knows').toString()
1




g.v(1)
o   o!
                    o   oH
                   W


               1




g.v(1).filter{new Random().nextBoolean()}
1




g.v(1)
t!
                   A lrigh


               1




g.v(1).filter{new Random().nextBoolean()}
1




g.v(1)
Doh!

               1




g.v(1).filter{new Random().nextBoolean()}
1
1
1
1
Graph Inference
1




g.v(1)
2


                        created



               1




g.v(1).out('created')
2   name=rexster


                      created



               1




g.v(1).out('created').name
1




g.v(1)
2


                        created



               1




g.v(1).out('created')
2


                      created   created



               1                  3




g.v(1).out('created').in('created')
2


                      created   created



               1                  3




g.v(1).out('created').in('created').except([g.v(1)])
2


                      created   created



               1                  3       name=stephen




g.v(1).out('created').in('created').except([g.v(1)]).name
2


                      created   created



               1                  3       name=stephen




g.v(1).out('created').in('created').except([g.v(1)]).name.back(1)
2


                       created      created



               1     collaborator     3       name=stephen




g.v(1).out('created').in('created').except([g.v(1)]).name.back(1).
  sideEffect{g.addEdge(g.v(1),it,'collaborator')}
2


                       created      created



               1     collaborator     3       name=stephen




g.v(1).out('created').in('created').except([g.v(1)]).name.back(1).
  sideEffect{g.addEdge(g.v(1),it,'collaborator')}.filter{false}
Graph Backtracking and Looping
1




g.v(1)
2


                        created



               1




g.v(1).out('created')
5

                                       imports


                                2      imports   6

                                       imports
                      created
                                                 7

               1




g.v(1).out('created').out('imports')
5   name=blueprints

                                       imports


                                2      imports   6   name=pipes

                                       imports
                      created
                                                 7   name=gremlin

               1




g.v(1).out('created').out('imports').name
5   name=blueprints

                                       imports


                                2      imports      6   name=pipes

                                       imports
                      created
                                                    7   name=gremlin

               1




g.v(1).out('created').out('imports').name.back(1)
8

                                           imports

                                                     5      name=blueprints

                                        imports          imports
                                                                              imports
                                2       imports      6       name=pipes

                                        imports
                                                         imports
                      created
                                                     7       name=gremlin

               1




g.v(1).out('created').out('imports').name.back(1).out('imports')
8

                                           imports

                                                     5      name=blueprints

                                        imports          imports
                                                                              imports
                                2       imports      6       name=pipes

                                        imports
                                                         imports
                      created
                                                     7       name=gremlin

               1




g.v(1).out('created').out('imports').name.back(1).out('imports')
name=neo4j       8

                                                 imports

                                                           5      name=blueprints

                                              imports          imports
                                                                                    imports
                                      2       imports      6       name=pipes

                                              imports
                                                               imports
                      created
                                                           7       name=gremlin

               1




g.v(1).out('created').out('imports').name.back(1).out('imports').name
name=neo4j       8

                                                 imports

                                                           5      name=blueprints

                                              imports          imports
                                                                                    imports
                                      2       imports      6       name=pipes

                                              imports
                                                               imports
                      created
                                                           7       name=gremlin

               1




g.v(1).out('created').out('imports').name.back(1).out('imports').name
  .back(1)
name=neo4j       8

                                                 imports

                                                           5      name=blueprints

                                              imports          imports
                                                                                    imports
                                      2       imports      6       name=pipes

                                              imports
                                                               imports
                      created
                                                           7       name=gremlin

               1




g.v(1).out('created').out('imports').name.back(1).out('imports').name
  .back(1).out('imports')
name=neo4j       8

                                                 imports

                                                           5      name=blueprints

                                              imports          imports
                                                                                    imports
                                      2       imports      6       name=pipes

                                              imports
                                                               imports
                      created
                                                           7       name=gremlin

               1




g.v(1).out('created').out('imports').name.back(1).out('imports').name
  .back(1).out('imports').out('imports')
name=neo4j       8

                                                 imports

                                                           5      name=blueprints

                                              imports          imports
                                                                                    imports
                                      2       imports      6       name=pipes

                                              imports
                                                               imports
                      created
                                                           7       name=gremlin

               1




g.v(1).out('created').out('imports').name.back(1).out('imports').name
  .back(1).out('imports').out('imports').out('imports')
name=neo4j       8

                               imports

                                         5      name=blueprints

                            imports          imports
                                                                  imports
                    2       imports      6       name=pipes

                            imports
                                             imports
    created
                                         7       name=gremlin

1
name=neo4j       8

                                                 imports

                                                           5      name=blueprints

                                              imports          imports
                                                                                    imports
                                      2       imports      6       name=pipes

                                              imports
                                                               imports
                      created
                                                           7       name=gremlin

               1




g.v(1).out('created').out('imports').loop(1){it.loops < 5}
name=neo4j       8

                                                 imports

                                                           5      name=blueprints

                                              imports          imports
                                                                                    imports
                                      2       imports      6       name=pipes

                                              imports
                                                               imports
                      created
                                                           7       name=gremlin

               1




g.v(1).out('created').out('imports').loop(1){it.loops < 5}
name=neo4j       8

                                                 imports

                                                           5      name=blueprints

                                              imports          imports
                                                                                    imports
                                      2       imports      6       name=pipes

                                              imports
                                                               imports
                      created
                                                           7       name=gremlin

               1




g.v(1).out('created').out('imports').loop(1){it.loops < 5}
name=neo4j       8

                                                 imports

                                                           5      name=blueprints

                                              imports          imports
                                                                                    imports
                                      2       imports      6       name=pipes

                                              imports
                                                               imports
                      created
                                                           7       name=gremlin

               1




g.v(1).out('created').out('imports').loop(1){it.loops < 5}
name=neo4j       8

                                                 imports

                                                           5      name=blueprints

                                              imports          imports
                                                                                    imports
                                      2       imports      6       name=pipes

                                              imports
                                                               imports
                      created
                                                           7       name=gremlin

               1




g.v(1).out('created').out('imports').loop(1){it.loops < 5}
name=neo4j       8

                                                 imports

                                                           5      name=blueprints

                                              imports          imports
                                                                                    imports
                                      2       imports      6       name=pipes

                                              imports
                                                               imports
                      created
                                                           7       name=gremlin

               1




g.v(1).out('created').out('imports').loop(1){it.loops < 5}
name=neo4j       8

                                                     imports

                                                               5      name=blueprints

                                                  imports          imports
                                                                                        imports
                                      2           imports      6       name=pipes

                                                  imports
                                                                   imports
                      created
                                                               7       name=gremlin

               1



                                              2




g.v(1).out('created').out('imports').loop(1){it.loops < 5}
name=neo4j       8

                                                     imports

                                                               5      name=blueprints

                                                  imports          imports
                                                                                        imports
                                      2           imports      6       name=pipes

                                                  imports
                                                                   imports
                      created
                                                               7       name=gremlin

               1



                                              3




g.v(1).out('created').out('imports').loop(1){it.loops < 5}
name=neo4j       8

                                                     imports

                                                               5      name=blueprints

                                                  imports          imports
                                                                                        imports
                                      2           imports      6       name=pipes

                                                  imports
                                                                   imports
                      created
                                                               7       name=gremlin

               1



                                              4




g.v(1).out('created').out('imports').loop(1){it.loops < 5}
name=neo4j       8

                                                 imports

                                                           5      name=blueprints

                                              imports          imports
                                                                                    imports
                                      2       imports      6       name=pipes

                                              imports
                                                               imports
                      created
                                                           7       name=gremlin

               1




g.v(1).out('created').out('imports').loop(1){it.loops < 5}
m




m = [:]
m




           name=neo4j       8

                                   imports

                                             5      name=blueprints

                                imports          imports
                                                                      imports
                        2       imports      6       name=pipes

                                imports
                                                 imports
        created
                                             7       name=gremlin

    1
m




                         name=neo4j       8

                                                 imports

                                                           5      name=blueprints

                                              imports          imports
                                                                                    imports
                                      2       imports      6       name=pipes

                                              imports
                                                               imports
                      created
                                                           7       name=gremlin

               1




g.v(1).out('created').out('import').groupCount(m).loop(2){true}
m




                         name=neo4j       8

                                                 imports

                                                           5      name=blueprints

                                              imports          imports
                                                                                    imports
                                      2       imports      6       name=pipes

                                              imports
                                                               imports
                      created
                                                           7       name=gremlin

               1




g.v(1).out('created').out('import').groupCount(m).loop(2){true}
m




                         name=neo4j       8

                                                 imports

                                                           5      name=blueprints

                                              imports          imports
                                                                                    imports
                                      2       imports      6       name=pipes

                                              imports
                                                               imports
                      created
                                                           7       name=gremlin

               1




g.v(1).out('created').out('import').groupCount(m).loop(2){true}
v[5]=1
 m   v[6]=1
     v[7]=1




                         name=neo4j       8

                                                 imports

                                                           5      name=blueprints

                                              imports          imports
                                                                                    imports
                                      2       imports      6       name=pipes

                                              imports
                                                               imports
                      created
                                                           7       name=gremlin

               1




g.v(1).out('created').out('import').groupCount(m).loop(2){true}
v[5]=1
 m   v[6]=1
     v[7]=1




                         name=neo4j       8

                                                 imports

                                                           5      name=blueprints

                                              imports          imports
                                                                                    imports
                                      2       imports      6       name=pipes

                                              imports
                                                               imports
                      created
                                                           7       name=gremlin

               1




g.v(1).out('created').out('import').groupCount(m).loop(2){true}
v[5]=3
     v[6]=2
 m   v[7]=1
     v[8]=1




                         name=neo4j       8

                                                 imports

                                                           5      name=blueprints

                                              imports          imports
                                                                                    imports
                                      2       imports      6       name=pipes

                                              imports
                                                               imports
                      created
                                                           7       name=gremlin

               1




g.v(1).out('created').out('import').groupCount(m).loop(2){true}
v[5]=3
     v[6]=2
 m   v[7]=1
     v[8]=1




                         name=neo4j       8

                                                 imports

                                                           5      name=blueprints

                                              imports          imports
                                                                                    imports
                                      2       imports      6       name=pipes

                                              imports
                                                               imports
                      created
                                                           7       name=gremlin

               1




g.v(1).out('created').out('import').groupCount(m).loop(2){true}
v[5]=4
     v[6]=2
 m   v[7]=1
     v[8]=3




                         name=neo4j       8

                                                 imports

                                                           5      name=blueprints

                                              imports          imports
                                                                                    imports
                                      2       imports      6       name=pipes

                                              imports
                                                               imports
                      created
                                                           7       name=gremlin

               1




g.v(1).out('created').out('import').groupCount(m).loop(2){true}
v[5]=4
     v[6]=2
 m   v[7]=1
     v[8]=3




                         name=neo4j       8

                                                 imports

                                                           5      name=blueprints

                                              imports          imports
                                                                                    imports
                                      2       imports      6       name=pipes

                                              imports
                                                               imports
                      created
                                                           7       name=gremlin

               1




g.v(1).out('created').out('import').groupCount(m).loop(2){true}
v[5]=4
     v[6]=2
 m   v[7]=1
     v[8]=4




                         name=neo4j       8

                                                 imports

                                                           5      name=blueprints

                                              imports          imports
                                                                                    imports
                                      2       imports      6       name=pipes

                                              imports
                                                               imports
                      created
                                                           7       name=gremlin

               1




g.v(1).out('created').out('import').groupCount(m).loop(2){true}
v[5]=4
     v[6]=2
 m   v[7]=1
     v[8]=4




                         name=neo4j       8

                                                 imports

                                                           5      name=blueprints

                                              imports          imports
                                                                                    imports
                                      2       imports      6       name=pipes

                                              imports
                                                               imports
                      created
                                                           7       name=gremlin

               1




g.v(1).out('created').out('import').groupCount(m).loop(2){true}
m




m = [:]
m




           name=neo4j       8

                                   imports

                                             5      name=blueprints

                                imports          imports
                                                                      imports
                        2       imports      6       name=pipes

                                imports
                                                 imports
        created
                                             7       name=gremlin

    1
m




                           name=neo4j       8

                                                   imports

                                                             5      name=blueprints

                                                imports          imports
                                                                                      imports
                                        2       imports      6       name=pipes

                                                imports
                                                                 imports
                        created
                                                             7       name=gremlin

                1




g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
m




                           name=neo4j       8

                                                   imports

                                                             5      name=blueprints

                                                imports          imports
                                                                                      imports
                                        2       imports      6       name=pipes

                                                imports
                                                                 imports
                        created
                                                             7       name=gremlin

                1




g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
m




                           name=neo4j       8

                                                   imports

                                                             5      name=blueprints

                                                imports          imports
                                                                                      imports
                                        2       imports      6       name=pipes

                                                imports
                                                                 imports
                        created
                                                             7       name=gremlin

                1




g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
m




                           name=neo4j       8

                                                   imports

                                                             5      name=blueprints

                                                imports          imports
                                                                                      imports
                                        2       imports      6       name=pipes

                                                imports
                                                                 imports
                        created
                                                             7       name=gremlin

                1




g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
blueprints=1
 m     pipes=1
      gremlin=1




                           name=neo4j       8

                                                   imports

                                                             5      name=blueprints

                                                imports          imports
                                                                                      imports
                                        2       imports      6       name=pipes

                                                imports
                                                                 imports
                        created
                                                             7       name=gremlin

                    1




g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
blueprints=1
 m     pipes=1
      gremlin=1




                           name=neo4j       8

                                                   imports

                                                             5      name=blueprints

                                                imports          imports
                                                                                      imports
                                        2       imports      6       name=pipes

                                                imports
                                                                 imports
                        created
                                                             7       name=gremlin

                    1




g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
blueprints=1
 m     pipes=1
      gremlin=1




                           name=neo4j       8

                                                   imports

                                                             5      name=blueprints

                                                imports          imports
                                                                                      imports
                                        2       imports      6       name=pipes

                                                imports
                                                                 imports
                        created
                                                             7       name=gremlin

                    1




g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
blueprints=1
 m     pipes=1
      gremlin=1




                           name=neo4j       8

                                                   imports

                                                             5      name=blueprints

                                                imports          imports
                                                                                      imports
                                        2       imports      6       name=pipes

                                                imports
                                                                 imports
                        created
                                                             7       name=gremlin

                    1




g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
blueprints=3
       pipes=2
 m    gremlin=1
       neo4j=1




                           name=neo4j       8

                                                   imports

                                                             5      name=blueprints

                                                imports          imports
                                                                                      imports
                                        2       imports      6       name=pipes

                                                imports
                                                                 imports
                        created
                                                             7       name=gremlin

                    1




g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
blueprints=3
       pipes=2
 m    gremlin=1
       neo4j=1




                           name=neo4j       8

                                                   imports

                                                             5      name=blueprints

                                                imports          imports
                                                                                      imports
                                        2       imports      6       name=pipes

                                                imports
                                                                 imports
                        created
                                                             7       name=gremlin

                    1




g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
blueprints=3
       pipes=2
 m    gremlin=1
       neo4j=1




                           name=neo4j       8

                                                   imports

                                                             5      name=blueprints

                                                imports          imports
                                                                                      imports
                                        2       imports      6       name=pipes

                                                imports
                                                                 imports
                        created
                                                             7       name=gremlin

                    1




g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
blueprints=3
       pipes=2
 m    gremlin=1
       neo4j=1




                           name=neo4j       8

                                                   imports

                                                             5      name=blueprints

                                                imports          imports
                                                                                      imports
                                        2       imports      6       name=pipes

                                                imports
                                                                 imports
                        created
                                                             7       name=gremlin

                    1




g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
blueprints=4
       pipes=2
 m    gremlin=1
       neo4j=3




                           name=neo4j       8

                                                   imports

                                                             5      name=blueprints

                                                imports          imports
                                                                                      imports
                                        2       imports      6       name=pipes

                                                imports
                                                                 imports
                        created
                                                             7       name=gremlin

                    1




g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
blueprints=4
       pipes=2
 m    gremlin=1
       neo4j=3




                           name=neo4j       8

                                                   imports

                                                             5      name=blueprints

                                                imports          imports
                                                                                      imports
                                        2       imports      6       name=pipes

                                                imports
                                                                 imports
                        created
                                                             7       name=gremlin

                    1




g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
blueprints=4
       pipes=2
 m    gremlin=1
       neo4j=3




                           name=neo4j       8

                                                   imports

                                                             5      name=blueprints

                                                imports          imports
                                                                                      imports
                                        2       imports      6       name=pipes

                                                imports
                                                                 imports
                        created
                                                             7       name=gremlin

                    1




g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
blueprints=4
       pipes=2
 m    gremlin=1
       neo4j=3




                           name=neo4j       8

                                                   imports

                                                             5      name=blueprints

                                                imports          imports
                                                                                      imports
                                        2       imports      6       name=pipes

                                                imports
                                                                 imports
                        created
                                                             7       name=gremlin

                    1




g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
blueprints=4
       pipes=2
 m    gremlin=1
       neo4j=4




                           name=neo4j       8

                                                   imports

                                                             5      name=blueprints

                                                imports          imports
                                                                                      imports
                                        2       imports      6       name=pipes

                                                imports
                                                                 imports
                        created
                                                             7       name=gremlin

                    1




g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
blueprints=4
       pipes=2
 m    gremlin=1
       neo4j=4




                           name=neo4j       8

                                                   imports

                                                             5      name=blueprints

                                                imports          imports
                                                                                      imports
                                        2       imports      6       name=pipes

                                                imports
                                                                 imports
                        created
                                                             7       name=gremlin

                    1




g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
blueprints=4
       pipes=2
 m    gremlin=1
       neo4j=4




                           name=neo4j       8

                                                   imports

                                                             5      name=blueprints

                                                imports          imports
                                                                                      imports
                                        2       imports      6       name=pipes

                                                imports
                                                                 imports
                        created
                                                             7       name=gremlin

                    1




g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
Graph Paths
1




g.v(1)
1




g.v(1).as('x')
9                        10




            child       child




                    1




g.v(1).as('x').in('child')
9                        10




            child       child




                    1




g.v(1).as('x').in('child').loop('x')
child                    child




       9                         10




            child        child




                     1




g.v(1).as('x').in('child').loop('x'){it.object.in.count() != 0}
child                    child

             child                    child




       9                         10




            child        child




                     1




g.v(1).as('x').in('child').loop('x'){it.object.in.count() != 0}
child                    child

             child                    child

             child                    child




       9                         10




            child        child




                     1




g.v(1).as('x').in('child').loop('x'){it.object.in.count() != 0}
100,000,000                  100,000,001

                  child                        child
                   ...                          ...


                  child                        child

                  child                        child

                  child                        child




        9                             10




              child           child




                          1




g.v(1).as('x').in('child').loop('x'){it.object.in.count() != 0}
100,000,000                  100,000,001

                  child                        child
                   ...                          ...


                  child                        child

                  child                        child

                  child                        child




        9                             10




              child           child
                                           [v[1], v[9], ..., v[100,000,000]]
                                           [v[1], v[10], ..., v[100,000,001]]
                                           ...
                          1




g.v(1).as('x').in('child').loop('x'){it.object.in.count() != 0}.paths
name=angelina                  name=brad

    100,000,000                  100,000,001

                  child                        child
                   ...                          ...


                  child                        child

                  child                        child

                  child                        child




        9                             10




              child           child




                          1




g.v(1).as('x').in('child').loop('x'){it.object.in.count() != 0}.name
name=angelina                  name=brad

    100,000,000                  100,000,001

                  child                        child
                   ...                          ...


                  child                        child

                  child                        child

                  child                        child




        9                             10




              child           child
                                                 [v[1], v[9], ..., v[100,000,000], angelina]
                                                 [v[1], v[10], ..., v[100,000,001], brad]
                                                 ...
                          1




g.v(1).as('x').in('child').loop('x'){it.object.in.count() != 0}.name.paths
1




g.v(1)
child       child




                    1




g.v(1).inE('child')
thinks="You suck."         thinks="You're great."

               child        child




                        1




g.v(1).inE('child').filter{TextAnalysis.isMean(it.thinks)}
thinks="You suck."

               child




                        1




g.v(1).inE('child').filter{TextAnalysis.isMean(it.thinks)}
9


   thinks="You suck."

               child




                        1




g.v(1).inE('child').filter{TextAnalysis.isMean(it.thinks)}.outV
irl."
                                    ag
                           w   like
                      thro
              ou
         ks="Y
  thin
                           thinks="No pony!"
              thi
                  n   ks
                        ="Y
                           ou
                                're
                                      fat
                                         ."
 thinks="Get a real job."




                 9


    thinks="You suck."

                               child




                                                  1




g.v(1).inE('child').filter{TextAnalysis.isMean(it.thinks)}.outV.loop(3){true}
irl."
                                    ag
                           w   like
                      thro
              ou
         ks="Y
  thin
                           thinks="No pony!"
              thi
                  n   ks
                        ="Y
                           ou
                                're
                                      fat
                                         ."
 thinks="Get a real job."




                 9


    thinks="You suck."

                               child




                                                  1




g.v(1).inE('child').filter{TextAnalysis.isMean(it.thinks)}.outV.loop(3){true}
Graph Pattern Matching
name=neo4j       8

                               imports

                                         5      name=blueprints

                            imports          imports
                                                                  imports
                    2       imports      6       name=pipes

                            imports
                                             imports
    created
                                         7       name=gremlin

1
SELECT ?x ?y WHERE {
  1 created ?x .
  ?x imports ?y
}


                   name=neo4j       8

                                           imports

                                                     5      name=blueprints

                                        imports          imports
                                                                              imports
                                2       imports      6       name=pipes

                                        imports
                                                         imports
                created
                                                     7       name=gremlin

          1
SELECT ?x ?y WHERE {
  1 created ?x .
  ?x imports ?y
}


                   name=neo4j       8

                                           imports

                                                     5      name=blueprints

                                        imports          imports
                                                                              imports
                                2       imports      6       name=pipes

                                        imports
                                                         imports
                created
                                                     7       name=gremlin

          1
SELECT ?x ?y WHERE {
  1 created ?x .
  ?x imports ?y
}


                   name=neo4j       8

                                           imports

                                                     5      name=blueprints

                                        imports          imports
                                                                              imports
                                2       imports      6       name=pipes

                                        imports
                                                         imports
                created
                                                     7       name=gremlin

          1
SELECT ?x ?y WHERE {                ?x     ?y
  1 created ?x .                    v[2]   v[5]
                                    v[2]   v[6]
  ?x imports ?y                     v[2]   v[7]
}


                   name=neo4j       8

                                              imports

                                                        5      name=blueprints

                                           imports          imports
                                                                                 imports
                                2          imports      6       name=pipes

                                           imports
                                                            imports
                created
                                                        7       name=gremlin

          1
name=neo4j       8

                               imports

                                         5      name=blueprints

                            imports          imports
                                                                  imports
                    2       imports      6       name=pipes

                            imports
                                             imports
    created
                                         7       name=gremlin

1
t




                         name=neo4j       8

                                                 imports

                                                           5      name=blueprints

                                              imports          imports
                                                                                    imports
                                      2       imports      6       name=pipes

                                              imports
                                                               imports
                      created
                                                           7       name=gremlin

                  1




t = new Table()
t




                name=neo4j       8

                                        imports

                                                  5      name=blueprints

                                     imports          imports
                                                                           imports
                             2       imports      6       name=pipes

                                     imports
                                                      imports
             created
                                                  7       name=gremlin

         1




g.v(1)
t




                           name=neo4j       8

                                                   imports

                                                             5      name=blueprints

                                                imports          imports
                                                                                      imports
                                        2       imports      6       name=pipes

                                                imports
                                                                 imports
                        created
                                                             7       name=gremlin

                1




g.v(1).out('created')
t




                           name=neo4j       8

                                                   imports

                                                             5      name=blueprints

                                                imports          imports
                                  x                                                   imports
                                        2       imports      6       name=pipes

                                                imports
                                                                 imports
                        created
                                                             7       name=gremlin

                1




g.v(1).out('created').as('x')
t




                           name=neo4j       8

                                                   imports

                                                             5      name=blueprints

                                                imports          imports
                                  x                                                   imports
                                        2       imports      6       name=pipes

                                                imports
                                                                 imports
                        created
                                                             7       name=gremlin

                1




g.v(1).out('created').as('x').out('imports')
t




                           name=neo4j       8

                                                   imports
                                                             y

                                                                 5      name=blueprints

                                                imports      y       imports
                                  x                                                       imports
                                        2       imports          6       name=pipes

                                                imports      y       imports
                        created
                                                                 7       name=gremlin

                1




g.v(1).out('created').as('x').out('imports').as('y')
x      y
     v[2]   v[5]
 t   v[2]   v[6]
     v[2]   v[7]




                           name=neo4j       8

                                                   imports
                                                             y

                                                                 5      name=blueprints

                                                imports      y       imports
                                  x                                                       imports
                                        2       imports          6       name=pipes

                                                imports      y       imports
                        created
                                                                 7       name=gremlin

                   1




g.v(1).out('created').as('x').out('imports').as('y').table(t)
x      y
     v[2]   v[5]
 t   v[2]   v[6]
     v[2]   v[7]




                          name=neo4j       8

                                                  imports
                                                            y

                                                                5      name=blueprints

     v[5]                                      imports      y       imports
                                 x                                                       imports
                                       2       imports          6       name=pipes

                                               imports      y       imports
                       created
                                                                7       name=gremlin

                   1




t.get(0,1)
x      y
     v[2]   v[5]
 t   v[2]   v[6]
     v[2]   v[7]




                          name=neo4j       8

                                                  imports
                                                            y

                                                                5      name=blueprints

     v[2]                                      imports      y       imports
                                 x                                                       imports
                                       2       imports          6       name=pipes

                                               imports      y       imports
                       created
                                                                7       name=gremlin

                   1




t.get(0,'x')
x      y
     v[2]   v[5]
 t   v[2]   v[6]
     v[2]   v[7]




                          name=neo4j       8

                                                  imports
                                                            y

                                                                5      name=blueprints
     v[5]
     v[6]                                      imports
     v[7]
                                                            y       imports
                                 x                                                       imports
                                       2       imports          6       name=pipes

                                               imports      y       imports
                       created
                                                                7       name=gremlin

                   1




t.getColumn('y')
x         y
     v[2]      v[5]
 t   v[2]      v[6]
     v[2]      v[7]




                             name=neo4j       8

                                                     imports
                                                               y

                                                                   5      name=blueprints

      [x, y]                                      imports      y       imports
                                    x                                                       imports
                                          2       imports          6       name=pipes

                                                  imports      y       imports
                          created
                                                                   7       name=gremlin

                      1




t.getColumnNames()
t




                         name=neo4j       8

                                                 imports

                                                           5      name=blueprints

                                              imports          imports
                                                                                    imports
                                      2       imports      6       name=pipes

                                              imports
                                                               imports
                      created
                                                           7       name=gremlin

                  1




t = new Table()
t




                name=neo4j       8

                                        imports

                                                  5      name=blueprints

                                     imports          imports
                                                                           imports
                             2       imports      6       name=pipes

                                     imports
                                                      imports
             created
                                                  7       name=gremlin

         1




g.v(1)
t




                           name=neo4j       8

                                                   imports

                                                             5      name=blueprints

                                                imports          imports
                                                                                      imports
                                        2       imports      6       name=pipes

                                                imports
                                                                 imports
                        created
                                                             7       name=gremlin

                  1




g.v(1).out('created')
t




                            name=neo4j       8

                                                    imports

                                                              5      name=blueprints

                                                 imports          imports
                                   x                                                   imports
                                         2       imports      6       name=pipes

                                                 imports
                                                                  imports
                         created
                                                              7       name=gremlin

                  1




g.v(1).out('created').as('x')
t




                            name=neo4j       8

                                                    imports

                                                              5      name=blueprints

                                                 imports          imports
                                   x                                                   imports
                                         2       imports      6       name=pipes

                                                 imports
                                                                  imports
                         created
                                                              7       name=gremlin

                  1




g.v(1).out('created').as('x').out('imports')
t




                            name=neo4j       8

                                                    imports
                                                              y

                                                                  5      name=blueprints

                                                 imports      y       imports
                                   x                                                       imports
                                         2       imports          6       name=pipes

                                                 imports      y       imports
                         created
                                                                  7       name=gremlin

                  1




g.v(1).out('created').as('x').out('imports').as('y')
x       y
     2    blueprints
 t   2    pipes
     2    gremlin




                              name=neo4j       8

                                                      imports
                                                                y

                                                                    5      name=blueprints

                                                   imports      y       imports
                                     x                                                       imports
                                           2       imports          6       name=pipes

                                                   imports      y       imports
                           created
                                                                    7       name=gremlin

                       1




g.v(1).out('created').as('x').out('imports').as('y').table(t){it.id}{it.name}
g.clear()
Graph Construction
1




a = g.addVertex()
name=pierre

             1




a.name = 'pierre'
name=pierre
         city=brussels

              1




a.city = 'brussels'
name=stephen
                                        city=dc

                                          2



         name=pierre
         city=brussels

              1




b = g.addVertex([name:'stephen',city:'dc'])
name=rexster
                    logo=   reXster
                                  .




                          3




                                      name=stephen
                                         city=dc

                                           2



         name=pierre
         city=brussels

              1




c = g.addVertex([name:'rexster',logo:[a12f04b312bc...]])
name=rexster
                    logo=   reXster
                                  .




                          3

                                        since=2011
                                      created
                                                name=stephen
                                                   city=dc

                                                     2



         name=pierre
         city=brussels

              1




g.addEdge(b,c,'created',[since:2011])
name=rexster
                     logo=   reXster
                                   .




                            3

                                         since=2011
                                       created
                                                 name=stephen
        since=2011                                  city=dc
                  reviews
                                                      2



         name=pierre
         city=brussels

              1




g.addEdge(a,c,'reviews',[since:2011])
name=gremlin
                                                   logo= Gremlin
                                                               G = (V, E)
                                                                            .




                                                           4
                      name=rexster
                                        imports
                     logo=   reXster
                                   .




                            3

                                         since=2011
                                       created
                                                  name=stephen
        since=2011                                   city=dc
                  reviews
                                                       2



         name=pierre
         city=brussels

              1




g.addEdge(c,g.addVertex([name:'gremlin',logo:[ab1346f47...]),'imports')
name=pipes
   logo=  Pipes.




        5
                                                         name=gremlin
                                                        logo= Gremlin
                                                                    G = (V, E)
                                                                                 .




              imports
                                                                4
                           name=rexster
                                             imports
                          logo=   reXster
                                        .




                                  3

                                              since=2011
                                            created
                                                       name=stephen
            since=2011                                    city=dc
                        reviews
                                                            2



            name=pierre
            city=brussels

                   1




g.addEdge(c,g.addVertex([name:'pipes',logo:[12cbef46...]]),'imports')
name=blueprints
   name=pipes                     logo= Blueprints .
   logo=  Pipes.



                                        6
        5
                                                              name=gremlin
                                                             logo= Gremlin
                                   imports
                                                                                      .


                                                                         G = (V, E)


              imports
                                                                     4
                           name=rexster
                                                  imports
                          logo=   reXster    .




                                   3

                                                   since=2011
                                                 created
                                                            name=stephen
            since=2011                                         city=dc
                        reviews
                                                                 2



            name=pierre
            city=brussels

                   1




g.addEdge(c,g.addVertex([name:'blueprints',logo:[f13cd1467...]]),'imports')
6
      5




                          4




              3




                      2




          1




g.V
6




g.V.count()
blueprints
     pipes




                                        gremlin




                      rexster




                                      stephen




             pierre




g.V.name
6
      5




                          4




              3




                      2




          1




g.V
Blueprints
       Pipes



                             Gremlin
                                 G = (V, E)




               reXster




g.V.logo
4




g.V.logo.count()
name=blueprints
   name=pipes
                            logo= Blueprints .
   logo=  Pipes
              .




                                                   name=gremlin
                                                  logo= Gremlin
                                                            G = (V, E)
                                                                         .




                       name=rexster
                      logo=   reXster
                                    .




                                                 name=stephen
                                                    city=dc




           name=pierre
           city=brussels




g.V.transform{it.map()}
6




g.V.transform{it.map()}.count()
7




g.V.transform{it.map()}.count() + 1
8




g.V.transform{it.map()}.count() + 1 + 1
4




(g.V.transform{it.map()}.count() + 1 + 1) / 2
4 is a number.




((g.V.transform{it.map()}.count() + 1 + 1) / 2) + ' is a number.'
14




(((g.V.transform{it.map()}.count() + 1 + 1) / 2) + ' is a number.').length()
imports
      imports



                                     imports




                                    created



                reviews




g.E
since=2011



        since=2011




g.E.transform{it.map()}
g.clear()
Graph Ranking
7        friend   6

                         friend                         friend


                  8                                                5
                         friend   friend


                friend                                           friend
                                           friend


                                                        friend
                  1                                                4


                         friend                         friend


                                  2        friend   3




g.loadGraphML('loopy-lou-and-the-loops.xml')
m


                            7        friend   6

                   friend                         friend


            8                                                5
                   friend   friend


          friend                                           friend
                                     friend


                                                  friend
            1                                                4


                   friend                         friend


                            2        friend   3




m = [:]
m


                              7        friend   6

                     friend                         friend
c       0

              8                                                5
                     friend   friend


            friend                                           friend
                                       friend


                                                    friend
              1                                                4


                     friend                         friend


                              2        friend   3




c = 0
m


                                  7        friend   6

                         friend                         friend
c     0

                  8                                                5
                         friend   friend


                friend                                           friend
                                           friend


                                                        friend
                  1                                                4


                         friend                         friend


                                  2        friend   3




g.v(1).out.groupCount(m).loop(2){c++ < 35}.filter{false}
m


                                  7        friend   6

                         friend                         friend
c     0

                  8                                                5
                         friend   friend


                friend                                           friend
                                           friend


                                                        friend
                  1                                                4


                         friend                         friend


                                  2        friend   3




g.v(1).out.groupCount(m).loop(2){c++ < 35}.filter{false}
v[2]=1
m    v[6]=1



                                  7        friend   6

                         friend                         friend
c      0

                  8                                                5
                         friend   friend


                friend                                           friend
                                           friend


                                                        friend
                  1                                                4


                         friend                         friend


                                  2        friend   3




g.v(1).out.groupCount(m).loop(2){c++ < 35}.filter{false}
v[2]=1
m    v[6]=1



                                  7        friend   6

                         friend                         friend
c      2

                  8                                                5
                         friend   friend


                friend                                           friend
                                           friend


                                                        friend
                  1                                                4


                         friend                         friend


                                  2        friend   3




g.v(1).out.groupCount(m).loop(2){c++ < 35}.filter{false}
v[2]=1
     v[3]=1
m    v[6]=2
     v[7]=1

                                  7        friend   6

                         friend                         friend
c      2

                  8                                                5
                         friend   friend


                friend                                           friend
                                           friend


                                                        friend
                  1                                                4


                         friend                         friend


                                  2        friend   3




g.v(1).out.groupCount(m).loop(2){c++ < 35}.filter{false}
v[2]=1
     v[3]=1
m    v[6]=2
     v[7]=1

                                  7        friend   6

                         friend                         friend
c      5

                  8                                                5
                         friend   friend


                friend                                           friend
                                           friend


                                                        friend
                  1                                                4


                         friend                         friend


                                  2        friend   3




g.v(1).out.groupCount(m).loop(2){c++ < 35}.filter{false}
v[1]=1
     v[2]=1
     v[3]=1
m    v[4]=1
     v[6]=2
     v[7]=2
     v[8]=1
                                  7        friend   6

                         friend                         friend
c      5

                  8                                                5
                         friend   friend


                friend                                           friend
                                           friend


                                                        friend
                  1                                                4


                         friend                         friend


                                  2        friend   3




g.v(1).out.groupCount(m).loop(2){c++ < 35}.filter{false}
v[1]=1
     v[2]=1
     v[3]=1
m    v[4]=1
     v[6]=2
     v[7]=2
     v[8]=1
                                  7        friend   6

                         friend                         friend
c      9

                  8                                                5
                         friend   friend


                friend                                           friend
                                           friend


                                                        friend
                  1                                                4


                         friend                         friend


                                  2        friend   3




g.v(1).out.groupCount(m).loop(2){c++ < 35}.filter{false}
v[1]=3
     v[2]=2
     v[3]=1
     v[4]=1
m    v[5]=1
     v[6]=3
     v[7]=2
     v[8]=2                       7        friend   6

                         friend                         friend
c      9

                  8                                                5
                         friend   friend


                friend                                           friend
                                           friend


                                                        friend
                  1                                                4


                         friend                         friend


                                  2        friend   3




g.v(1).out.groupCount(m).loop(2){c++ < 35}.filter{false}
v[1]=3
     v[2]=2
     v[3]=1
     v[4]=1
m    v[5]=1
     v[6]=3
     v[7]=2
     v[8]=2                       7        friend   6

                         friend                         friend
c     15

                  8                                                5
                         friend   friend


                friend                                           friend
                                           friend


                                                        friend
                  1                                                4


                         friend                         friend


                                  2        friend   3




g.v(1).out.groupCount(m).loop(2){c++ < 35}.filter{false}
v[1]=4
     v[2]=4
     v[3]=3
     v[4]=1
m    v[5]=1
     v[6]=7
     v[7]=3
     v[8]=2                       7        friend   6

                         friend                         friend
c     15

                  8                                                5
                         friend   friend


                friend                                           friend
                                           friend


                                                        friend
                  1                                                4


                         friend                         friend


                                  2        friend   3




g.v(1).out.groupCount(m).loop(2){c++ < 35}.filter{false}
v[1]=4
     v[2]=4
     v[3]=3
     v[4]=1
m    v[5]=1
     v[6]=7
     v[7]=3
     v[8]=2                       7        friend   6

                         friend                         friend
c     25

                  8                                                5
                         friend   friend


                friend                                           friend
                                           friend


                                                        friend
                  1                                                4


                         friend                         friend


                                  2        friend   3




g.v(1).out.groupCount(m).loop(2){c++ < 35}.filter{false}
v[1]=5
     v[2]=5
     v[3]=5
     v[4]=3
m    v[5]=1
    v[6]=10
     v[7]=7
     v[8]=3                       7        friend   6

                         friend                         friend
c     25

                  8                                                5
                         friend   friend


                friend                                           friend
                                           friend


                                                        friend
                  1                                                4


                         friend                         friend


                                  2        friend   3




g.v(1).out.groupCount(m).loop(2){c++ < 35}.filter{false}
v[1]=5
     v[2]=5
     v[3]=5
     v[4]=3
m    v[5]=1
    v[6]=10
     v[7]=7
     v[8]=3                       7        friend   6

                         friend                         friend
c     39

                  8                                                5
                         friend   friend


                friend                                           friend
                                           friend


                                                        friend
                  1                                                4


                         friend                         friend


                                  2        friend   3




g.v(1).out.groupCount(m).loop(2){c++ < 35}.filter{false}
v[1]=5
     v[2]=5
     v[3]=5
     v[4]=3
m    v[5]=1
    v[6]=10
     v[7]=7
     v[8]=3                       7        friend   6

                         friend                         friend
c     39

                  8                                                5
                         friend   friend


                friend                                           friend
                                           friend


                                                        friend
                  1                                                4


                         friend                         friend


                                  2        friend   3




g.v(1).out.groupCount(m).loop(2){c++ < 35}.filter{false}
v[1]=5
     v[2]=5
     v[3]=5
     v[4]=3
m    v[5]=1
    v[6]=10
     v[7]=7
     v[8]=3                      7        friend   6

                        friend                         friend
c     39

                 8                                                5
                        friend   friend


               friend                                           friend
                                          friend


                                                       friend
                 1                                                4


                        friend                         friend


                                 2        friend   3




println 'do you understand the concept of centrality?'
g.clear()
IDE Development




                                    reXster
            Command Line REPL   REST Server
Via any JVM language (JSR 223)




                                 Neo4j Server
http://gremlin.tinkerpop.com
The Pathology of Graph Databases
The Pathology of Graph Databases
The Pathology of Graph Databases
The Pathology of Graph Databases

More Related Content

What's hot

Designing with Groovy Traits - Gr8Conf India
Designing with Groovy Traits - Gr8Conf IndiaDesigning with Groovy Traits - Gr8Conf India
Designing with Groovy Traits - Gr8Conf India
Naresha K
 
Open Problems in the Universal Graph Theory
Open Problems in the Universal Graph TheoryOpen Problems in the Universal Graph Theory
Open Problems in the Universal Graph Theory
Marko Rodriguez
 
Groovy
GroovyGroovy
Groovy
Zen Urban
 
Fertile Ground: The Roots of Clojure
Fertile Ground: The Roots of ClojureFertile Ground: The Roots of Clojure
Fertile Ground: The Roots of ClojureMike Fogus
 
Groovy puzzlers по русски с Joker 2014
Groovy puzzlers по русски с Joker 2014Groovy puzzlers по русски с Joker 2014
Groovy puzzlers по русски с Joker 2014
Baruch Sadogursky
 
Hammurabi
HammurabiHammurabi
Hammurabi
Mario Fusco
 
Cassandra Summit - What's New In Apache TinkerPop?
Cassandra Summit - What's New In Apache TinkerPop?Cassandra Summit - What's New In Apache TinkerPop?
Cassandra Summit - What's New In Apache TinkerPop?
Stephen Mallette
 
ALE2014 let tests drive or let dijkstra derive
ALE2014 let tests drive or let dijkstra deriveALE2014 let tests drive or let dijkstra derive
ALE2014 let tests drive or let dijkstra derive
SanderSlideShare
 
Poor Man's Functional Programming
Poor Man's Functional ProgrammingPoor Man's Functional Programming
Poor Man's Functional ProgrammingDmitry Buzdin
 
Groovy vs Boilerplate and Ceremony Code
Groovy vs Boilerplate and Ceremony CodeGroovy vs Boilerplate and Ceremony Code
Groovy vs Boilerplate and Ceremony Codestasimus
 
Haskell in the Real World
Haskell in the Real WorldHaskell in the Real World
Haskell in the Real World
osfameron
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with ClojureDmitry Buzdin
 
(Greach 2015) Dsl'ing your Groovy
(Greach 2015) Dsl'ing your Groovy(Greach 2015) Dsl'ing your Groovy
(Greach 2015) Dsl'ing your Groovy
Alonso Torres
 
Building Functional Islands
Building Functional IslandsBuilding Functional Islands
Building Functional Islands
Mark Jones
 
SWP - A Generic Language Parser
SWP - A Generic Language ParserSWP - A Generic Language Parser
SWP - A Generic Language Parser
kamaelian
 
Discovering functional treasure in idiomatic Groovy
Discovering functional treasure in idiomatic GroovyDiscovering functional treasure in idiomatic Groovy
Discovering functional treasure in idiomatic Groovy
Naresha K
 
Project Gålbma – Actors vs Types
Project Gålbma – Actors vs TypesProject Gålbma – Actors vs Types
Project Gålbma – Actors vs Types
Roland Kuhn
 
Distributed algorithms for big data @ GeeCon
Distributed algorithms for big data @ GeeConDistributed algorithms for big data @ GeeCon
Distributed algorithms for big data @ GeeCon
Duyhai Doan
 
ETL for Pros: Getting Data Into MongoDB
ETL for Pros: Getting Data Into MongoDBETL for Pros: Getting Data Into MongoDB
ETL for Pros: Getting Data Into MongoDB
MongoDB
 

What's hot (20)

Designing with Groovy Traits - Gr8Conf India
Designing with Groovy Traits - Gr8Conf IndiaDesigning with Groovy Traits - Gr8Conf India
Designing with Groovy Traits - Gr8Conf India
 
Open Problems in the Universal Graph Theory
Open Problems in the Universal Graph TheoryOpen Problems in the Universal Graph Theory
Open Problems in the Universal Graph Theory
 
Groovy
GroovyGroovy
Groovy
 
Fertile Ground: The Roots of Clojure
Fertile Ground: The Roots of ClojureFertile Ground: The Roots of Clojure
Fertile Ground: The Roots of Clojure
 
Scala introduction
Scala introductionScala introduction
Scala introduction
 
Groovy puzzlers по русски с Joker 2014
Groovy puzzlers по русски с Joker 2014Groovy puzzlers по русски с Joker 2014
Groovy puzzlers по русски с Joker 2014
 
Hammurabi
HammurabiHammurabi
Hammurabi
 
Cassandra Summit - What's New In Apache TinkerPop?
Cassandra Summit - What's New In Apache TinkerPop?Cassandra Summit - What's New In Apache TinkerPop?
Cassandra Summit - What's New In Apache TinkerPop?
 
ALE2014 let tests drive or let dijkstra derive
ALE2014 let tests drive or let dijkstra deriveALE2014 let tests drive or let dijkstra derive
ALE2014 let tests drive or let dijkstra derive
 
Poor Man's Functional Programming
Poor Man's Functional ProgrammingPoor Man's Functional Programming
Poor Man's Functional Programming
 
Groovy vs Boilerplate and Ceremony Code
Groovy vs Boilerplate and Ceremony CodeGroovy vs Boilerplate and Ceremony Code
Groovy vs Boilerplate and Ceremony Code
 
Haskell in the Real World
Haskell in the Real WorldHaskell in the Real World
Haskell in the Real World
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with Clojure
 
(Greach 2015) Dsl'ing your Groovy
(Greach 2015) Dsl'ing your Groovy(Greach 2015) Dsl'ing your Groovy
(Greach 2015) Dsl'ing your Groovy
 
Building Functional Islands
Building Functional IslandsBuilding Functional Islands
Building Functional Islands
 
SWP - A Generic Language Parser
SWP - A Generic Language ParserSWP - A Generic Language Parser
SWP - A Generic Language Parser
 
Discovering functional treasure in idiomatic Groovy
Discovering functional treasure in idiomatic GroovyDiscovering functional treasure in idiomatic Groovy
Discovering functional treasure in idiomatic Groovy
 
Project Gålbma – Actors vs Types
Project Gålbma – Actors vs TypesProject Gålbma – Actors vs Types
Project Gålbma – Actors vs Types
 
Distributed algorithms for big data @ GeeCon
Distributed algorithms for big data @ GeeConDistributed algorithms for big data @ GeeCon
Distributed algorithms for big data @ GeeCon
 
ETL for Pros: Getting Data Into MongoDB
ETL for Pros: Getting Data Into MongoDBETL for Pros: Getting Data Into MongoDB
ETL for Pros: Getting Data Into MongoDB
 

Similar to The Pathology of Graph Databases

Algebra 2 Unit 5 Lesson 5
Algebra 2 Unit 5 Lesson 5Algebra 2 Unit 5 Lesson 5
Algebra 2 Unit 5 Lesson 5
Kate Nowak
 
Start Writing Groovy
Start Writing GroovyStart Writing Groovy
Start Writing Groovy
Evgeny Goldin
 
Clojure for Java developers - Stockholm
Clojure for Java developers - StockholmClojure for Java developers - Stockholm
Clojure for Java developers - StockholmJan Kronquist
 
7 Python udf.pptx
7 Python udf.pptx7 Python udf.pptx
7 Python udf.pptx
SUJALORAON
 
(first '(Clojure.))
(first '(Clojure.))(first '(Clojure.))
(first '(Clojure.))
niklal
 
The Ring programming language version 1.6 book - Part 62 of 189
The Ring programming language version 1.6 book - Part 62 of 189The Ring programming language version 1.6 book - Part 62 of 189
The Ring programming language version 1.6 book - Part 62 of 189
Mahmoud Samir Fayed
 
A walk in graph databases v1.0
A walk in graph databases v1.0A walk in graph databases v1.0
A walk in graph databases v1.0Pierre De Wilde
 
Basics
BasicsBasics
The Ring programming language version 1.5.3 book - Part 69 of 184
The Ring programming language version 1.5.3 book - Part 69 of 184The Ring programming language version 1.5.3 book - Part 69 of 184
The Ring programming language version 1.5.3 book - Part 69 of 184
Mahmoud Samir Fayed
 
The Ring programming language version 1.9 book - Part 69 of 210
The Ring programming language version 1.9 book - Part 69 of 210The Ring programming language version 1.9 book - Part 69 of 210
The Ring programming language version 1.9 book - Part 69 of 210
Mahmoud Samir Fayed
 
Introduction to Groovy
Introduction to GroovyIntroduction to Groovy
Introduction to Groovy
André Faria Gomes
 
PM5006 Week 6
PM5006 Week 6PM5006 Week 6
PM5006 Week 6
Carlos Vázquez
 
The Chain Rule Powerpoint Lesson
The Chain Rule Powerpoint LessonThe Chain Rule Powerpoint Lesson
The Chain Rule Powerpoint Lesson
Paul Hawks
 
The Chain Rule Powerpoint Lesson
The Chain Rule Powerpoint LessonThe Chain Rule Powerpoint Lesson
The Chain Rule Powerpoint LessonPaul Hawks
 
Algebra 2 Section 5-2
Algebra 2 Section 5-2Algebra 2 Section 5-2
Algebra 2 Section 5-2
Jimbo Lamb
 

Similar to The Pathology of Graph Databases (20)

Algebra 2 Unit 5 Lesson 5
Algebra 2 Unit 5 Lesson 5Algebra 2 Unit 5 Lesson 5
Algebra 2 Unit 5 Lesson 5
 
Start Writing Groovy
Start Writing GroovyStart Writing Groovy
Start Writing Groovy
 
Ca8e Ppt 6 1
Ca8e Ppt 6 1Ca8e Ppt 6 1
Ca8e Ppt 6 1
 
Clojure for Java developers - Stockholm
Clojure for Java developers - StockholmClojure for Java developers - Stockholm
Clojure for Java developers - Stockholm
 
7 Python udf.pptx
7 Python udf.pptx7 Python udf.pptx
7 Python udf.pptx
 
(first '(Clojure.))
(first '(Clojure.))(first '(Clojure.))
(first '(Clojure.))
 
The Ring programming language version 1.6 book - Part 62 of 189
The Ring programming language version 1.6 book - Part 62 of 189The Ring programming language version 1.6 book - Part 62 of 189
The Ring programming language version 1.6 book - Part 62 of 189
 
A walk in graph databases v1.0
A walk in graph databases v1.0A walk in graph databases v1.0
A walk in graph databases v1.0
 
Htdp01
Htdp01Htdp01
Htdp01
 
1. functions
1. functions1. functions
1. functions
 
Basics
BasicsBasics
Basics
 
The Ring programming language version 1.5.3 book - Part 69 of 184
The Ring programming language version 1.5.3 book - Part 69 of 184The Ring programming language version 1.5.3 book - Part 69 of 184
The Ring programming language version 1.5.3 book - Part 69 of 184
 
125 7.7
125 7.7125 7.7
125 7.7
 
The Ring programming language version 1.9 book - Part 69 of 210
The Ring programming language version 1.9 book - Part 69 of 210The Ring programming language version 1.9 book - Part 69 of 210
The Ring programming language version 1.9 book - Part 69 of 210
 
Introduction to Groovy
Introduction to GroovyIntroduction to Groovy
Introduction to Groovy
 
PM5006 Week 6
PM5006 Week 6PM5006 Week 6
PM5006 Week 6
 
Ch10
Ch10Ch10
Ch10
 
The Chain Rule Powerpoint Lesson
The Chain Rule Powerpoint LessonThe Chain Rule Powerpoint Lesson
The Chain Rule Powerpoint Lesson
 
The Chain Rule Powerpoint Lesson
The Chain Rule Powerpoint LessonThe Chain Rule Powerpoint Lesson
The Chain Rule Powerpoint Lesson
 
Algebra 2 Section 5-2
Algebra 2 Section 5-2Algebra 2 Section 5-2
Algebra 2 Section 5-2
 

More from Marko Rodriguez

mm-ADT: A Virtual Machine/An Economic Machine
mm-ADT: A Virtual Machine/An Economic Machinemm-ADT: A Virtual Machine/An Economic Machine
mm-ADT: A Virtual Machine/An Economic Machine
Marko Rodriguez
 
mm-ADT: A Multi-Model Abstract Data Type
mm-ADT: A Multi-Model Abstract Data Typemm-ADT: A Multi-Model Abstract Data Type
mm-ADT: A Multi-Model Abstract Data Type
Marko Rodriguez
 
Gremlin's Graph Traversal Machinery
Gremlin's Graph Traversal MachineryGremlin's Graph Traversal Machinery
Gremlin's Graph Traversal Machinery
Marko Rodriguez
 
Quantum Processes in Graph Computing
Quantum Processes in Graph ComputingQuantum Processes in Graph Computing
Quantum Processes in Graph Computing
Marko Rodriguez
 
ACM DBPL Keynote: The Graph Traversal Machine and Language
ACM DBPL Keynote: The Graph Traversal Machine and LanguageACM DBPL Keynote: The Graph Traversal Machine and Language
ACM DBPL Keynote: The Graph Traversal Machine and Language
Marko Rodriguez
 
The Gremlin Graph Traversal Language
The Gremlin Graph Traversal LanguageThe Gremlin Graph Traversal Language
The Gremlin Graph Traversal Language
Marko Rodriguez
 
The Path Forward
The Path ForwardThe Path Forward
The Path Forward
Marko Rodriguez
 
Faunus: Graph Analytics Engine
Faunus: Graph Analytics EngineFaunus: Graph Analytics Engine
Faunus: Graph Analytics Engine
Marko Rodriguez
 
Solving Problems with Graphs
Solving Problems with GraphsSolving Problems with Graphs
Solving Problems with Graphs
Marko Rodriguez
 
Titan: The Rise of Big Graph Data
Titan: The Rise of Big Graph DataTitan: The Rise of Big Graph Data
Titan: The Rise of Big Graph Data
Marko Rodriguez
 
Traversing Graph Databases with Gremlin
Traversing Graph Databases with GremlinTraversing Graph Databases with Gremlin
Traversing Graph Databases with Gremlin
Marko Rodriguez
 
The Path-o-Logical Gremlin
The Path-o-Logical GremlinThe Path-o-Logical Gremlin
The Path-o-Logical Gremlin
Marko Rodriguez
 
The Gremlin in the Graph
The Gremlin in the GraphThe Gremlin in the Graph
The Gremlin in the Graph
Marko Rodriguez
 
Memoirs of a Graph Addict: Despair to Redemption
Memoirs of a Graph Addict: Despair to RedemptionMemoirs of a Graph Addict: Despair to Redemption
Memoirs of a Graph Addict: Despair to RedemptionMarko Rodriguez
 
Graph Databases: Trends in the Web of Data
Graph Databases: Trends in the Web of DataGraph Databases: Trends in the Web of Data
Graph Databases: Trends in the Web of Data
Marko Rodriguez
 
Problem-Solving using Graph Traversals: Searching, Scoring, Ranking, and Reco...
Problem-Solving using Graph Traversals: Searching, Scoring, Ranking, and Reco...Problem-Solving using Graph Traversals: Searching, Scoring, Ranking, and Reco...
Problem-Solving using Graph Traversals: Searching, Scoring, Ranking, and Reco...
Marko Rodriguez
 
A Perspective on Graph Theory and Network Science
A Perspective on Graph Theory and Network ScienceA Perspective on Graph Theory and Network Science
A Perspective on Graph Theory and Network Science
Marko Rodriguez
 
The Graph Traversal Programming Pattern
The Graph Traversal Programming PatternThe Graph Traversal Programming Pattern
The Graph Traversal Programming Pattern
Marko Rodriguez
 
The Network Data Structure in Computing
The Network Data Structure in ComputingThe Network Data Structure in Computing
The Network Data Structure in ComputingMarko Rodriguez
 
A Model of the Scholarly Community
A Model of the Scholarly CommunityA Model of the Scholarly Community
A Model of the Scholarly CommunityMarko Rodriguez
 

More from Marko Rodriguez (20)

mm-ADT: A Virtual Machine/An Economic Machine
mm-ADT: A Virtual Machine/An Economic Machinemm-ADT: A Virtual Machine/An Economic Machine
mm-ADT: A Virtual Machine/An Economic Machine
 
mm-ADT: A Multi-Model Abstract Data Type
mm-ADT: A Multi-Model Abstract Data Typemm-ADT: A Multi-Model Abstract Data Type
mm-ADT: A Multi-Model Abstract Data Type
 
Gremlin's Graph Traversal Machinery
Gremlin's Graph Traversal MachineryGremlin's Graph Traversal Machinery
Gremlin's Graph Traversal Machinery
 
Quantum Processes in Graph Computing
Quantum Processes in Graph ComputingQuantum Processes in Graph Computing
Quantum Processes in Graph Computing
 
ACM DBPL Keynote: The Graph Traversal Machine and Language
ACM DBPL Keynote: The Graph Traversal Machine and LanguageACM DBPL Keynote: The Graph Traversal Machine and Language
ACM DBPL Keynote: The Graph Traversal Machine and Language
 
The Gremlin Graph Traversal Language
The Gremlin Graph Traversal LanguageThe Gremlin Graph Traversal Language
The Gremlin Graph Traversal Language
 
The Path Forward
The Path ForwardThe Path Forward
The Path Forward
 
Faunus: Graph Analytics Engine
Faunus: Graph Analytics EngineFaunus: Graph Analytics Engine
Faunus: Graph Analytics Engine
 
Solving Problems with Graphs
Solving Problems with GraphsSolving Problems with Graphs
Solving Problems with Graphs
 
Titan: The Rise of Big Graph Data
Titan: The Rise of Big Graph DataTitan: The Rise of Big Graph Data
Titan: The Rise of Big Graph Data
 
Traversing Graph Databases with Gremlin
Traversing Graph Databases with GremlinTraversing Graph Databases with Gremlin
Traversing Graph Databases with Gremlin
 
The Path-o-Logical Gremlin
The Path-o-Logical GremlinThe Path-o-Logical Gremlin
The Path-o-Logical Gremlin
 
The Gremlin in the Graph
The Gremlin in the GraphThe Gremlin in the Graph
The Gremlin in the Graph
 
Memoirs of a Graph Addict: Despair to Redemption
Memoirs of a Graph Addict: Despair to RedemptionMemoirs of a Graph Addict: Despair to Redemption
Memoirs of a Graph Addict: Despair to Redemption
 
Graph Databases: Trends in the Web of Data
Graph Databases: Trends in the Web of DataGraph Databases: Trends in the Web of Data
Graph Databases: Trends in the Web of Data
 
Problem-Solving using Graph Traversals: Searching, Scoring, Ranking, and Reco...
Problem-Solving using Graph Traversals: Searching, Scoring, Ranking, and Reco...Problem-Solving using Graph Traversals: Searching, Scoring, Ranking, and Reco...
Problem-Solving using Graph Traversals: Searching, Scoring, Ranking, and Reco...
 
A Perspective on Graph Theory and Network Science
A Perspective on Graph Theory and Network ScienceA Perspective on Graph Theory and Network Science
A Perspective on Graph Theory and Network Science
 
The Graph Traversal Programming Pattern
The Graph Traversal Programming PatternThe Graph Traversal Programming Pattern
The Graph Traversal Programming Pattern
 
The Network Data Structure in Computing
The Network Data Structure in ComputingThe Network Data Structure in Computing
The Network Data Structure in Computing
 
A Model of the Scholarly Community
A Model of the Scholarly CommunityA Model of the Scholarly Community
A Model of the Scholarly Community
 

Recently uploaded

Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Jeffrey Haguewood
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
Frank van Harmelen
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
Laura Byrne
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
DianaGray10
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
RTTS
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
ControlCase
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
Thijs Feryn
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
Product School
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Thierry Lestable
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
Dorra BARTAGUIZ
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
Sri Ambati
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
Cheryl Hung
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
Product School
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Jemma Hussein Allen
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Product School
 

Recently uploaded (20)

Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 

The Pathology of Graph Databases

  • 1. The Pathology of Graph Databases Marko A. Rodriguez Graph Systems Architect http://markorodriguez.com http://twitter.com/twarko http://tinkerpop.com TinkerPop WindyCityDB - Chicago, Illinois – June 25, 2011
  • 2. Abstract There is nothing more fascinating and utterly mind- bending than traversing a graph. Those who succumb to this data processing pattern euphorically suffer from graph pathology. This is a case study of the Graph Addict. Gremlin G = (V, E) What is presented is as of Gremlin 1.1 (Released July 15, 2011)
  • 3. What you are about to see may disturb you. It has infected Neo4j, OrientDB, DEX, RDF Sail, TinkerGraph, and ReXster. reXster ...it will infect others.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8. ? ? ?
  • 9.
  • 12. ,,,/ (o o) -----o00o(_)-o00o----- gremlin>
  • 13.
  • 15. Gremlin is a Groovy DSL and as such, has native JVM access. 'Gremlin is a Groovy DSL and as such, has native JVM access.'
  • 16. 3 1+2
  • 20. key1=value key2=123 map = [key1:'value',key2:123]
  • 21. <modem sound/> socket = new Socket('127.0.0.1',8182)
  • 24. /tmp/graphdb g = new Neo4jGraph('/tmp/graphdb')
  • 27. name=marko 1 g.v(1).name
  • 29. city=santafe 1 g.v(1).city
  • 31. name=marko city=santafe 1 g.v(1).map()
  • 33. created 1 knows knows g.v(1).outE
  • 34. created 1 knows knows g.v(1).outE
  • 35. null created since=2010 1 knows since=2005 knows g.v(1).outE.since
  • 36. created 1 knows knows g.v(1).outE
  • 37. 2 created 1 knows 3 knows 4 g.v(1).outE.inV
  • 38. 2 name=rexster created 1 knows 3 name=stephen knows 4 name=peter g.v(1).outE.inV.name
  • 41. created 1 knows knows g.v(1).outE
  • 42. created 1 knows knows g.v(1).outE[[label:'knows']]
  • 44. created 1 knows knows g.v(1).outE
  • 45. created 1 knows knows g.v(1).outE.filter{it.label=='knows'}
  • 47. created 1 knows knows g.v(1).outE
  • 48. created 1 knows knows g.v(1).outE.filter{it.label=='knows' & since > 2006}
  • 51. 1 knows knows g.v(1).outE('knows')
  • 52. 1 knows 3 knows 4 g.v(1).outE('knows').inV
  • 55. 1 knows 3 knows 4 g.v(1).out('knows')
  • 56. 1 knows 3 name=stephen knows 4 name=peter g.v(1).out('knows').name
  • 57. 1 knows 3 name=stephen knows 4 name=peter g.v(1).out('knows').name.filter{it.startsWith('st')}
  • 58. 1 knows 3 name=stephen knows 4 name=peter g.v(1).out('knows').name.filter{it.matches('p.{4}')}
  • 59. 1 knows 3 name=stephen knows 4 name=peter g.v(1).out('knows').name.filter{it.matches('p.{4}') & false}
  • 62. o o! o oH W 1 g.v(1).filter{new Random().nextBoolean()}
  • 64. t! A lrigh 1 g.v(1).filter{new Random().nextBoolean()}
  • 66. Doh! 1 g.v(1).filter{new Random().nextBoolean()}
  • 67. 1
  • 68. 1
  • 69. 1
  • 70. 1
  • 73. 2 created 1 g.v(1).out('created')
  • 74. 2 name=rexster created 1 g.v(1).out('created').name
  • 76. 2 created 1 g.v(1).out('created')
  • 77. 2 created created 1 3 g.v(1).out('created').in('created')
  • 78. 2 created created 1 3 g.v(1).out('created').in('created').except([g.v(1)])
  • 79. 2 created created 1 3 name=stephen g.v(1).out('created').in('created').except([g.v(1)]).name
  • 80. 2 created created 1 3 name=stephen g.v(1).out('created').in('created').except([g.v(1)]).name.back(1)
  • 81. 2 created created 1 collaborator 3 name=stephen g.v(1).out('created').in('created').except([g.v(1)]).name.back(1). sideEffect{g.addEdge(g.v(1),it,'collaborator')}
  • 82. 2 created created 1 collaborator 3 name=stephen g.v(1).out('created').in('created').except([g.v(1)]).name.back(1). sideEffect{g.addEdge(g.v(1),it,'collaborator')}.filter{false}
  • 85. 2 created 1 g.v(1).out('created')
  • 86. 5 imports 2 imports 6 imports created 7 1 g.v(1).out('created').out('imports')
  • 87. 5 name=blueprints imports 2 imports 6 name=pipes imports created 7 name=gremlin 1 g.v(1).out('created').out('imports').name
  • 88. 5 name=blueprints imports 2 imports 6 name=pipes imports created 7 name=gremlin 1 g.v(1).out('created').out('imports').name.back(1)
  • 89. 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('imports').name.back(1).out('imports')
  • 90. 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('imports').name.back(1).out('imports')
  • 91. name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('imports').name.back(1).out('imports').name
  • 92. name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('imports').name.back(1).out('imports').name .back(1)
  • 93. name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('imports').name.back(1).out('imports').name .back(1).out('imports')
  • 94. name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('imports').name.back(1).out('imports').name .back(1).out('imports').out('imports')
  • 95. name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('imports').name.back(1).out('imports').name .back(1).out('imports').out('imports').out('imports')
  • 96. name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1
  • 97. name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('imports').loop(1){it.loops < 5}
  • 98. name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('imports').loop(1){it.loops < 5}
  • 99. name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('imports').loop(1){it.loops < 5}
  • 100. name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('imports').loop(1){it.loops < 5}
  • 101. name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('imports').loop(1){it.loops < 5}
  • 102. name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('imports').loop(1){it.loops < 5}
  • 103. name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 2 g.v(1).out('created').out('imports').loop(1){it.loops < 5}
  • 104. name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 3 g.v(1).out('created').out('imports').loop(1){it.loops < 5}
  • 105. name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 4 g.v(1).out('created').out('imports').loop(1){it.loops < 5}
  • 106. name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('imports').loop(1){it.loops < 5}
  • 108. m name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1
  • 109. m name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('import').groupCount(m).loop(2){true}
  • 110. m name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('import').groupCount(m).loop(2){true}
  • 111. m name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('import').groupCount(m).loop(2){true}
  • 112. v[5]=1 m v[6]=1 v[7]=1 name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('import').groupCount(m).loop(2){true}
  • 113. v[5]=1 m v[6]=1 v[7]=1 name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('import').groupCount(m).loop(2){true}
  • 114. v[5]=3 v[6]=2 m v[7]=1 v[8]=1 name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('import').groupCount(m).loop(2){true}
  • 115. v[5]=3 v[6]=2 m v[7]=1 v[8]=1 name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('import').groupCount(m).loop(2){true}
  • 116. v[5]=4 v[6]=2 m v[7]=1 v[8]=3 name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('import').groupCount(m).loop(2){true}
  • 117. v[5]=4 v[6]=2 m v[7]=1 v[8]=3 name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('import').groupCount(m).loop(2){true}
  • 118. v[5]=4 v[6]=2 m v[7]=1 v[8]=4 name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('import').groupCount(m).loop(2){true}
  • 119. v[5]=4 v[6]=2 m v[7]=1 v[8]=4 name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('import').groupCount(m).loop(2){true}
  • 121. m name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1
  • 122. m name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
  • 123. m name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
  • 124. m name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
  • 125. m name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
  • 126. blueprints=1 m pipes=1 gremlin=1 name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
  • 127. blueprints=1 m pipes=1 gremlin=1 name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
  • 128. blueprints=1 m pipes=1 gremlin=1 name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
  • 129. blueprints=1 m pipes=1 gremlin=1 name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
  • 130. blueprints=3 pipes=2 m gremlin=1 neo4j=1 name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
  • 131. blueprints=3 pipes=2 m gremlin=1 neo4j=1 name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
  • 132. blueprints=3 pipes=2 m gremlin=1 neo4j=1 name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
  • 133. blueprints=3 pipes=2 m gremlin=1 neo4j=1 name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
  • 134. blueprints=4 pipes=2 m gremlin=1 neo4j=3 name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
  • 135. blueprints=4 pipes=2 m gremlin=1 neo4j=3 name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
  • 136. blueprints=4 pipes=2 m gremlin=1 neo4j=3 name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
  • 137. blueprints=4 pipes=2 m gremlin=1 neo4j=3 name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
  • 138. blueprints=4 pipes=2 m gremlin=1 neo4j=4 name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
  • 139. blueprints=4 pipes=2 m gremlin=1 neo4j=4 name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
  • 140. blueprints=4 pipes=2 m gremlin=1 neo4j=4 name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').out('import').name.groupCount(m).back(2).loop(2){true}
  • 144. 9 10 child child 1 g.v(1).as('x').in('child')
  • 145. 9 10 child child 1 g.v(1).as('x').in('child').loop('x')
  • 146. child child 9 10 child child 1 g.v(1).as('x').in('child').loop('x'){it.object.in.count() != 0}
  • 147. child child child child 9 10 child child 1 g.v(1).as('x').in('child').loop('x'){it.object.in.count() != 0}
  • 148. child child child child child child 9 10 child child 1 g.v(1).as('x').in('child').loop('x'){it.object.in.count() != 0}
  • 149. 100,000,000 100,000,001 child child ... ... child child child child child child 9 10 child child 1 g.v(1).as('x').in('child').loop('x'){it.object.in.count() != 0}
  • 150. 100,000,000 100,000,001 child child ... ... child child child child child child 9 10 child child [v[1], v[9], ..., v[100,000,000]] [v[1], v[10], ..., v[100,000,001]] ... 1 g.v(1).as('x').in('child').loop('x'){it.object.in.count() != 0}.paths
  • 151. name=angelina name=brad 100,000,000 100,000,001 child child ... ... child child child child child child 9 10 child child 1 g.v(1).as('x').in('child').loop('x'){it.object.in.count() != 0}.name
  • 152. name=angelina name=brad 100,000,000 100,000,001 child child ... ... child child child child child child 9 10 child child [v[1], v[9], ..., v[100,000,000], angelina] [v[1], v[10], ..., v[100,000,001], brad] ... 1 g.v(1).as('x').in('child').loop('x'){it.object.in.count() != 0}.name.paths
  • 154. child child 1 g.v(1).inE('child')
  • 155. thinks="You suck." thinks="You're great." child child 1 g.v(1).inE('child').filter{TextAnalysis.isMean(it.thinks)}
  • 156. thinks="You suck." child 1 g.v(1).inE('child').filter{TextAnalysis.isMean(it.thinks)}
  • 157. 9 thinks="You suck." child 1 g.v(1).inE('child').filter{TextAnalysis.isMean(it.thinks)}.outV
  • 158. irl." ag w like thro ou ks="Y thin thinks="No pony!" thi n ks ="Y ou 're fat ." thinks="Get a real job." 9 thinks="You suck." child 1 g.v(1).inE('child').filter{TextAnalysis.isMean(it.thinks)}.outV.loop(3){true}
  • 159. irl." ag w like thro ou ks="Y thin thinks="No pony!" thi n ks ="Y ou 're fat ." thinks="Get a real job." 9 thinks="You suck." child 1 g.v(1).inE('child').filter{TextAnalysis.isMean(it.thinks)}.outV.loop(3){true}
  • 161. name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1
  • 162. SELECT ?x ?y WHERE { 1 created ?x . ?x imports ?y } name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1
  • 163. SELECT ?x ?y WHERE { 1 created ?x . ?x imports ?y } name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1
  • 164. SELECT ?x ?y WHERE { 1 created ?x . ?x imports ?y } name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1
  • 165. SELECT ?x ?y WHERE { ?x ?y 1 created ?x . v[2] v[5] v[2] v[6] ?x imports ?y v[2] v[7] } name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1
  • 166. name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1
  • 167. t name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 t = new Table()
  • 168. t name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1)
  • 169. t name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created')
  • 170. t name=neo4j 8 imports 5 name=blueprints imports imports x imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').as('x')
  • 171. t name=neo4j 8 imports 5 name=blueprints imports imports x imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').as('x').out('imports')
  • 172. t name=neo4j 8 imports y 5 name=blueprints imports y imports x imports 2 imports 6 name=pipes imports y imports created 7 name=gremlin 1 g.v(1).out('created').as('x').out('imports').as('y')
  • 173. x y v[2] v[5] t v[2] v[6] v[2] v[7] name=neo4j 8 imports y 5 name=blueprints imports y imports x imports 2 imports 6 name=pipes imports y imports created 7 name=gremlin 1 g.v(1).out('created').as('x').out('imports').as('y').table(t)
  • 174. x y v[2] v[5] t v[2] v[6] v[2] v[7] name=neo4j 8 imports y 5 name=blueprints v[5] imports y imports x imports 2 imports 6 name=pipes imports y imports created 7 name=gremlin 1 t.get(0,1)
  • 175. x y v[2] v[5] t v[2] v[6] v[2] v[7] name=neo4j 8 imports y 5 name=blueprints v[2] imports y imports x imports 2 imports 6 name=pipes imports y imports created 7 name=gremlin 1 t.get(0,'x')
  • 176. x y v[2] v[5] t v[2] v[6] v[2] v[7] name=neo4j 8 imports y 5 name=blueprints v[5] v[6] imports v[7] y imports x imports 2 imports 6 name=pipes imports y imports created 7 name=gremlin 1 t.getColumn('y')
  • 177. x y v[2] v[5] t v[2] v[6] v[2] v[7] name=neo4j 8 imports y 5 name=blueprints [x, y] imports y imports x imports 2 imports 6 name=pipes imports y imports created 7 name=gremlin 1 t.getColumnNames()
  • 178. t name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 t = new Table()
  • 179. t name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1)
  • 180. t name=neo4j 8 imports 5 name=blueprints imports imports imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created')
  • 181. t name=neo4j 8 imports 5 name=blueprints imports imports x imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').as('x')
  • 182. t name=neo4j 8 imports 5 name=blueprints imports imports x imports 2 imports 6 name=pipes imports imports created 7 name=gremlin 1 g.v(1).out('created').as('x').out('imports')
  • 183. t name=neo4j 8 imports y 5 name=blueprints imports y imports x imports 2 imports 6 name=pipes imports y imports created 7 name=gremlin 1 g.v(1).out('created').as('x').out('imports').as('y')
  • 184. x y 2 blueprints t 2 pipes 2 gremlin name=neo4j 8 imports y 5 name=blueprints imports y imports x imports 2 imports 6 name=pipes imports y imports created 7 name=gremlin 1 g.v(1).out('created').as('x').out('imports').as('y').table(t){it.id}{it.name}
  • 188. name=pierre 1 a.name = 'pierre'
  • 189. name=pierre city=brussels 1 a.city = 'brussels'
  • 190. name=stephen city=dc 2 name=pierre city=brussels 1 b = g.addVertex([name:'stephen',city:'dc'])
  • 191. name=rexster logo= reXster . 3 name=stephen city=dc 2 name=pierre city=brussels 1 c = g.addVertex([name:'rexster',logo:[a12f04b312bc...]])
  • 192. name=rexster logo= reXster . 3 since=2011 created name=stephen city=dc 2 name=pierre city=brussels 1 g.addEdge(b,c,'created',[since:2011])
  • 193. name=rexster logo= reXster . 3 since=2011 created name=stephen since=2011 city=dc reviews 2 name=pierre city=brussels 1 g.addEdge(a,c,'reviews',[since:2011])
  • 194. name=gremlin logo= Gremlin G = (V, E) . 4 name=rexster imports logo= reXster . 3 since=2011 created name=stephen since=2011 city=dc reviews 2 name=pierre city=brussels 1 g.addEdge(c,g.addVertex([name:'gremlin',logo:[ab1346f47...]),'imports')
  • 195. name=pipes logo= Pipes. 5 name=gremlin logo= Gremlin G = (V, E) . imports 4 name=rexster imports logo= reXster . 3 since=2011 created name=stephen since=2011 city=dc reviews 2 name=pierre city=brussels 1 g.addEdge(c,g.addVertex([name:'pipes',logo:[12cbef46...]]),'imports')
  • 196. name=blueprints name=pipes logo= Blueprints . logo= Pipes. 6 5 name=gremlin logo= Gremlin imports . G = (V, E) imports 4 name=rexster imports logo= reXster . 3 since=2011 created name=stephen since=2011 city=dc reviews 2 name=pierre city=brussels 1 g.addEdge(c,g.addVertex([name:'blueprints',logo:[f13cd1467...]]),'imports')
  • 197. 6 5 4 3 2 1 g.V
  • 199. blueprints pipes gremlin rexster stephen pierre g.V.name
  • 200. 6 5 4 3 2 1 g.V
  • 201. Blueprints Pipes Gremlin G = (V, E) reXster g.V.logo
  • 203. name=blueprints name=pipes logo= Blueprints . logo= Pipes . name=gremlin logo= Gremlin G = (V, E) . name=rexster logo= reXster . name=stephen city=dc name=pierre city=brussels g.V.transform{it.map()}
  • 208. 4 is a number. ((g.V.transform{it.map()}.count() + 1 + 1) / 2) + ' is a number.'
  • 209. 14 (((g.V.transform{it.map()}.count() + 1 + 1) / 2) + ' is a number.').length()
  • 210. imports imports imports created reviews g.E
  • 211. since=2011 since=2011 g.E.transform{it.map()}
  • 214. 7 friend 6 friend friend 8 5 friend friend friend friend friend friend 1 4 friend friend 2 friend 3 g.loadGraphML('loopy-lou-and-the-loops.xml')
  • 215. m 7 friend 6 friend friend 8 5 friend friend friend friend friend friend 1 4 friend friend 2 friend 3 m = [:]
  • 216. m 7 friend 6 friend friend c 0 8 5 friend friend friend friend friend friend 1 4 friend friend 2 friend 3 c = 0
  • 217. m 7 friend 6 friend friend c 0 8 5 friend friend friend friend friend friend 1 4 friend friend 2 friend 3 g.v(1).out.groupCount(m).loop(2){c++ < 35}.filter{false}
  • 218. m 7 friend 6 friend friend c 0 8 5 friend friend friend friend friend friend 1 4 friend friend 2 friend 3 g.v(1).out.groupCount(m).loop(2){c++ < 35}.filter{false}
  • 219. v[2]=1 m v[6]=1 7 friend 6 friend friend c 0 8 5 friend friend friend friend friend friend 1 4 friend friend 2 friend 3 g.v(1).out.groupCount(m).loop(2){c++ < 35}.filter{false}
  • 220. v[2]=1 m v[6]=1 7 friend 6 friend friend c 2 8 5 friend friend friend friend friend friend 1 4 friend friend 2 friend 3 g.v(1).out.groupCount(m).loop(2){c++ < 35}.filter{false}
  • 221. v[2]=1 v[3]=1 m v[6]=2 v[7]=1 7 friend 6 friend friend c 2 8 5 friend friend friend friend friend friend 1 4 friend friend 2 friend 3 g.v(1).out.groupCount(m).loop(2){c++ < 35}.filter{false}
  • 222. v[2]=1 v[3]=1 m v[6]=2 v[7]=1 7 friend 6 friend friend c 5 8 5 friend friend friend friend friend friend 1 4 friend friend 2 friend 3 g.v(1).out.groupCount(m).loop(2){c++ < 35}.filter{false}
  • 223. v[1]=1 v[2]=1 v[3]=1 m v[4]=1 v[6]=2 v[7]=2 v[8]=1 7 friend 6 friend friend c 5 8 5 friend friend friend friend friend friend 1 4 friend friend 2 friend 3 g.v(1).out.groupCount(m).loop(2){c++ < 35}.filter{false}
  • 224. v[1]=1 v[2]=1 v[3]=1 m v[4]=1 v[6]=2 v[7]=2 v[8]=1 7 friend 6 friend friend c 9 8 5 friend friend friend friend friend friend 1 4 friend friend 2 friend 3 g.v(1).out.groupCount(m).loop(2){c++ < 35}.filter{false}
  • 225. v[1]=3 v[2]=2 v[3]=1 v[4]=1 m v[5]=1 v[6]=3 v[7]=2 v[8]=2 7 friend 6 friend friend c 9 8 5 friend friend friend friend friend friend 1 4 friend friend 2 friend 3 g.v(1).out.groupCount(m).loop(2){c++ < 35}.filter{false}
  • 226. v[1]=3 v[2]=2 v[3]=1 v[4]=1 m v[5]=1 v[6]=3 v[7]=2 v[8]=2 7 friend 6 friend friend c 15 8 5 friend friend friend friend friend friend 1 4 friend friend 2 friend 3 g.v(1).out.groupCount(m).loop(2){c++ < 35}.filter{false}
  • 227. v[1]=4 v[2]=4 v[3]=3 v[4]=1 m v[5]=1 v[6]=7 v[7]=3 v[8]=2 7 friend 6 friend friend c 15 8 5 friend friend friend friend friend friend 1 4 friend friend 2 friend 3 g.v(1).out.groupCount(m).loop(2){c++ < 35}.filter{false}
  • 228. v[1]=4 v[2]=4 v[3]=3 v[4]=1 m v[5]=1 v[6]=7 v[7]=3 v[8]=2 7 friend 6 friend friend c 25 8 5 friend friend friend friend friend friend 1 4 friend friend 2 friend 3 g.v(1).out.groupCount(m).loop(2){c++ < 35}.filter{false}
  • 229. v[1]=5 v[2]=5 v[3]=5 v[4]=3 m v[5]=1 v[6]=10 v[7]=7 v[8]=3 7 friend 6 friend friend c 25 8 5 friend friend friend friend friend friend 1 4 friend friend 2 friend 3 g.v(1).out.groupCount(m).loop(2){c++ < 35}.filter{false}
  • 230. v[1]=5 v[2]=5 v[3]=5 v[4]=3 m v[5]=1 v[6]=10 v[7]=7 v[8]=3 7 friend 6 friend friend c 39 8 5 friend friend friend friend friend friend 1 4 friend friend 2 friend 3 g.v(1).out.groupCount(m).loop(2){c++ < 35}.filter{false}
  • 231. v[1]=5 v[2]=5 v[3]=5 v[4]=3 m v[5]=1 v[6]=10 v[7]=7 v[8]=3 7 friend 6 friend friend c 39 8 5 friend friend friend friend friend friend 1 4 friend friend 2 friend 3 g.v(1).out.groupCount(m).loop(2){c++ < 35}.filter{false}
  • 232. v[1]=5 v[2]=5 v[3]=5 v[4]=3 m v[5]=1 v[6]=10 v[7]=7 v[8]=3 7 friend 6 friend friend c 39 8 5 friend friend friend friend friend friend 1 4 friend friend 2 friend 3 println 'do you understand the concept of centrality?'
  • 234. IDE Development reXster Command Line REPL REST Server
  • 235. Via any JVM language (JSR 223) Neo4j Server