Gremlin repeatMode 查询提示 - Amazon Neptune
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Gremlin repeatMode 查询提示

Neptune repeatMode 查询提示指定 Neptune 引擎计算 Gremlin 遍历中的 repeat() 步骤的方式:广度优先、深度优先或分块深度优先。

在使用 repeat() 步骤查找或跟踪路径时,该步骤的计算模式非常重要,而不只是将步骤重复有限次数。

语法

通过向查询添加 withSideEffect 步骤来指定 repeatMode 查询提示。

g.withSideEffect('Neptune#repeatMode', 'mode').gremlin-traversal
注意

所有 Gremlin 查询提示副作用的前缀为 Neptune#

可用模式
  • BFS

    广度优先搜索

    repeat() 步骤的默认执行模式。这将在沿路径深入之前获取所有同级节点。

    此版本为内存密集型的,边界可以非常大。查询将耗尽内存并被 Neptune 引擎取消的风险更高。这与其他 Gremlin 实施最匹配。

  • DFS

    深度优先搜索

    在继续下一个解之前,跟踪每条路径至最大深度。

    这将使用更少的内存。在类似从多个跃点外的起点查找单一路径这样的情况下,它可提供更好的性能。

  • CHUNKED_DFS

    分块深度优先搜索

    一种混合方式,它在 1000 个节点(既不是 1 个节点 (DFS) ,也不是所有节点 (BFS)) )组成的区块中,以深度优先方式搜索图形。

    Neptune 引擎将在每个级别获得多达 1000 个节点,然后更深入地跟踪该路径。

    这是一种速度和内存使用率之间的平衡方法。

    如果您要使用 BFS,但查询占用的内存太多,这也会很有用。

示例

以下各节介绍了重复模式对 Gremlin 遍历的影响。

在 Neptune 中,repeat() 步骤的默认模式是对所有遍历实施广度优先 (BFS) 执行策略。

在大多数情况下, TinkerGraph 实现使用相同的执行策略,但在某些情况下,它会改变遍历的执行。

例如, TinkerGraph 实现修改了以下查询。

g.V("3").repeat(out()).times(10).limit(1).path()

此遍历中的 repeat() 步骤将“展开”到以下遍历,这将导致执行深度优先 (DFS) 策略。

g.V(<id>).out().out().out().out().out().out().out().out().out().out().limit(1).path()
重要

Neptune 查询引擎不会自动执行此操作。

广度优先 (BFS) 是默认的执行策略,与大多数 TinkerGraph 情况下的执行策略类似。但是,在特定情况下会优先选择深度优先 (DFS) 策略。

BFS(默认)

广度优先 (BFS) 是 repeat() 运算符的默认执行策略。

g.V("3").repeat(out()).times(10).limit(1).path()

Neptune 引擎将完全探索前九个跃点边界,然后再向外扩展十个跃点查找解。这在许多情况(如最短路径查询)下很有效率。

但是,对于上述示例,遍历使用 repeat() 运算符的深度优先 (DFS) 模式将快得多。

DFS

以下查询使用 repeat() 运算符的深度优先 (DFS) 模式。

g.withSideEffect("Neptune#repeatMode", "DFS").V("3").repeat(out()).times(10).limit(1)

在探索下一个解之前,这将跟踪每个单独的解,直至最大深度。