使用Titan w / Cassandra v 0.3.1,我通过createKeyIndex
创建了一个顶点键索引,如Titan docs中所述。
gremlin> g.createKeyIndex("my_key", Vertex.class)
==>null
我现在在图表中有appx 50k节点和186k边缘,并且我发现使用my_key
的查找之间存在显着的性能差异。此查询大约需要5秒钟才能运行:
gremlin> g.V.has("my_key", "abc")
==>v[12345]
而使用索引ID的时间不到1秒:
gremlin> g.v(12345)
==>v[12345]
my_key
没有唯一的约束(我不想),但我想知道导致这种性能差异的原因。如何提高查找非唯一索引顶点键的性能?
答案 0 :(得分:5)
这里的问题是使用.has
,它是一个过滤函数,不会使用任何索引。来自GremlinDocs:
值得注意的是
has
的语法类似于g.V("name", "marko")
,它与关键索引查找的区别在于 这样会表现得更快。相反,这一行g.V.has("name", "marko")
将迭代检查name属性的所有顶点 匹配的每个顶点将明显慢于键 指数方法。
对于上面的示例,这将使用索引并快速执行查找(< 1秒):
gremlin> g.V("my_key", "abc")
==>v[12345]