Questo documento descrive le best practice per ottimizzare il rendimento delle query di Spanner Graph, che includono le seguenti ottimizzazioni:
- Evita una scansione completa della tabella di input per i nodi e gli archi.
- 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 piccolo il set di risultati intermedi e accelera l'esecuzione delle query.
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 ci siano meno persone con il nome Alex
rispetto agli account bloccati, ti consigliamo di scrivere questa query nel traversale dei bordi in avanti.
Iniziare da nodi di cardinalità inferiore è particolarmente importante per la traversale del percorso con lunghezza variabile. L'esempio seguente mostra il modo consigliato per trovare gli account che si trovano entro tre trasferimenti da un determinato account.
GRAPH FinGraph
MATCH (:Account {id: 7})-[:Transfers]->{1,3}(a:Account)
RETURN a.id;
Specifica tutte le etichette per impostazione predefinita
Spanner Graph deducono le etichette dei nodi e degli archi idonei se le etichette vengono omesse. Ti consigliamo di specificare le etichette per tutti i nodi e gli archi se possibile, perché questa deduzione potrebbe non essere sempre possibile e potrebbe causare la scansione di più etichette del necessario.
Singola istruzione MATCH
L'esempio seguente trova gli account collegati da massimo 3 trasferimenti dall'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 affermazioni MATCH
diverse.
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.
- Esegui la migrazione a Spanner Graph.