

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

# Amazon Neptune 替代查询引擎 (DFE)
<a name="neptune-dfe-engine"></a>

Amazon Neptune 有一个名为 DFE 的替代查询引擎，它使用数据库实例资源，例如 CPU 内核、内存，并且比最初的 Neptune 引擎 I/O 更高效。

**注意**  
对于大型数据集，DFE 引擎可能无法在 t3 实例上正常运行。

DFE 引擎运行 SPARQL、Gremlin 和 openCypher 查询，并支持各种计划类型，包括深左深度、密集型和混合型计划类型。计划运算符既可以调用计算操作，前者在一组预留的计算内核上运行，也可以调用 I/O 操作，每个操作都在线程池中自己的 I/O 线程上运行。

DFE 使用预生成的有关您的 Neptune 图形数据的统计数据，就如何构建查询做出明智的决定。有关如何生成这些统计数据的信息，请参阅[DFE 统计数据](neptune-dfe-statistics.md)。

计划类型和所用计算线程数量的选择是根据预生成的统计数据和 Neptune 头节点中可用的资源自动做出的。对于具有内部计算并行性的计划，结果的顺序不是预先确定的。

# 控制 Neptune DFE 引擎的使用位置
<a name="neptune-dfe-enabling-disabling"></a>

默认情况下，实例的 [neptune\$1dfe\$1query\$1engine](parameters.md#parameters-instance-parameters-neptune_dfe_query_engine) 实例参数设置为 `viaQueryHint`，这会导致 DFE 引擎仅用于 openCypher 查询，以及显式包含 `useDFE` 查询提示（设置为 `true`）的 Gremlin 和 SPARQL 查询。

通过将 `neptune_dfe_query_engine` 实例参数设置为 `enabled`，您可以完全启用 DFE 引擎，以便尽可能使用该引擎。

您也可以通过包含特定 [Gremlin](gremlin-query-hints-useDFE.md) 查询或 [SPARQL 查询](sparql-query-hints-useDFE.md)的 `useDFE` 查询提示来禁用 DFE。此查询提示允许您阻止 DFE 执行该特定查询。

您可以使用 [实例状态](access-graph-status.md) 调用来确定是否在实例中启用 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` 报告中包含的信息](gremlin-explain-api.md#gremlin-explain-api-results)以了解 `explain`，并参阅[DFE `profile` 报告](gremlin-profile-api.md#gremlin-profile-dfe-output)以了解 `profile`。

同样，SPARQL `explain` 会告诉您 DFE 是否正在执行 SPARQL 查询。有关更多详细信息，请参阅[启用 DFE 时的 SPARQL `explain` 输出示例](sparql-explain-examples.md#sparql-explain-output-dfe)和[`DFENode` 运算符](sparql-explain-operators.md#sparql-explain-operator-dfenode)。

# Neptune DFE 支持的查询构造
<a name="neptune-dfe-suppoorts-subset"></a>

目前，Neptune DFE 支持 SPARQL 和 Gremlin 查询构造的子集。

对于 SPARQL，这是连接性[基本图形模式](https://www.w3.org/TR/sparql11-query/#BasicGraphPatterns)的子集。

对于 Gremlin，它通常是包含遍历链的查询子集，这些遍历链不包含一些更复杂的步骤。

您可以通过以下方式了解您的一个查询是全部还是部分由 DFE 执行：
+ 在 Gremlin 中，`explain` 和 `profile` 结果告诉您 DFE 正在执行查询的哪些部分（如果有）。请参阅[Gremlin `explain` 报告中包含的信息](gremlin-explain-api.md#gremlin-explain-api-results)以了解 `explain`，并参阅[DFE `profile` 报告](gremlin-profile-api.md#gremlin-profile-dfe-output)以了解 `profile`。另请参阅[使用 `explain` 和 `profile` 调整 Gremlin 查询](gremlin-traversal-tuning.md)。

  有关各个 Gremlin 步骤的 Neptune 引擎支持的详细信息，请参阅[Gremlin 步骤支持](gremlin-step-support.md)。
+ 同样，SPARQL `explain` 会告诉您 DFE 是否正在执行 SPARQL 查询。有关更多详细信息，请参阅[启用 DFE 时的 SPARQL `explain` 输出示例](sparql-explain-examples.md#sparql-explain-output-dfe)和[`DFENode` 运算符](sparql-explain-operators.md#sparql-explain-operator-dfenode)。