Modèles de carte de densité pour les clés d'index

Cette page présente des exemples de modèles que vous pourriez voir dans une carte de densité Key Visualizer. Ces modèles peuvent vous aider à résoudre des problèmes de performances spécifiques.

Utilisation homogène

Carte de densité montrant une répartition homogène des lectures et écritures

Si une carte de densité affiche un mélange précis de couleurs sombres et lumineuses, les opérations d'écriture/suppression pour les clés d'index sont réparties uniformément dans la base de données. Cette carte de densité représente probablement un modèle d'utilisation efficace du mode Datastore.

Index sur des clés séquentielles

Une carte de densité avec une seule ligne diagonale lumineuse peut indiquer un indice sur une clé qui augmente ou diminue strictement, comme l'horodatage. Les index sur des clés séquentielles ne sont pas recommandés et peuvent créer des hotspots. En cas de hotspotting, vous pouvez observer des latences élevées correspondantes.

Voici quelques exemples de hotspots courants sur l'index:

Point d'accès en raison de l'augmentation du code temporel

Carte de densité montrant la création de hotspots en raison de l'augmentation du code temporel

Dans cet exemple, une carte de densité avec une seule ligne diagonale lumineuse peut indiquer une base de données qui utilise des opérations d'écriture ou de suppression d'index strictement croissantes ou décroissantes sur une propriété d'horodatage.

Point d'accès en raison de l'augmentation des noms de propriétés

Carte de densité montrant des zones cliquables en raison de l'augmentation des propriétés

Dans cet exemple, une carte de densité avec une seule ligne diagonale brillante peut indiquer une base de données qui augmente ou diminue strictement les opérations d'écriture ou de suppression d'index sur une propriété incrémentielle, telles que les numéros de facture générés automatiquement.

Pour identifier le problème de hotspotting, utilisez l'outil Key Visualizer et comprenez la structure des clés d'index pour déterminer l'index à l'origine du problème et exemptez ces index en suivant les bonnes pratiques.

Comprendre la structure des clés d'index

Avant de comprendre la structure des clés d'index que vous voyez dans l'outil Key Visualizer, découvrez les index en mode Datastore.

Le code suivant montre un exemple de format de clé d'index que vous voyez lorsque vous pointez sur la plage de clés concernée sur la carte de densité.

NAMESPACE: NS KIND: Users
PROPERTIES: (Timestamp: DESC, Name: DESC)
ANCESTOR: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),`UserList`,1)
VALUES: (16500000000000001,'Alice')
ENTITY:KEY(PROJECT('PROJECT_ID'),NAMESPACE(''),`UserList`,1,`User`,5000000000000001)

Où :

  • NAMESPACE: espace de noms de l'entité.
  • KIND: genre d'entité qui classe les entités.
  • PROPERTIES: propriétés associées à l'entité. La propriété de tri __key__ n'est affichée que pour les définitions d'index qui modifient l'ordre par défaut.
  • ANCESTOR: chemin d'ancêtre facultatif permettant de localiser l'entité dans la hiérarchie de la base de données.
  • VALEURS: valeur de chaque propriété.
  • ENTITY: ID de l'entité mise à jour lors d'une opération.

Dans l'exemple précédent, identifiez les propriétés à partir de la valeur PROPERTIES pour trouver l'index concerné.

Pour trouver l'index, procédez comme suit:

  1. Accédez à la page Index du mode Datastore dans la console Google Cloud.

    Accéder aux index du mode Datastore

    Vous pouvez identifier le type d'index en analysant le champ PROPERTIES. Pour en savoir plus, consultez les exemples de clés d'index.

  2. Cliquez sur Filtrer, sélectionnez Champs, puis saisissez le nom du champ.

    Utilisez l'opérateur OR pour ajouter d'autres propriétés dans le cas d'index composites.

Une fois que vous avez identifié l'index à l'origine du problème, vous pouvez appliquer les solutions suivantes:

  • Index intégré: exclut la propriété de sorte que l'index ne gère pas les entrées d'index de cette propriété. Pour en savoir plus, consultez la section Propriétés exclues.
  • Index composite: modifiez l'index dans le fichier index.yaml pour vous assurer que le champ dont la valeur augmente ou diminue de façon linéaire n'est pas sélectionné en tant que premier champ d'indexation, ou supprimez l'index. Pour en savoir plus, consultez la section À propos de index.yaml.

Exemples d'entrées clés d'index sur la carte de densité

Type Description Exemple
Entrée d'index intégrée Entrée d'index pour l'index de propriété unique sur la propriété Timestamp, par ordre décroissant pour l'espace de noms NS NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: DESC)
ANCESTOR: NONE
VALUES: (16500000000000001)
ENTITY: KEY(PROJECT('PROJECT_ID'), NAMESPACE('NS'),Utilisateurs, 5000000000000001)
Entrée d'index intégrée Entrée d'index pour l'index de propriété unique dans l'espace de noms par défaut. NAMESPACE: ' '
KIND: Users
PROPERTIES: (Timestamp: DESC)
ANCESTOR: NONE
VALUES: (16500000000000001)
ENTITY: KEY(PROJECT('PROJECT_ID'), NAMESPACE('NS'),Utilisateurs, 5000000000000001)
Entrée d'index composite Entrée d'index pour l'index composite sur les propriétés Timestamp et Name par ordre décroissant sans ancêtre activé. NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: DESC, Name: DESC)
ANCESTOR: NONE
VALUES: (16500000000000001, 'Alice')
ENTITY: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),Utilisateurs,5000000000000001)
Entrée d'index composite avec ancêtre Entrée d'index pour l'index composite sur la propriété Timestamp dans l'ordre décroissant et la propriété Name par ordre décroissant avec l'ancêtre activé. NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: DESC, Name: ASC)
ANCESTOR: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),Liste d'utilisateurs,1,Utilisateur,5000000000000001
VALUES: (16500000000000001, 'Alice')
ENTITY: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),Liste d'utilisateurs,1,Utilisateur,5000000000000001)
Entrée d'index composite avec __key__ Entrée d'index pour l'index composite de la propriété Timestamp dans l'ordre croissant et __key__ par ordre décroissant sans ancêtre activé. Vous pouvez utiliser __key__ comme propriété finale dans une définition d'index pour modifier l'ordre par défaut des résultats. NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: ASC, __key__ DESC)
ANCESTOR: NONE
VALUES: (16500000000000001)
ENTITY: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),Liste d'utilisateurs,1,Utilisateur,5000000000000001)

Étapes suivantes