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