【问题标题】:OrientDB: Gremlin Count query extremely slowOrientDB:Gremlin Count 查询极慢
【发布时间】:2016-05-16 14:07:52
【问题描述】:

我正在尝试使用 gremlin 在 OrientDB 2.2 中查找计数(用于分页),当我的类有很多顶点(100 万)时,这个查询就会消失(startsWith 'smi' 过滤器的记录计数约为 6000) .我已经在 last_name 字段上创建了全文(sbtree)。

g.getVerticesOfClass('person')._().filter{it.getProperty("last_name").startsWith("smi")}.count()

我怎样才能写得更好,以便计数在合理的时间内返回。我还没有添加排序,因为它给了我 outOfMemory。

【问题讨论】:

    标签: orientdb gremlin


    【解决方案1】:

    使用 Gremlin .has() 步骤而不是带有 lambda 的原生 Groovy .filter() 方法可能会更幸运。以下可能会更快:

    g.getVerticesOfClass('person')._().has('last_name').startsWith('smi').count()
    

    如果您使用的是https://github.com/mpollmeier/orientdb-gremlin,我认为查询优化器还不能将索引用于带有startsWith() 谓词的查询。

    【讨论】:

    • 谢谢,但我认为脚本中有错误。 has 会返回一个管道,并且在此之后startsWith 无法正常工作
    • 你说得对,我没注意,抱歉:)。您最好的选择是在这里打开一个问题:github.com/mpollmeier/orientdb-gremlin 您可能还想编辑您的第一个查询并首先过滤具有last_name 属性的元素,即。 g.getVerticesOfClass('person')._().has("last_name").filter{it.getProperty("last_name").startsWith("smi")}.count()。您使用的 Gremlin 步骤越多,可以使用的优化器就越多。原生 Groovy 函数不能。
    猜你喜欢
    • 2019-10-25
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    相关资源
    最近更新 更多