【问题标题】:gremlin hasLabel query times outgremlin hasLabel 查询超时
【发布时间】:2020-06-20 00:25:15
【问题描述】:

我有一个测试图,其节点数少于一百万,边数可能略多。我正在使用远程 gremlin 客户端连接到由 3 个 scylla 后端支持的 janusgraph/gremlin-server 实例。

我有各种不同的标记节点,即 url、域、主机和品牌。该图主要包含 url、域和主机节点。我在整个图表中有一个品牌节点。品牌节点如下所示:

{
    label: brand 
    properties: {
        brand: string
    }
}

我能够在 1.5 毫秒内完成以下查询。品牌属性具有综合指数。

g.V().hasLabel('brand').has('brand','stackoverflow');

下面的查询达到 30 秒超时。我希望此查询仅根据我导入图表的数据返回一个结果。我通过限制测试验证了

g.V().hasLabel('brand')

我的问题

  • 为什么会超时?
  • Janusgraph 是否扫描图表中的所有节点以尝试找到标记为“品牌”的单个节点?标签上没有默认索引吗?
  • 为什么第一个查询的第一个查询执行得很好,而第一个查询的第一步是相同的?

谢谢

【问题讨论】:

  • 只是出于好奇,这个查询是通过什么接口超时的?我知道当我在 PHP 上使用 Gremlin-Server 时,当它尝试返回完整的信息集时会超时。它可以通过将.next()附加到第二个查询的末尾来解决,因为它将提供查询的上下文以返回给您的程序,该程序将其称为单个顶点的值。
  • 我正在使用 gremlin 控制台连接到远程 janusgraph。据我了解,控制台应该自动迭代您的查询。

标签: gremlin janusgraph gremlin-server


【解决方案1】:
  • 为什么会超时?
  • Janusgraph 是否扫描所有节点 图表试图找到标记为“品牌”的单个节点?有没有 标签的默认索引?

正如您所猜测的,这可能是由于全图扫描而超时,因为顶点标签没有在 JanusGraph 中建立索引。有一个未解决的问题:https://github.com/JanusGraph/janusgraph/issues/283

  • 为什么第一个查询在两个查询的第一步都相同时执行良好?

在这种情况下,我怀疑 JanusGraph 的优化器能够优化遍历计划以使用复合索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-15
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 2018-09-17
    • 2014-08-01
    相关资源
    最近更新 更多