Titan对索引键的查找非常慢



使用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]

最新更新