我正在使用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
我正在尝试使用Titan Graph DB建模网络拓扑。我想从我的python程序中编写Titan Graph DB。我正在使用灯泡包。 我创建了三种类型的顶点
- switch
- port
- device
我在物理连接的端口之间创建带标签的边缘。我使用的标签是“link”。
我们假设我有两个端口顶点portA
和portB
。
我想写一个函数,如下所示
def is_connected(portA, portB):
...
...
...
如何找到两个顶点是否“通过标记边连接”?
我有两个图顶点
src_sw_other_ports
<Vertex: http://localhost:8182/graphs/graph/vertices/48>
dst_sw_other_ports
<Vertex: http://localhost:8182/graphs/graph/vertices/72>
我试过了
link_exists = src_sw_other_ports.out.retain([dst_sw_other_ports]).hasNext()
它给了我以下错误。
File "/home/karthik/Projects/ryu/ryu/app/simple_switch.py", line 238, in compute_path
link_exists = src_sw_other_ports.out.retain([dst_sw_other_ports]).hasNext()
File "/usr/local/lib/python2.7/dist-packages/bulbs/element.py", line 209, in __getattr__
raise AttributeError(name)
AttributeError: out
答案 0 :(得分:4)
gremlin> g = TinkerGraphFactory.createTinkerGraph()
==>tinkergraph[vertices:6 edges:6]
gremlin> v1 = g.v(1)
==>v[1]
gremlin> v3 = g.v(3)
==>v[3]
gremlin> v6 = g.v(6)
==>v[6]
gremlin> v1.out.retain([v3]).hasNext()
==>true
gremlin> v1.out.retain([v6]).hasNext()
==>false
比使用count
好一点,好像你只想要一个边缘的“存在”,你不必迭代整个管道就可以了。
答案 1 :(得分:2)
def is_connected(portA, portB):
return portA.both("link").retain([portB]).hasNext()
请参阅http://gremlindocs.com/#recipes/finding-edges-between-vertices
注意:我在上面的代码中使用了你的函数定义;但是,你的函数定义使用的是Python语法,而不是Groovy,所以上面的例子只有在你从Jython调用Gremlin代码时才有效。
Gremlin-Groovy的定义是:
def isConnected (portA, portB) {
return portA.both("link").retain([portB]).hasNext()
}