

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

# Neptune이 문 인덱스를 사용하여 Gremlin 쿼리를 처리하는 방법
<a name="gremlin-explain-background-indexing-examples"></a>

문은 [Neptune에서 문을 인덱싱하는 방식](feature-overview-storage-indexing.md)에 설명된 대로 3개의 문 인덱스를 통해 Amazon Neptune에서 액세스할 수 있습니다. Neptune은 Gremlin 쿼리에서 일부 위치가 알려져 있고 나머지 위치는 인덱스 검색을 통해 검색되도록 남겨두는 문 *패턴*을 추출합니다.

Neptune은 속성 그래프 스키마의 크기가 크지 않다고 가정합니다. 이는 각기 다른 엣지 레이블 및 속성 이름의 수가 매우 적어서 서로 다른 조건자의 총 수가 적어진다는 의미입니다. Neptune은 별도의 인덱스에서 서로 다른 조건자를 추적합니다. OSGP 인덱스를 사용하기 보다는 이러한 조건자의 캐시를 사용해 `{ all P x POGS }`에 대해 유니온 스캔을 수행합니다. 역 순회 OSGP 인덱스가 필요하지 않기 때문에 스토리지 공간과 로드 처리량을 모두 줄일 수 있습니다.

Neptune Gremlin Explain/Profile API를 사용하면 그래프의 조건자 수를 알아낼 수 있습니다. 사용자는 애플리케이션에서 속성 그래프 스키마의 크기가 작다는 Neptune 가정이 무효화되는지 여부를 확인할 수 있습니다.

다음 예제는 Neptune이 어떻게 인덱스를 사용하여 Gremlin 쿼리를 처리하는지 보여줍니다.

**질문: 버텍스 `v1`의 레이블은 무엇입니까?**

```
  Gremlin code:      g.V('v1').label()
  Pattern:           (<v1>, <~label>, ?, ?)
  Known positions:   SP
  Lookup positions:  OG
  Index:             SPOG
  Key range:         <v1>:<~label>:*
```

**질문: 버텍스 `v1`의 ‘알려진’ 발신 엣지는 무엇입니까?**

```
  Gremlin code:      g.V('v1').out('knows')
  Pattern:           (<v1>, <knows>, ?, ?)
  Known positions:   SP
  Lookup positions:  OG
  Index:             SPOG
  Key range:         <v1>:<knows>:*
```

**질문: `Person` 버텍스 레이블을 가지고 있는 버텍스는 무엇입니까?**

```
  Gremlin code:      g.V().hasLabel('Person')
  Pattern:           (?, <~label>, <Person>, <~>)
  Known positions:   POG
  Lookup positions:  S
  Index:             POGS
  Key range:         <~label>:<Person>:<~>:*
```

**질문: 주어진 엣지 `e1`의 소스/대상 버텍스는 무엇입니까?**

```
  Gremlin code:      g.E('e1').bothV()
  Pattern:           (?, ?, ?, <e1>)
  Known positions:   G
  Lookup positions:  SPO
  Index:             GPSO
  Key range:         <e1>:*
```

Neptune에 포함되지 **않은** 문 인덱스는 역 순회 OSGP 인덱스입니다. 아래 예제에서와 같이 이 인덱스는 모든 엣지 레이블에서 수신 엣지를 수집하는 데 사용할 수 있습니다.

**질문: 수신 인접 버텍스 `v1`은 무엇인가요?**

```
  Gremlin code:      g.V('v1').in()
  Pattern:           (?, ?, <v1>, ?)
  Known positions:   O
  Lookup positions:  SPG
  Index:             OSGP  // <-- Index does not exist
```