翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
evaluationStrategy
SPARQL クエリヒント
evaluationStrategy
クエリヒントは、注釈が付けられたクエリのフラグメントを独立したユニットとして下部から評価するように Amazon Neptune クエリエンジンに指示します。つまり、前回の評価ステップからのソリューションは、クエリフラグメントの計算に使用されません。クエリフラグメントはスタンドアロンユニットとして評価され、生成されたソリューションは計算された後にクエリの残りの部分と結合されます。
evaluationStrategy
クエリヒントを使用することは、(パイプライン化されていない) クエリプランをブロックすることを意味します。つまり、クエリヒントによって注釈が付けられたフラグメントのソリューションは、メインメモリでマテリアライズおよびバッファされます。特に注釈が付けられたクエリフラグメントが大量の結果を計算する場合、このクエリヒントを使用することによって、クエリの評価に必要なメインメモリの量が大幅に増加する可能性があります。
evaluationStrategy
SPARQL ヒント構文
evaluationStrategy
クエリヒントは、SPARQLクエリに含まれる 3 つのパターンとして指定されます。
わかりやすくするために、次の構文では、クエリに定義されて含まれる hint
プレフィックスを使用して Neptune クエリヒント名前空間を指定します。
PREFIX hint: <http://aws.amazon.com/neptune/vocab/v01/QueryHints#> hint:SubQuery hint:evaluationStrategy "BottomUp" .
利用可能なスコープ
hint:SubQuery
注記
このクエリヒントは、ネストされたサブクエリでのみサポートされています。
クエリヒントスコープの詳細については、「Neptune でのSPARQLクエリヒントの範囲」を参照してください。
evaluationStrategy
SPARQL ヒントの例
このセクションでは、evaluationStrategy
クエリヒントを使用した場合と使用していない場合に記述されたクエリ、および関連する最適化を示します。
この例では、データセットに次の特性があることを前提としています。
1,000 のエッジラベル
:connectedTo
が含まれています。各
component
ノードは、平均 100 の他のcomponent
ノードに接続されています。ノード間の 4 つのホップの周期的な接続の標準的な数は、約 100 です。
クエリヒントなし
次のSPARQLクエリは、4 つのホップを介して相互に周期的に接続されているすべてのcomponent
ノードを抽出します。
PREFIX : <https://example.com/> PREFIX hint: <http://aws.amazon.com/neptune/vocab/v01/QueryHints#> SELECT * { ?component1 :connectedTo ?component2 . ?component2 :connectedTo ?component3 . ?component3 :connectedTo ?component4 . ?component4 :connectedTo ?component1 . }
Neptune クエリエンジンのアプローチは、次のステップを使用してこのクエリを評価することです。
グラフ内の 1,000 の
connectedTo
エッジをすべて抽出します。-
100 倍で展開します (100 は component2 からの発信
connectedTo
エッジの数)。中間結果: 100,000 ノード。
-
100 倍で展開します (100 は component3 からの発信
connectedTo
エッジの数)。中間結果: 10,000,000 ノード。
サイクルを閉じるために 10,000,000 ノードをスキャンします。
この結果、一定量のメインメモリを持つクエリプランがストリーミングされます。
クエリヒントとサブクエリ
メインメモリスペースと高速コンピューティングのトレードオフを実現できます。evaluationStrategy
クエリヒントを使用してクエリを書き換えることで、2 つの小さなマテリアライズされたサブセット間の結合をエンジンに計算させることができます。
PREFIX : <https://example.com/> PREFIX hint: <http://aws.amazon.com/neptune/vocab/v01/QueryHints#> SELECT * { { SELECT * WHERE { hint:SubQuery hint:evaluationStrategy "BottomUp" . ?component1 :connectedTo ?component2 . ?component2 :connectedTo ?component3 . } } { SELECT * WHERE { hint:SubQuery hint:evaluationStrategy "BottomUp" . ?component3 :connectedTo ?component4 . ?component4 :connectedTo ?component1 . } } }
今後のパターンの入力として、前の 3 つのパターンの結果を反復的に使用しながら 3 つのパターンを順番に評価する代わりに、evaluationStrategy
ヒントを使用すると、2 つのサブクエリを個別に評価することができます。この 2 つのサブクエリは、中間結果で 100,000 のノードを生成します。これは、最終出力を生成するために結合されます。
特に、より大規模なインスタンスタイプで Neptune を実行するとき、メインメモリにこれら 2 つの 100,000 サブセットを一時的に保管することにより、評価の時間を大幅に短縮するのと引き換えにメモリ使用量が増加します。