6

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

4

1 回答 1

5

这里的问题是使用.has,它是一个过滤函数,不会使用任何索引。来自GremlinDocs

值得注意的是, 的语法has类似于g.V("name", "marko"),不同之处在于它是键索引查找,因此执行速度更快。相比之下,这条线g.V.has("name", "marko")将遍历所有顶点,检查每个顶点的名称属性是否匹配,并且将比键索引方法慢得多。

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

gremlin> g.V("my_key", "abc")
==>v[12345]
于 2013-06-17T12:56:00.507 回答