使用Titan w/Cassandra v 0.3.1,我按照Titan文档中的描述通过createKeyIndex
创建了一个顶点键索引。
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
没有唯一的约束(我不想),但我想知道是什么导致了这样的性能差异。如何提高查找非唯一索引顶点键的性能?
这里的问题是.has
的使用,它是一个过滤函数,不会使用任何索引。从GremlinDocs:
值得注意的是,
has
的语法与g.V("name", "marko")
相似,不同之处在于它是键索引查找,而不是这样会执行得更快。相反,这一行g.V.has("name", "marko")
将遍历检查的name属性的所有顶点每个顶点匹配和将明显慢于键指数方法。
对于上面的示例,这将使用索引并非常快速地执行查找(<1秒):
gremlin> g.V("my_key", "abc")
==>v[12345]