Le cache de recherche Neptune peut accélérer les requêtes de lecture - 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.

Le cache de recherche Neptune peut accélérer les requêtes de lecture

Amazon Neptune implémente un cache de recherche qui utilise leR5dSSD basé sur NVMe de l'instance pour améliorer les performances de lecture des requêtes impliquant des recherches fréquentes et répétitives de valeurs de propriétés ou de littéraux RDF. Le cache de recherche stocke temporairement ces valeurs dans le volume SSD NVMe où elles sont rapidement accessibles.

Cette fonction est disponible à partir deVersion 1.0.4.2.R2 du moteur Amazon Neptune (01/06/2021).

Les requêtes de lecture qui renvoient les propriétés d'un grand nombre de sommets et d'arêtes, ou de nombreux triples RDF, peuvent présenter une latence élevée si les valeurs des propriétés ou les littéraux doivent être extraits des volumes de stockage du cluster plutôt que de la mémoire. Par exemple, les requêtes de lecture de longue durée qui renvoient un grand nombre de noms complets à partir d'un graphe d'identité ou d'adresses IP à partir d'un graphe de détection de fraude. À mesure que le nombre de valeurs de propriété ou de littéraux RDF renvoyés par votre requête augmente, la mémoire disponible diminue et l'exécution de votre requête peut se dégrader de manière significative.

Cas d'utilisation du cache de recherche Neptune

Le cache de recherche n'est utile que lorsque vos requêtes de lecture renvoient les propriétés d'un très grand nombre de sommets et d'arêtes, ou de triples RDF.

Pour optimiser les performances des requêtes, Amazon Neptune utilise leR5dtype d'instance pour créer un cache volumineux pour ces valeurs de propriété ou ces littéraux. Leur extraction à partir du cache est alors beaucoup plus rapide que celle des volumes de stockage du cluster.

En règle générale, il n'est intéressant d'activer le cache de recherche que si les trois conditions suivantes sont remplies :

  • Vous avez observé une latence accrue dans les requêtes de lecture.

  • Vous observez également une baisse duBufferCacheHitRatio CloudWatch métriquelors de l'exécution de requêtes de lecture (voirSurveillance de Neptune à l'aide d'Amazon CloudWatch).

  • Vos requêtes de lecture passent beaucoup de temps à matérialiser les valeurs de retour avant de rendre les résultats (voir l'exemple de profil Gremlin ci-dessous pour savoir comment déterminer le nombre de valeurs de propriétés matérialisées pour une requête).

Note

Cette fonctionnalité est utileseulementdans le scénario spécifique décrit ci-dessus. Par exemple, le cache de recherche ne permet pas du tout d'agréger les requêtes. À moins que vous n'exécutiez des requêtes qui bénéficieraient du cache de recherche, il n'y a aucune raison d'utiliser unR5dtype d'instance au lieu d'un équivalent et moins coûteuxR5type d'instance.

Si vous utilisez Gremlin, vous pouvez évaluer les coûts de matérialisation d'une requête à l'aide duGremlinprofileAPI. Sous « Opérations indicielles », il indique le nombre de termes matérialisés lors de l'exécution :

Index Operations Query execution: # of statement index ops: 3 # of unique statement index ops: 3 Duplication ratio: 1.0 # of terms materialized: 5273 Serialization: # of statement index ops: 200 # of unique statement index ops: 140 Duplication ratio: 1.43 # of terms materialized: 32693

Le nombre de termes non numériques qui sont matérialisés est directement proportionnel au nombre de recherches de termes que Neptune doit effectuer.

Utilisation du cache de recherche

Le cache de recherche est disponible uniquement sur unR5dtype d'instance, où il est automatiquement activé par défaut. NeptuneR5dles instances ont les mêmes spécifications queR5instances, plus jusqu'à 1,8 To de stockage SSD local basé sur NVMe. Les caches de recherche sont spécifiques à l'instance et les charges de travail qui en bénéficient peuvent être dirigées spécifiquement versR5dinstances d'un cluster Neptune, tandis que d'autres charges de travail peuvent être dirigées versR5ou d'autres types d'instances.

Pour utiliser le cache de recherche sur une instance Neptune, il suffit de mettre à niveau cette instance versR5dtype d'instance. Lorsque vous le faites, Neptune définit automatiquement leneptune_lookup_cacheParamètre de cluster DB pour'enabled', et crée le cache de recherche sur cette instance particulière. Vous pouvez alors utiliser le pluginStatut d’une instanceAPI pour confirmer que le cache a été activé.

De même, pour désactiver le cache de recherche sur une instance donnée, réduisez l'instance à partir d'unR5dtype d'instance par rapport à un équivalentR5type d'instance.

Lorsque unR5dl'instance est lancée, le cache de recherche est activé et en mode démarrage à froid, ce qui signifie qu'il est vide. Neptune vérifie d'abord les valeurs de propriété ou les littéraux RDF dans le cache de recherche lors du traitement des requêtes, puis les ajoute s'ils ne sont pas encore présents. Cela réchauffe progressivement le cache.

Lorsque vous dirigez les requêtes de lecture qui nécessitent des recherches par valeur de propriété ou littérale RDF vers un R5dlecteurPar exemple, les performances de lecture se dégradent légèrement lorsque son cache se réchauffe. Cependant, lorsque le cache est réchauffé, les performances de lecture s'accélèrent de manière significative et vous pouvez également constater une baisse des coûts d'E/S liés aux recherches effectuées dans le cache plutôt que dans le stockage en cluster. L'utilisation de la mémoire s'améliore également

Si votreécrivainl'instance est uneR5d, il réchauffe automatiquement son cache de recherche à chaque opération d'écriture. Cette approche augmente légèrement la latence pour les requêtes d'écriture, mais réchauffe le cache de recherche de manière plus efficace. Ensuite, si vous dirigez les requêtes de lecture qui nécessitent des recherches par valeur de propriété ou littérale RDF vers l'instance d'écriture, vous pouvez immédiatement améliorer les performances de lecture, puisque les valeurs y ont déjà été mises en cache.

De plus, si vous utilisez le chargeur en vrac sur unR5dinstance d'écriture, vous remarquerez peut-être que ses performances sont légèrement dégradées à cause du cache.

Le cache de recherche étant spécifique à chaque nœud, le remplacement de l'hôte réinitialise le cache à froid.

Vous pouvez désactiver temporairement le cache de recherche sur toutes les instances de votre cluster de base de données en définissantneptune_lookup_cacheParamètre de cluster DB pour'disabled'. En général, cependant, il est plus judicieux de désactiver le cache sur des instances spécifiques en les réduisant à partir deR5dpourR5types d'instance.