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

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

在 Neptune DFE 查询引擎中使用 Gremlin

如果您在实验室模式下完全启用已知为 DFE 的 Neptune 替代查询引擎(通过将 neptune_lab_mode 数据库集群参数设置为 DFEQueryEngine=enabled),那么 Neptune 会将只读的 Gremlin 查询/遍历转换为中间逻辑表示形式,并尽可能在 DFE 引擎上运行它们。

但是,DFE 尚不支持所有 Gremlin 步骤。当无法在 DFE 上原生运行某个步骤时,Neptune 会退回来运行该步骤。 TinkerPop explainprofile 报告包含发生这种情况时的警告。

注意

引擎版本 1.0.5.0 开始,在没有原生支持的情况下处理 Gremlin 步骤的默认 DFE 行为发生了变化。以前 DFE 发动机落在海王星 Gremlin 发动机上,现在它又回到了普通发动机上。 TinkerPop

DFE 引擎原生支持的 Gremlin 步骤
  • GraphStep

  • VertexStep

  • EdgeVertexStep

  • IdStep

  • TraversalFilterStep

  • PropertiesStep

  • HasStep 支持对属性、id 和标签上的顶点和边缘进行筛选,但文本和 Without 谓词除外。

  • WherePredicateStep,使用 Path 范围的筛选条件,但不支持 ByModulationSideEffectMap 查找

  • DedupGlobalStep,但 ByModulationSideEffectMap 查找支持除外。

查询计划交错

当转换过程遇到没有相应原生 DFE 运算符的 Gremlin 步骤时,在回退到使用 Tinkerpop 之前,它会尝试查找其它可以在 DFE 引擎上原生运行的中间查询部分。它通过将交错逻辑应用于顶级遍历来实现这一点。结果是尽可能使用支持的步骤。

任何此类中间、非前缀的查询转换在 explainprofile 输出中都使用 NeptuneInterleavingStep 来表示。

为比较性能,您可能需要关闭查询中的交错功能,同时仍使用 DFE 引擎来运行前缀部分。或者,您可能只想使用 TinkerPop 引擎执行非前缀查询。您可以通过使用 disableInterleaving 查询提示执行该操作。

正如值为 falseuseDFE 查询提示完全阻止在 DFE 上运行查询一样,值为 truedisableInterleaving 查询提示会关闭查询转换的 DFE 交错。例如:

g.with('Neptune#disableInterleaving', true) .V().has('genre','drama').in('likes')

更新了 Gremlin explainprofile 输出

Gremlin explain 提供有关 Neptune 用来运行查询的优化遍历的详细信息。有关启用 DFE 引擎时 explain 输出内容的示例,请参阅 DFE explain 输出示例

Gremlin profile API 运行指定的 Gremlin 遍历,收集有关运行的各种指标,并生成 Profile 报告,其中包含有关优化查询计划的详细信息以及各种运算符的运行时系统统计数据。有关启用 DFE 引擎时 profile 输出内容的示例,请参阅 DFE profile 输出示例

注意

由于 DFE 引擎是在实验室模式下发布的实验特征,因此 explainprofile 输出的确切格式可能会发生变化。