通过Gremlin计算大图中节点/边数的最简单,最有效的方法是什么?我发现最好的是使用V迭代器:
gremlin> g.V.gather{it.size()}
Run Code Online (Sandbox Code Playgroud)
图的顶点迭代器.利用它来迭代图中的所有顶点.除非与键索引查找结合使用,否则请小心使用大型图形.
我是Gremlin的新手,只是试图建立一个基本图表.我已经能够在新顶点上做一个基本的addEdge,即
gremlin> v1 = g.addVertex()
==>v[200004]
gremlin> v2 = g.addVertex()
==>v[200008]
gremlin> e = g.addEdge(v1, v2, 'edge label')
==>e[4c9f-Q1S-2F0LaTPQN8][200004-edge label->200008]
Run Code Online (Sandbox Code Playgroud)
我也能够通过id查找顶点之间的边缘:
gremlin> v1 = g.v(200004)
==>v[200004]
gremlin> v2 = g.v(200008)
==>v[200008]
gremlin> e = g.addEdge(v1, v2, 'edge label')
==>e[4c9f-Q1S-2F0LaTPQN8][200004-edge label->200008]
Run Code Online (Sandbox Code Playgroud)
但是,我现在想要根据多个属性查找顶点,这就是它变得棘手的地方.为了查找正确的顶点,我正在进行2次调用.has.看起来找到了正确的顶点,但是添加边缘失败了.
gremlin> v1 = g.V.has("x",5).has('y",7)
==>v[200004]
gremlin> v2 = g.V.has("x",3).has('y",5)
==>v[200008]
gremlin> e = g.addEdge(v1, v2, 'edge label')
No signature of method: groovy.lang.MissingMethodException.addEdge() is applicable for argument types: () values: []
Run Code Online (Sandbox Code Playgroud)
基于属性值查找,在两个现有顶点之间添加简单边的最简单方法是什么?
我正在使用Titan Server(Cassandra)v 0.3.1.我想在我已经开始使用的顶点键/属性上创建索引.然而,在他们的文档中,Titan解释说:
要按键索引顶点,必须在首次在顶点属性中使用键之前创建相应的键索引.
如果我尝试在已存在的字段上创建索引,我会看到预期的错误:
gremlin> g.createKeyIndex("my_key",Vertex.class)
Cannot add an index to an already existing property key: my_key
Run Code Online (Sandbox Code Playgroud)
但是,即使我尝试通过删除所有顶点和边缘来清除图形,我也会看到同样的错误:
gremlin> g.E.remove()
==>null
gremlin> g.V.remove()
==>null
gremlin> g.createKeyIndex("my_key",Vertex.class)
Cannot add an index to an already existing property key: my_key
Run Code Online (Sandbox Code Playgroud)
因此,my_key即使在删除所有图形元素之后,似乎仍然存在于底层数据存储中.这与文档一致(即使元素已被删除,属性已经"首次使用"),但似乎值得一试.
我的下一步将是重新创建一个新的Cassandra数据存储,但我想知道是否有更好的选择.
在已经在Titan中使用的字段上创建索引的最简单方法是什么?
使用Titan w/Cassandra v 0.3.1,我创建了一个顶点键索引,createKeyIndex如Titan文档中所述.
gremlin> g.createKeyIndex("my_key", Vertex.class)
==>null
Run Code Online (Sandbox Code Playgroud)
我现在在图中有appx 50k节点和186k边缘,我发现使用的查找之间存在显着的性能差异my_key.此查询大约需要5秒钟才能运行:
gremlin> g.V.has("my_key", "abc")
==>v[12345]
Run Code Online (Sandbox Code Playgroud)
而使用索引ID的时间不到1秒:
gremlin> g.v(12345)
==>v[12345]
Run Code Online (Sandbox Code Playgroud)
my_key没有一个独特的约束(我不想),但我想知道是什么导致这种性能差异.如何提高非唯一索引顶点键的查找性能?
我正在使用Titan v0.3.1,并希望看到我已经通过索引编制了哪些键的列表createKeyIndex.我怎样才能做到这一点?
如果有多个边连接同一对节点,both则会返回重复的节点:
gremlin> v2 = g.addVertex(null,['x':5,'y':7])
==>v[360004]
gremlin> v3 = g.addVertex(null, ['x':2,'y':3])
==>v[360008]
gremlin> g.addEdge(v2,v3,'test')
==>e[6IeZ-1vEw-2F0LaTPQQu][360004-test->360008]
gremlin> g.addEdge(v2,v3,'test 2')
==>e[6If7-1vEw-2F0LaTPQQC][360004-test 2->360008]
gremlin> v2.both.map
==>{y=3, x=2}
==>{y=3, x=2}
Run Code Online (Sandbox Code Playgroud)
如何确保我得到一个明确的节点列表?