本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 Neptune 查询引擎中使用 Gremlin DFE
如果您完全启用了名为实验室模式的 Neptune 替代查询引擎(通过将DFEneptune_lab_mode
数据库集群参数设置为DFEQueryEngine=enabled
),那么 Neptune 会将只读的 Gremlin 查询/遍历转换为中间逻辑表示形式,并尽可能在引擎上运行它们。DFE
但是,尚DFE不支持 Gremlin 的所有步骤。当无法在上原生运行某个步骤时DFE,Neptune 会退回来 TinkerPop 运行该步骤。explain
和 profile
报告包含发生这种情况时的警告。
注意
从引擎版本 1.0.5.0 开始,在没有原生支持的情况下处理 Gremlin 步骤的默认DFE行为发生了变化。以前DFE发动机落在 Neptune Gremlin 发动机上,现在它又落在了普通发动机上。 TinkerPop
引擎原生支持的 Gremlin 步骤 DFE
GraphStep
VertexStep
EdgeVertexStep
IdStep
TraversalFilterStep
PropertiesStep
HasStep
支持对属性、id 和标签上的顶点和边缘进行筛选,但文本和Without
谓词除外。WherePredicateStep
,使用Path
范围的筛选条件,但不支持ByModulation
、SideEffect
或Map
查找DedupGlobalStep
,但ByModulation
、SideEffect
和Map
查找支持除外。
查询计划交错
当翻译过程遇到一个没有相应本机DFE运算符的 Gremlin 步骤时,在回退到使用 Tinkerpop 之前,它会尝试查找其他可以在引擎上原生运行的中间查询部分。DFE它通过将交错逻辑应用于顶级遍历来实现这一点。结果是尽可能使用支持的步骤。
任何此类中间、非前缀的查询转换在 explain
和 profile
输出中都使用 NeptuneInterleavingStep
来表示。
为了比较性能,你可能需要关闭查询中的交错功能,同时仍然使用DFE引擎来运行前缀部分。或者,您可能只想使用 TinkerPop 引擎执行非前缀查询。您可以通过使用 disableInterleaving
查询提示执行该操作。
正如值为的使用 DFE查询提示完全false
无法DFE在上运行查询一样,值为的disableInterleaving
查询提示true
会关闭对查询进行DFE翻译的交错。例如:
g.with('Neptune#disableInterleaving', true) .V().has('genre','drama').in('likes')
更新了 Gremlin explain
和 profile
输出
Gremlin explain 提供有关 Neptune 用来运行查询的优化遍历的详细信息。有关启用DFE引擎时DFEexplain输出explain结果的示例,请参阅示例输出。
Gremlin profile API 运行指定的 Gremlin 遍历,收集有关运行的各种指标,并生成 Profile 报告,其中包含有关优化查询计划的详细信息以及各种运算符的运行时系统统计数据。有关启用DFE引擎时profile
输出结果的示例,请参阅示例DFEprofile输出。
注意
由于该DFE引擎是在实验室模式下发布的实验功能,因此explain
和profile
输出的确切格式可能会发生变化。