

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon Neptune 대체 쿼리 엔진(DFE)
<a name="neptune-dfe-engine"></a>

Amazon Neptune에는 기존 Neptune 엔진보다 더 효율적으로 CPU 코어, 메모리, I/O와 같은 DB 인스턴스 리소스를 사용하는 DFE라는 대체 쿼리 엔진이 있습니다.

**참고**  
데이터 세트가 크면 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 쿼리와 `true`로 설정된 `useDFE` 쿼리 힌트가 명시적으로 포함된 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에서 쿼리를 실행하고 있는지 여부를 알려줍니다. `explain`의 경우 [Gremlin `explain` 보고서에 포함된 정보](gremlin-explain-api.md#gremlin-explain-api-results), `profile`의 경우 [DFE `profile` 보고서](gremlin-profile-api.md#gremlin-profile-dfe-output)를 참조하세요.

마찬가지로 SPARQL `explain`은 SPARQL 쿼리가 DFE에 의해 실행되고 있는지 여부를 알려줍니다. 자세한 내용은 [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에서 쿼리의 어떤 부분을 실행하고 있는지 알 수 있습니다(있는 경우). `explain`의 경우 [Gremlin `explain` 보고서에 포함된 정보](gremlin-explain-api.md#gremlin-explain-api-results), `profile`의 경우 [DFE `profile` 보고서](gremlin-profile-api.md#gremlin-profile-dfe-output)를 참조하세요. [`explain` 및 `profile`을 사용하여 Gremlin 쿼리 조정](gremlin-traversal-tuning.md) 섹션도 참조하세요.

  개별 Gremlin 단계에 대한 자세한 Neptune 엔진 지원 내용은 [Gremlin 단계 지원](gremlin-step-support.md)에 설명되어 있습니다.
+ 마찬가지로 SPARQL `explain`은 SPARQL 쿼리가 DFE에 의해 실행되고 있는지 여부를 알려줍니다. 자세한 내용은 [DFE가 활성화된 경우의 SPARQL `explain` 출력 예제](sparql-explain-examples.md#sparql-explain-output-dfe) 및 [`DFENode` 연산자](sparql-explain-operators.md#sparql-explain-operator-dfenode) 섹션을 참조하세요.