本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon Neptune 替代查询引擎 (DFE)
Amazon Neptune 有一个名为 DFE 的替代查询引擎,它比最初的 Neptune 引擎更高效地使用 CPU 内核、内存和 I/O 等数据库实例资源。
注意
对于大型数据集,DFE 引擎可能无法在 t3 实例上正常运行。
DFE 引擎运行 SPARQL、Gremlin 和 openCypher 查询,并支持各种计划类型,包括深左深度、密集型和混合型计划类型。计划运算符既可以调用计算操作(在一组预留的计算内核上运行),也可以调用 I/O 操作(每个操作都在 I/O 线程池中各自的线程上运行)。
DFE 使用预生成的有关您的 Neptune 图形数据的统计数据,就如何构建查询做出明智的决定。有关如何生成这些统计数据的信息,请参阅DFE 统计数据。
计划类型和所用计算线程数量的选择是根据预生成的统计数据和 Neptune 头节点中可用的资源自动做出的。对于具有内部计算并行性的计划,结果的顺序不是预先确定的。
控制 Neptune DFE 引擎的使用位置
默认情况下,实例的 neptune_dfe_query_engine 实例参数设置为 viaQueryHint
,这会导致 DFE 引擎仅用于 openCypher 查询,以及显式包含 useDFE
查询提示(设置为 true
)的 Gremlin 和 SPARQL 查询。
通过将 neptune_dfe_query_engine
实例参数设置为 enabled
,您可以完全启用 DFE 引擎,以便尽可能使用该引擎。
您也可以通过包含特定 Gremlin 查询或 SPARQL 查询的 useDFE
查询提示来禁用 DFE。此查询提示允许您阻止 DFE 执行该特定查询。
您可以使用 实例状态 调用来确定是否在实例中启用 DFE,如下所示:
curl -G https://
your-neptune-endpoint
:port
/status
然后,状态响应会指定 DFE 是否已启用:
{ "status":"healthy", "startTime":"Wed Dec 29 02:29:24 UTC 2021", "dbEngineVersion":"development", "role":"writer", "dfeQueryEngine":"viaQueryHint", "gremlin":{"version":"tinkerpop-3.5.2"}, "sparql":{"version":"sparql-1.1"}, "opencypher":{"version":"Neptune-9.0.20190305-1.0"}, "labMode":{ "ObjectIndex":"disabled", "ReadWriteConflictDetection":"enabled" }, "features":{ "ResultCache":{"status":"disabled"}, "IAMAuthentication":"disabled", "Streams":"disabled", "AuditLog":"disabled" }, "settings":{"clusterQueryTimeoutInMs":"120000"} }
Gremlin explain
和 profile
结果会告诉您 DFE 是否正在执行查询。请参阅Gremlin explain 报告中包含的信息以了解 explain
,并参阅DFE profile 报告以了解 profile
。
同样,SPARQL explain
会告诉您 DFE 是否正在执行 SPARQL 查询。有关更多详细信息,请参阅启用 DFE 时的 SPARQL explain 输出示例和DFENode 运算符。
Neptune DFE 支持的查询构造
目前,Neptune DFE 支持 SPARQL 和 Gremlin 查询构造的子集。
对于 SPARQL,这是连接性基本图形模式
对于 Gremlin,它通常是包含遍历链的查询子集,这些遍历链不包含一些更复杂的步骤。
您可以通过以下方式了解您的一个查询是全部还是部分由 DFE 执行:
-
在 Gremlin 中,
explain
和profile
结果告诉您 DFE 正在执行查询的哪些部分(如果有)。请参阅Gremlin explain 报告中包含的信息以了解explain
,并参阅DFE profile 报告以了解profile
。另请参阅使用 explain 和 profile 调整 Gremlin 查询。有关各个 Gremlin 步骤的 Neptune 引擎支持的详细信息,请参阅Gremlin 步骤支持。
同样,SPARQL
explain
会告诉您 DFE 是否正在执行 SPARQL 查询。有关更多详细信息,请参阅启用 DFE 时的 SPARQL explain 输出示例和DFENode 运算符。