查evaluationStrategySPARQL詢提示 - Amazon Neptune

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

evaluationStrategySPARQL詢提示

evaluationStrategy 查詢提示會告訴 Amazon Neptune 查詢引擎,應該將標註的查詢片段當做獨立單位由下而上評估。這表示之前評估步驟的解決方案不會用來計算查詢片段。查詢片段被當做獨立單位而評估,其生成的解決方案在計算後與查詢的其餘部分聯結。

使用 evaluationStrategy 查詢提示暗示區塊化 (非管道化的) 查詢計畫,這意味著使用查詢提示標註的片段解決方案,在主記憶體中會具體化和緩衝。使用此查詢提示可能會大幅增加評估查詢所需的主記憶體,尤其是在標註的查詢片段計算大量結果時。

evaluationStrategySPARQL提示語法

evaluationStrategy詢提示會指定為包含在SPARQL查詢中的三重模式。

為更清楚起見,以下語法使用已定義並包含在查詢中的 hint 字首,指定 Neptune 查詢提示命名空間:

PREFIX hint: <http://aws.amazon.com/neptune/vocab/v01/QueryHints#> hint:SubQuery hint:evaluationStrategy "BottomUp" .
可用範圍
  • hint:SubQuery

注意

只有巢狀子查詢支援此查詢提示。

如需更多查詢提示範圍的詳細資訊,請參閱 Neptune 中SPARQL查詢提示的範圍

evaluationStrategySPARQL提示示例

本節示範使用和不使用 evaluationStrategy 查詢提示編寫的查詢以及相關的最佳化。

此範例假設資料集有下列特性:

  • 包含 1,000 個有標記 :connectedTo 的邊緣。

  • 每個 component 節點平均連接到 100 個其他 component 節點。

  • 節點之間四躍點循環連接的數量通常是大約 100 個。

無查詢提示

下列SPARQL查詢會擷取透過四個躍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 查詢引擎的做法是使用以下步驟評估此查詢:

  • 擷取圖中的全部 connectedTo 邊緣,共 1,000 個。

  • 擴大 100 倍 (從 component2 傳出的 connectedTo 邊緣數量)。

    中間結果:100,000 個節點。

  • 擴大 100 倍 (從 component3 傳出的 connectedTo 邊緣數量)。

    中間結果:10,000,000 個節點。

  • 掃描 10,000,000 個節點的循環結束。

這會得到串流查詢計畫,其主記憶體為不變數量。

查詢提示和子查詢

您可能想要犧牲主記憶體空間換取加速運算。使用 evaluationStrategy 查詢提示重寫查詢,您可以強制引擎計算兩個較小、具體化子集的聯結。

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 . } } }

相較於反覆使用先前三重模式的結果做為即將發生模式的輸入時評估序列中的三重模式,evaluationStrategy 提示會使得兩個子查詢被獨立評估。兩種子查詢的中繼結果都是產生 100,000 個節點,然後聯結在一起形成最終輸出。

特別是,當您在較大的執行個體類型上執行 Neptune 時,將這兩個 100,000 子集臨時儲存在主記憶體中,會增加記憶體使用量,進而大幅加快評估速度。