本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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