翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Neptune がステートメントインデックスを使用して Gremlin クエリを処理する方法
Amazon Neptune では、3 つのステートメントインデックスを使用してステートメントにアクセスします。詳細については、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 にないステートメントインデックスの 1 つは、リバーストラバーサルOSGPインデックスです。このインデックスは、次の例のように、すべてのエッジラベルにまたがるすべての受信エッジを収集するために使用できます。
質問:入ってくる隣接頂点は何かv1
?
Gremlin code: g.V('v1').in() Pattern: (?, ?, <v1>, ?) Known positions: O Lookup positions: SPG Index: OSGP // <-- Index does not exist