I have the following information in a Titan Graph database.I am trying to make sense of the information by sending queries across gremlin shell.The Graph database that I am trying to investigate models a Network.There are two types of vertices
- `Switch`
- `Port`
I am trying to figure out the relationship between these two types of vertices.
g = TitanFactory.open("/tmp/cassandra.titan")
To see the list of vertices of each type
$ g.V('type', 'switch')
==>v[228]
==>v[108]
==>v[124]
==>v[92]
==>v[156]
==>v[140]
$ g.V('type', 'port')
==>v[160]
==>v[120152]
==>v[164]
==>v[120156]
==>v[560104]
==>v[680020]
==>v[680040]
==>v[112]
==>v[120164]
==>v[560112]
==>v[680012]
==>v[680004]
==>v[144]
==>v[680032]
==>v[236]
==>v[100]
==>v[560128]
==>v[128]
==>v[680028]
==>v[232]
==>v[96]
To find the relation between the switch and port.
g.v(108).out
==>v[560104]
==>v[680004]
==>v[112]
What is this "out"? As I understand there is a outward arrow pointing from Switch represented by vertex 108
to the Ports represented by vertices 560104
680004
and 112
What is this in
and out
? Is it something very specific to Graph Databases? Also what is a label in a graph databse? Are in
and out
labels?
The use of
in
andout
is descriptive of the direction of the edge going from one vertex to another. In your case, you have this:When you write:
you are telling Gremlin to find the vertex at
108
, then walk along edges that pointout
or away from it. You might also think ofout
as starting from the tail of the arrow and walking to the head. Given your schema, those lead to "ports".Similarly,
in
simply means to have Gremlin walk along edges that pointin
to the vertex. You might also think ofin
as starting from the head of the arrow and walking to the tail. Given your schema, switches will have noin
edges and hence will always return no results. However if you were to start from a "port" vertex and traversein
:you would at least get back vertex
108
as vertex "560104" has at least one edge with an arrow pointing to it (given what I know of your sample data).By now you've gathered that
in
andout
are "directions" and not "labels". A label has a different purpose; it categorizes an edge. For example, you might have the following schema:In other words you might have three edge labels representing different ways that a "switch" relates to other parts of your schema. In this way your queries can be more descriptive about what you want. Given your previous example and this revised schema you would have to write the following to get the same result you originally showed:
Graph databases will typically take advantage of these labels to help improve performance of queries.