【问题标题】:Titan lookups on indexed key are incredibly slow?Titan 对索引键的查找非常慢?
【发布时间】:2013-06-13 10:00:32
【问题描述】:

使用带有 Cassandra v 0.3.1 的 Titan,我通过 createKeyIndex 创建了一个顶点键索引,如 Titan docs 中所述。

gremlin> g.createKeyIndex("my_key", Vertex.class)
==>null

我现在在图中有大约 50k 个节点和 186k 个边,我发现使用 my_key 的查找之间存在显着的性能差异。此查询大约需要 5 秒才能运行:

gremlin> g.V.has("my_key", "abc")
==>v[12345]

而使用索引 ID 只需不到 1 秒:

gremlin> g.v(12345)
==>v[12345]

my_key 没有唯一约束(我不想),但我想知道是什么导致了这种性能差异。如何提高查找非唯一索引顶点键的性能?

【问题讨论】:

    标签: gremlin titan


    【解决方案1】:

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

    值得注意的是has的语法与g.V("name", "marko")类似,区别在于是键索引查找和作为 这样会执行得更快。相反,g.V.has("name", "marko") 这一行将遍历所有顶点,检查 匹配的每个顶点,并且会比键慢得多 索引方法。

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

    gremlin> g.V("my_key", "abc")
    ==>v[12345]
    

    【讨论】:

    • 这在 Titan 0.5.0 中不准确:g.V.has("my_key", "abc") 现在将使用my_key 键上的可用索引。请参阅 Titan 的 index docs
    猜你喜欢
    • 2015-02-06
    • 2020-05-10
    • 1970-01-01
    • 2016-11-10
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    • 2013-12-04
    相关资源
    最近更新 更多