灯泡:在TitanDB中的两个顶点之间创建“in”和“out”边缘

时间:2014-06-16 01:42:38

标签: cassandra titan bulbs

我正在使用TitanGraphDB + Cassandra。我正在按照以下方式启动Titan

cd titan-cassandra-0.3.1
bin/titan.sh config/titan-server-rexster.xml config/titan-server-cassandra.properties

我有一个Rexster shell,我可以使用它与上面的Titan + Cassandra进行交流。

cd rexster-console-2.3.0
bin/rexster-console.sh

我想从我的python程序中编写Titan Graph DB。我正在使用灯泡包。

 from bulbs.titan import Graph
   g = Graph()


   vertex1  = g.vertices.get_or_create('dpid',dpid_str,{'state':'active','dpid':dpid_str,'type':'switch'}))
   vertex2  = g.vertices.get_or_create('desc',desc,{'desc':desc,'port_id':port_id,'state':state,'port_state':port_state,'number':number,'type':'port'}))

从示例中我了解如何在顶点之间创建边缘

 g.edges.create(vertex1,"out",vertex2)

但是假设我没有在程序中引用顶点。

我想使用其键" dpid"来检索vertex1。和    我想使用它的键" desc"来检索vertex2。

然后使用我想要创建边缘的检索值。我该怎么做?

1 个答案:

答案 0 :(得分:1)

要通过索引属性(而不是其数据库ID)检索顶点,可以使用Bulbs内置索引方法之一:

>>> # returns an iterator (can return more than 1)
>>> vertices = g.vertices.index.lookup("dpid", dpid_str)   
>>> vertex1 = vertices.next()

>>> # returns 1 vertex or None (errors if more than 1)
>>> vertex2 = g.vertices.index.get_unique( "dpid", dpid_str)  

要创建边缘,只需执行...

>>> g.edges.create(vertex1, "out", vertex2)

注意:您不需要标记边缘" out" (" out"由从vertex1出来到edgeex2的边缘的方向暗示)。您应该考虑使用更具描述性的标签。

请参阅...

Rexter索引文档:

index.lookup() https://github.com/espeed/bulbs/blob/afa28ccbacd2fb92e0039800090b8aa8bf2c6813/bulbs/titan/index.py#L251

index.get_unique() https://github.com/espeed/bulbs/blob/afa28ccbacd2fb92e0039800090b8aa8bf2c6813/bulbs/titan/index.py#L274