

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Neptune がステートメントインデックスを使用して Gremlin クエリを処理する方法
ステートメントインデックス

Amazon Neptune では、3 つのステートメントインデックスを使用してステートメントにアクセスします。詳細については、[Neptune でステートメントのインデックスを作成する方法](feature-overview-storage-indexing.md) に記載しています。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 が持た**ない**ステートメントインデックスの 1 つは、リバーストラバーサル OSGP インデックスです。このインデックスは、次の例のように、すべてのエッジラベルにまたがるすべての受信エッジを収集するために使用できます。

**質問:入ってくる隣接頂点は何か`v1`?**

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