我在Titan Graph数据库中有以下信息。我试图通过在gremlin shell上发送查询来理解信息。我试图调查的Graph数据库模拟了Network.There有两种类型的顶点< / p>
- `Switch`
- `Port`
我试图找出这两种顶点之间的关系。
g = TitanFactory.open("/tmp/cassandra.titan")
查看每种类型的顶点列表
$ 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]
找到交换机和端口之间的关系。
g.v(108).out
==>v[560104]
==>v[680004]
==>v[112]
这是什么“出局”?据我所知,有一个向外箭头指向从顶点108
表示的Switch到由顶点560104
680004
和112
表示的端口
这是in
和out
是什么?它是图形数据库特有的东西吗?图形数据库中的标签是什么?是in
和out
标签吗?
答案 0 :(得分:2)
使用in
和out
描述了边缘从一个顶点到另一个顶点的方向。在你的情况下,你有这个:
switch --> port
当你写:
g.v(108).out
你告诉Gremlin在108
处找到顶点,然后沿着指向out
或远离它的边缘行走。您可能还会认为out
从箭头尾部开始走向头部。鉴于您的架构,这些会导致“端口”。
同样,in
只是意味着让Gremlin沿着指向in
的边缘走向顶点。你可能还会想到in
从箭头开始走到尾巴。根据您的架构,交换机将没有in
边缘,因此将始终不返回任何结果。但是,如果您从“端口”顶点开始并遍历in
:
g.v(560104).in
你至少会回到顶点108
,因为顶点“560104”至少有一条带箭头的边指向它(鉴于我对你的样本数据的了解)。
到目前为止,您已经收集到in
和out
是“方向”而不是“标签”。标签有不同的用途;它将边缘分类。例如,您可能具有以下架构:
switch --connectsTo--> port
company --manufactures--> switch
switch --locatedIn--> rack
换句话说,您可能有三个边缘标签,表示“开关”与架构的其他部分相关的不同方式。通过这种方式,您的查询可以更加描述您想要的内容。鉴于您之前的示例和此修订的架构,您必须编写以下内容以获得最初显示的相同结果:
g.v(108).out("connectsTo")
==>v[560104]
==>v[680004]
==>v[112]
图形数据库通常会利用这些标签来帮助提高查询性能。