Ce document décrit les bonnes pratiques à suivre pour optimiser les performances des requêtes Spanner Graph, y compris les optimisations suivantes:
- Évitez une analyse complète de la table d'entrée pour les nœuds et les arêtes.
- Réduisez la quantité de données que la requête doit lire à partir du stockage.
- Réduire la taille des données intermédiaires
Commencer par les nœuds de cardinalité inférieure
Écrivez l'itération du chemin de sorte qu'elle commence par les nœuds de cardinalité la plus faible. Cette approche réduit la taille de l'ensemble de résultats intermédiaires et accélère l'exécution des requêtes.
Par exemple, les requêtes suivantes ont la même sémantique:
Parcours de bord avant:
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;
Traversée de bordure inverse:
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;
En supposant qu'il y ait moins de personnes portant le nom Alex
que de comptes bloqués, nous vous recommandons d'écrire cette requête dans la traversée de bord avant.
Commencer à partir de nœuds de cardinalité inférieure est particulièrement important pour la traversée de chemin de longueur variable. L'exemple suivant montre la méthode recommandée pour trouver les comptes qui se trouvent à moins de trois transferts d'un compte donné.
GRAPH FinGraph
MATCH (:Account {id: 7})-[:Transfers]->{1,3}(a:Account)
RETURN a.id;
Spécifier tous les libellés par défaut
Spanner Graph infère les nœuds éligibles et les libellés d'arête si les libellés sont omis. Nous vous recommandons de spécifier des libellés pour tous les nœuds et les arêtes dans la mesure du possible, car cette inférence n'est pas toujours possible et peut entraîner l'analyse d'un plus grand nombre de libellés que nécessaire.
Instruction MATCH unique
L'exemple suivant recherche les comptes associés à au plus trois transferts depuis le compte donné:
GRAPH FinGraph
MATCH (src:Account {id: 7})-[:Transfers]->{1,3}(dst:Account)
RETURN dst.id;
Dans les instructions MATCH
Spécifiez des libellés sur les nœuds et les arêtes lorsqu'ils font référence au même élément, mais se trouvent dans des instructions MATCH
.
L'exemple suivant illustre cette approche recommandée:
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;
Étape suivante
- Découvrez comment interroger des graphiques de propriétés dans Spanner Graph.
- Migrer vers Spanner Graph