Titan在索引键上的查找速度非常慢?

bcm*_*360 6 gremlin titan

使用Titan w/Cassandra v 0.3.1,我创建了一个顶点键索引,createKeyIndexTitan文档中所述.

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没有一个独特的约束(我不想),但我想知道是什么导致这种性能差异.如何提高非唯一索引顶点键的查找性能?

bcm*_*360 5

这里的问题是使用.has,这是一个过滤功能,不会使用任何索引.来自GremlinDocs:

值得注意的是,语法has类似于g.V("name", "marko"),它具有不同的关键索引查找功能,因此执行速度更快.相反,这一行将g.V.has("name", "marko")迭代所有顶点,检查每个顶点的name属性是否匹配,并且将明显慢于键索引方法.

对于上面的示例,这将使用索引并非常快速地执行查找(<1秒):

gremlin> g.V("my_key", "abc")
==>v[12345]
Run Code Online (Sandbox Code Playgroud)

  • 从Titan 0.5.0开始这是不准确的:`gVhas("my_key","abc")`现在将使用`my_key`键上的可用索引.请参阅Titan的[索引文档](http://s3.thinkaurelius.com/docs/titan/current/indexes.html). (2认同)