1

我在 Titan Graph 数据库中有以下信息。我试图通过跨 gremlin shell 发送查询来理解这些信息。我试图研究的 Graph 数据库对网络进行建模。有两种类型的顶点

        - `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]

这是什么“出”?据我了解,有一个向外的箭头指向由顶点表示的 Switch108到由顶点表示的端口560104 680004112

这是什么inout?它是图形数据库特有的东西吗?还有什么是图形数据库中的标签?是inout标签吗?

4

1 回答 1

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]

图数据库通常会利用这些标签来帮助提高查询性能。

于 2014-06-03T12:37:44.183 回答