In che modo le dichiarazioni vengono indicizzate in Neptune - Amazon Neptune

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

In che modo le dichiarazioni vengono indicizzate in Neptune

Quando esegui una query su un grafico di quad, per ogni posizione quad puoi specificare o meno un vincolo di valore. La query restituisce tutti i quad che corrispondono ai vincoli di valore specificati.

Neptune utilizza gli indici per risolvere i modelli di interrogazioni grafiche. Questi indici si trovano sui quattro componenti principali del bordo di un grafico: Subject (vertice di origine in GPL); Predicate (RDF) o Property or Edge Label (LPG); Object (vertice di destinazione o valore della proprietà in GPL); e Graph (RDF) o Edge Identifier (LPG). Esistono 16 (2^4) possibili schemi di accesso per queste quattro posizioni dei quattro componenti. È possibile interrogare tutti i 16 pattern in modo efficiente senza dover scansionare e filtrare utilizzando sei indici. Ogni indice di istruzione quad utilizza una chiave composta dai quattro valori di posizione concatenati in un ordine diverso. Una possibile combinazione di indici di istruzione quadrupla in grado di coprire tutti i 16 percorsi di accesso è:

Access Pattern Index key order ---------------------------------------------------- --------------- 1. ???? (No constraints; returns every quad) SPOG 2. SPOG (Every position is constrained) SPOG 3. SPO? (S, P, and O are constrained; G is not) SPOG 4. SP?? (S and P are constrained; O and G are not) SPOG 5. S??? (S is constrained; P, O, and G are not) SPOG 6. S??G (S and G are constrained; P and O are not) SPOG 7. ?POG (P, O, and G are constrained; S is not) POGS 8. ?PO? (P and O are constrained; S and G are not) POGS 9. ?P?? (P is constrained; S, O, and G are not) POGS 10. ?P?G (P and G are constrained; S and O are not) GPSO 11. SP?G (S, P, and G are constrained; O is not) GPSO 12. ???G (G is constrained; S, P, and O are not) GPSO 13. S?OG (S, O, and G are constrained; P is not) OGSP 14. ??OG (O and G are constrained; S and P are not) OGSP 15. ??O? (O is constrained; S, P, and G are not) OGSP 16. S?O? (S and O are constrained; P and G are not) OSGP

Per impostazione predefinita Neptune crea e gestisce solo tre di questi sei indici:

  • SPOG –   Utilizza una chiave composta da Subject + Predicate + Object + Graph.

  • POGS –   Utilizza una chiave composta da Predicate + Object + Graph + Subject.

  • GPSO –   Utilizza una chiave composta da Graph + Predicate + Subject + Object.

Questi tre indici gestiscono molti dei modelli di accesso più comuni. Mantenere solo tre indici di istruzione completi anziché sei riduce notevolmente le risorse necessarie per supportare l'accesso rapido senza scansionare e filtrare. Ad esempio, l'indice SPOG consente una ricerca efficiente ogni volta che viene associato un prefisso delle posizioni, ad esempio il vertice o il vertice e l'identificatore di proprietà. L'indice POGS consente un accesso efficiente quando solo l'etichetta della proprietà o di edge archiviata nella posizione P è associata.

L'interfaccia API di basso livello per dichiarazioni di ricerca richiede un modello di dichiarazione in cui alcune posizioni sono note e le restanti vengono lasciate per il rilevamento con ricerca per indice. Componendo le posizioni note in un prefisso chiave in base all'ordine della chiave di indicizzazione per uno degli indici di dichiarazione, Neptune esegue una scansione dell'intervallo per recuperare tutte le dichiarazioni corrispondenti alle posizioni note.

Uno degli indici di dichiarazione che Neptune non crea per impostazione predefinita, tuttavia, è un indice OSGP trasversale inverso, che può raccogliere predicati tra oggetti e soggetti. Al contrario, per impostazione predefinita Neptune tiene traccia di predicati distinti in un indice separato che utilizza per eseguire una scansione di unione di {all P x POGS}. Quando utilizzi Gremlin, un predicato corrisponde ad una proprietà o un'etichetta di edge.

Tuttavia, se il numero di predicati distinti in un grafico diventa di elevate dimensioni, la strategia di accesso predefinita di Neptune può diventare inefficiente. In Gremlin, ad esempio una fase in() in cui non vengono fornite etichette edge o qualsiasi fase che utilizza in() internamente, come both() o drop(), può diventare piuttosto inefficiente.

Abilitazione della creazione dell'indice OSPG utilizzando la modalità di laboratorio

Se il modello di dati crea un numero elevato di predicati distinti, è possibile che si verifichino prestazioni ridotte e costi operativi più elevati che possono essere notevolmente migliorati utilizzando la modalità laboratorio per abilitare l'indice OSGP, oltre ai tre indici che Neptune mantiene per impostazione predefinita.

Nota

Questa funzionalità è disponibile a partire dal rilascio 1.0.2.1 del motore Neptune.

L'abilitazione dell'indice OSGP può avere alcuni aspetti negativi:

  • La velocità di inserimento potrebbe rallentare fino al 23%.

  • Lo storage aumenta fino al 20%.

  • Le query di lettura che interessano tutti gli indici allo stesso modo (il che è piuttosto raro) potrebbero presentare aumenti delle latenze.

In generale, tuttavia, vale la pena abilitare l'indice OSPG per i cluster database con un numero elevato di predicati distinti. Le ricerche basate su oggetti diventano altamente efficienti (ad esempio, trovare tutti gli archi in entrata su un vertice, o tutti i soggetti collegati a un determinato oggetto) e, di conseguenza, l'eliminazione dei vertici diventa molto più efficiente.

Importante

È possibile abilitare l'indice OSGP solo in un cluster database vuoto, prima di caricarvi i dati.

 

Dichiarazioni Gremlin nel modello di dati di Neptune

I dati del grafo delle proprietà Gremlin sono espressi nel modello SPOG utilizzando tre classi di dichiarazioni, vale a dire:

Per una spiegazione di come vengono utilizzati nelle query Gremlin, vedi Introduzione al funzionamento delle query Gremlin in Neptune.