深入学习Gremlin(25):执行统计和分析

第25期 Gremlin Steps:

profile()explain()

本系列文章的Gremlin示例均在HugeGraph图数据库上执行,环境搭建可参考准备Gremlin执行环境,本文示例均以其中的“TinkerPop关系图”为初始数据。
深入学习Gremlin(25):执行统计和分析_第1张图片
上一期:深入学习Gremlin(24):附加操作sideEffect

统计和分析说明

Gremlin提供了两种语句来帮助用户对执行的查询语句进行统计和分析工作:

  • explain(),详细描述原始的Gremlin语句在编译期是如何转变为最终要执行的step集合的
  • profile(),统计Gremlin语句执行过程中的每个step消耗的时间和通过的对象等统计信息

TraversalStrategy是“遍历策略”,可以在编译期分析遍历(Traversal)的组成,并在遍历满足TraversalStrategy的条件时对遍历进行修改。这些修改往往都是为了能够更加高效的执行遍历。

遍历策略有5类:

  • Decoration,应用程序级别的策略
  • Optimization,TinkerPop3级别的策略
  • Provider optimization,图数据库实现级别的策略
  • Finalization,遍历执行前的调整和清理策略
  • Verification,判断遍历是否合法的验证策略

实例说明

实例1 explain()

g.V().hasLabel('person').outE().identity().inV().count().is(gt(5)).explain()

深入学习Gremlin(25):执行统计和分析_第2张图片

结果中:

  • original,表示Gremlin语句等价的最初的step列表
  • intermediate,表示original转化在TraversalStrategy作用下的转化过程
    • strategy,表示作用于上一轮的step列表的TraversalStrategy
    • category,表示strategy中的TraversalStrategy所属的级别,参见说明部分
    • traversal,表示上一轮的step列表经过strategy中的TraversalStrategy处理之后的新的step列表
  • final,表示经过所有TraversalStrategy处理后的最终要执行的step列表

实例2 profile()

g.V().out('created').profile()

深入学习Gremlin(25):执行统计和分析_第3张图片

返回的结果中,metrics中每一条是一个执行的step,其中:

  • name是step的名字,例如"HugeGraphStep(vertex,[])"
  • dur是step执行的时间,单位是毫秒
  • annotations中的percentDur是当前step消耗的时间在总的执行时间中的比例
  • counts中的traverserCount是当前step中的traverser的数目
  • counts中的elementCount是当前step中的element的数目

traverserCountelementCount的区别在于: traverserCount是同一step中相同的对象合并之后的数目,对象相同是指当前的对象是一样的,并不代表对象的path等其他数据也相同;相同的对象合并为bulk,可以减少重复工作,提高效率。elementCount是同一step中所有对象展开bulk之后的数目之和,即未去重的对象数目。因此,traverserCount总是小于等于elementCount

profile()语句是一个“副作用”(side effect)语句,并非立刻执行。profile()语句还可以指定一个key,形式为profile(String),在执行完要统计的Gremlin语句后,通过key获取统计信息。例如:

t=g.V().out('created').profile('metrics')
t.iterate()
t.getSideEffects().get('metrics')

深入学习Gremlin(25):执行统计和分析_第4张图片

上一期:深入学习Gremlin(24):附加操作sideEffect

你可能感兴趣的:(图数据库)