Préférer les arêtes dirigées aux arêtes bidirectionnelles dans les requêtes - Amazon Neptune

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Préférer les arêtes dirigées aux arêtes bidirectionnelles dans les requêtes

Lorsque Neptune optimise les requêtes, les arêtes bidirectionnelles compliquent la création de plans de requêtes optimaux. Les plans sous-optimaux obligent le moteur à effectuer des tâches superflues, ce qui entraîne une baisse des performances.

Par conséquent, utilisez des arêtes dirigées plutôt que des arêtes bidirectionnelles dans la mesure du possible. Par exemple, utilisez :

MATCH p=(:airport {code: 'ANC'})-[:route]->(d) RETURN p)

au lieu de :

MATCH p=(:airport {code: 'ANC'})-[:route]-(d) RETURN p)

La plupart des modèles de données n'ont pas besoin de traverser les arêtes dans les deux sens. Les requêtes peuvent donc améliorer considérablement les performances avec l'utilisation d'arêtes dirigées.

Si le modèle de données nécessite de traverser des arêtes bidirectionnelles, faites du premier nœud (côté gauche) le nœud avec le filtrage le plus restrictif dans le modèle MATCH.

Prenons un exemple recherchant tous les itinéraires (routes) à destination et en provenance de l'aéroport ANC. Écrivez cette requête pour commencer à l'aéroport ANC, comme suit :

MATCH p=(src:airport {code: 'ANC'})-[:route]-(d) RETURN p

Le moteur peut ainsi effectuer un minimum d'efforts pour satisfaire la requête, car le nœud le plus restreint est placé en tant que premier nœud (côté gauche) dans le modèle. Puis, il peut optimiser la requête.

Cette approche est de loin préférable à un filtrage de l'aéroport ANC à la fin du modèle, comme ceci :

MATCH p=(d)-[:route]-(src:airport {code: 'ANC'}) RETURN p

Lorsque le nœud le plus restreint n'est pas placé en premier dans le modèle, le moteur doit effectuer des efforts supplémentaires, car il ne peut pas optimiser la requête et doit réaliser des recherches supplémentaires pour obtenir les résultats.