性能优化

本文介绍优化图数据库GDB性能的方法,帮助您快速定位图数据库GDB的性能问题,提升查询效率。

设置查询范围

图数据库GDB的查询分析引擎程序能够根据数据输入提供适合需求的查询方式。当查询数据量大时,您可以指定查找数据的范围(特定的label,查询属性的起始范围、终止范围、迭代次数等)。

示例:

  • 推荐方案(将过滤属性限制在10~30内)

    g.V().hasLabel("person").has("age",P.gt(10).and(lt(30))).limit(5)
  • 普通方案

    g.V().has("age",P.gt(10))

查询最短路径

  • 图数据库GDB采用DFS(深度优先搜索)策略实现最短路径,当您的业务中图数据的连通规模非常大时,您可以在进行最短路径查询时添加限制条件。

    示例:

    • 推荐方案(限制了最短路径的最大深度)

      g.V($startV).repeat(both().simplePath()).until(hasId($endV).or().loops().is(gt($depth))).hasId($endV).path()
    • 普通方案

      g.V($startV).repeat(both().simplePath()).until(hasId($endV))
  • 当您的业务中需要将数据按照权重进行最短路径查询,您可以按照边的权重进行排序。

    示例:

    g.V(fromVertexId)
      .repeat(outE().inV().simplePath())
      .until(hasId(toVertexId).or().loops().is(gt(deepLimit)))
      .hasId(toVertexId).path().as(‘p’)
      .map(unfold().coalesce(values(‘weight’),constant(0.0)).sum())
      .as(‘cost’).select(‘cost’,’p’).order().by(select(“cost”),Order.incr)

规避超级顶点

图数据库GDB具有自动索引机制和强大的统计分析引擎,为您提供适合的执行优化。即使如此,也建议您在使用图数据库GDB时通过规则规避业务中的超级顶点。

查询修改的合并语句

如果您的业务需要在使用Gremlin查询的同时修改property,您可以使用查询修改的合并语句。

示例:

g.V("test").property("nums", union(values("nums"), constant(1)).sum())

查询超时分析

如果您的业务场景比较复杂,容易出现超时的情况,您可以使用profile()语句,对查询中每一步的执行性能进行分析。通过性能分析,您可以对查询执行中涉及到的数据分布情况有明确了解(例如超级顶点、随机查询大量数据、属性过滤等比较耗时的数据)。

查询请求示例:

g.V().out().limit(10).profile()

返回数据示例:

==>Traversal Metrics
Step                                                               Count   Traverses       Time (ms)    % Dur
=============================================================================================================
GraphDbGraphStep(vertex,[])                                           29          29           1.657    77.43
VertexStep(OUT,vertex)                                                11          11           0.410    19.18
RangeGlobalStep(0,10)                                                 10          10           0.072     3.39
                                            >TOTAL                     -           -           2.140        -

执行profile() 后生成的TraversalMetrics对象包含如下信息:

  • Step(步骤):当前在遍历中被分析的步骤,更多信息请参见Gremlin(中文)

  • Count(计数):通过该步骤过滤的遍历数量。

  • Traverses(遍历):通过该步骤过滤的去重后的遍历数量。

  • Time (ms)(时间):该步骤主动执行遍历的总时间,单位:毫秒。

  • % Dur:该步骤的耗时占总时间的百分比。

说明

DMS不支持profile() 命令,建议您通过Gremlin Console连接实例后使用该命令。如何通过Gremlin Console连接实例,请参见通过Gremlin Console连接实例