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 des nœuds et des arêtes de la table d'entrée.
- Réduisez la quantité de données que la requête doit lire dans l'espace de 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 préserve la taille de l'ensemble de résultats intermédiaire et accélère la requête l'exécution.
Par exemple, les requêtes suivantes ont la même sémantique:
Balayage 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 bord inversée:
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 a moins de personnes portant le nom Alex
qu'il n'y en a
bloqués, nous vous recommandons d'écrire cette requête dans le dossier
en périphérie.
Il est particulièrement important de commencer avec des nœuds à cardinalité un traversée de répertoire de longueur variable. L'exemple suivant montre la méthode recommandée pour rechercher les comptes transférés de manière transitive à partir d'un compte donné en trois sauts.
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 de bordure 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 les étiquettes des nœuds et des arêtes lorsqu'ils font référence au même élément, mais sont
dans les 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