Questo documento descrive le best practice per l'ottimizzazione della query del grafico di Spanner rendimento, che includono le seguenti ottimizzazioni:
- Evita una scansione completa della tabella di input per nodi e edge.
- Riduci la quantità di dati che la query deve leggere dallo spazio di archiviazione.
- Riduci le dimensioni dei dati intermedi.
Inizia dai nodi con una cardinalità inferiore
Scrivi l'esplorazione del percorso in modo che inizi con i nodi di cardinalità inferiore. Questo approccio mantiene ridotto l'insieme di risultati intermedi e velocizza le query dell'esecuzione.
Ad esempio, le seguenti query hanno la stessa semantica:
Percorso dell'edge in avanti:
GRAPH FinGraph MATCH (p:Person)-[:Owns]->(a:Account) WHERE p.name = "Alex" AND a.is_blocked RETURN p.id AS person_id, a.id AS account_id;
Percorso dell'elemento perimetrale inverso:
GRAPH FinGraph MATCH (a:Account)<-[:Owns]-(p:Person) WHERE p.name = "Alex" AND a.is_blocked RETURN p.id AS person_id, a.id AS account_id;
Supponendo che il numero di persone con il nome Alex
sia inferiore al numero
bloccati, ti consigliamo di scrivere questa query nel futuro
attraversamento bordo.
Partendo dai nodi a cardinalità più bassa è particolarmente importante attraversamento del percorso con lunghezza variabile. L'esempio seguente mostra il metodo consigliato per trovare gli account trasferiti in modo transitivo da un determinato account all'interno di tre salti.
GRAPH FinGraph
MATCH (:Account {id: 7})-[:Transfers]->{1,3}(a:Account)
RETURN a.id;
Specifica tutte le etichette per impostazione predefinita
Il grafico Spanner deduce i nodi idonei e le etichette perimetrale se vengono omesse. Consigliamo di specificare le etichette per tutti i nodi e gli archi ove possibile, perché questa inferenza potrebbe non essere sempre possibile causare la scansione di più etichette del necessario.
Singola istruzione MATCH
L'esempio seguente trova gli account collegati da al massimo 3 trasferimenti dalla account specificato:
GRAPH FinGraph
MATCH (src:Account {id: 7})-[:Transfers]->{1,3}(dst:Account)
RETURN dst.id;
Nelle istruzioni CONFRONTA
Specifica le etichette su nodi ed archi quando fanno riferimento allo stesso elemento, ma si trovano in più istruzioni MATCH
.
L'esempio seguente mostra questo approccio consigliato:
GRAPH FinGraph
MATCH (acct:Account {id: 7})-[:Transfers]->{1,3}(other_acct:Account)
RETURN acct, COUNT(DISTINCT other_acct) AS related_accts
GROUP BY acct
NEXT
MATCH (acct:Account)<-[:Owns]-(p:Person)
RETURN p.id AS person, acct.id AS acct, related_accts;
Passaggi successivi
- Scopri come eseguire query sui grafici delle proprietà in Spanner Graph.
- Eseguire la migrazione al grafico di Spanner.