Neptune 如何使用陳述式索引來處理 Gremlin 查詢 - Amazon Neptune

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

Neptune 如何使用陳述式索引來處理 Gremlin 查詢

陳述式會在 Amazon Neptune 中透過三個陳述式索引的方式存取,如 陳述式在 Neptune 中如何編製索引 中所述。Neptune 從 Gremlin 查詢中擷取陳述式「模式」,其中某些位置已知,其餘位置則留給索引搜尋進行探索。

Neptune 假設屬性圖結構描述的大小不大。這表示不同邊緣標籤和屬性名稱的數量相當低,導致不同的述詞總數很低。Neptune 會在個別索引中追蹤不同的述詞。它使用此述詞快取執行 的聯合掃描,{ all P x POGS }而不是使用 OSGP索引。避免需要反向周遊OSGP索引可同時節省儲存空間和負載輸送量。

Neptune Gremlin 說明/設定檔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