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

The Pathology of Graph Databases

  • 1.
    The Pathology ofGraph 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 nothingmore 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 areabout to see may disturb you. It has infected Neo4j, OrientDB, DEX, RDF Sail, TinkerGraph, and ReXster. reXster ...it will infect others.
  • 8.
    ? ? ?
  • 10.
  • 11.
  • 12.
    ,,,/ (o o) -----o00o(_)-o00o----- gremlin>
  • 14.
  • 15.
    Gremlin is aGroovy DSL and as such, has native JVM access. 'Gremlin is a Groovy DSL and as such, has native JVM access.'
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
    key1=value key2=123 map = [key1:'value',key2:123]
  • 21.
    <modem sound/> socket =new Socket('127.0.0.1',8182)
  • 22.
  • 23.
  • 24.
    /tmp/graphdb g = newNeo4jGraph('/tmp/graphdb')
  • 25.
  • 26.
  • 27.
    name=marko 1 g.v(1).name
  • 28.
  • 29.
    city=santafe 1 g.v(1).city
  • 30.
  • 31.
    name=marko city=santafe 1 g.v(1).map()
  • 32.
  • 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
  • 39.
  • 40.
  • 41.
    created 1 knows knows g.v(1).outE
  • 42.
    created 1 knows knows g.v(1).outE[[label:'knows']]
  • 43.
  • 44.
    created 1 knows knows g.v(1).outE
  • 45.
    created 1 knows knows g.v(1).outE.filter{it.label=='knows'}
  • 46.
  • 47.
    created 1 knows knows g.v(1).outE
  • 48.
    created 1 knows knows g.v(1).outE.filter{it.label=='knows' & since > 2006}
  • 49.
  • 50.
  • 51.
    1 knows knows g.v(1).outE('knows')
  • 52.
    1 knows 3 knows 4 g.v(1).outE('knows').inV
  • 53.
  • 54.
  • 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}
  • 60.
  • 61.
  • 62.
    o o! o oH W 1 g.v(1).filter{new Random().nextBoolean()}
  • 63.
  • 64.
    t! A lrigh 1 g.v(1).filter{new Random().nextBoolean()}
  • 65.
  • 66.
    Doh! 1 g.v(1).filter{new Random().nextBoolean()}
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
    2 created 1 g.v(1).out('created')
  • 74.
    2 name=rexster created 1 g.v(1).out('created').name
  • 75.
  • 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}
  • 83.
  • 84.
  • 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}
  • 107.
  • 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}
  • 120.
  • 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}
  • 141.
  • 142.
  • 143.
  • 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
  • 153.
  • 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}
  • 160.
  • 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 ?yWHERE { 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 ?yWHERE { 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 ?yWHERE { 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 ?yWHERE { ?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}
  • 185.
  • 186.
  • 187.
  • 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
  • 198.
  • 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
  • 202.
  • 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()}
  • 204.
  • 205.
  • 206.
  • 207.
  • 208.
    4 is anumber. ((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()}
  • 212.
  • 213.
  • 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?'
  • 233.
  • 234.
    IDE Development reXster Command Line REPL REST Server
  • 235.
    Via any JVMlanguage (JSR 223) Neo4j Server
  • 236.