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 de Firestore.

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 brillante peut indiquer une base de données qui utilise des opérations d'écriture/de suppression d'index strictement croissantes ou décroissantes sur un nom de champ d'horodatage.

Point d'accès en raison de l'augmentation des noms de champs

Carte de densité montrant des zones cliquables en raison de l'augmentation du champ

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 un champ incrémentiel, 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 dans Firestore.

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é.

COLLECTION: projects/PROJECT_ID/databases/(default)/documents/Users
  PROPERTIES: (Timestamp: DESC)
  VALUES: (16500000000000001)
  DOCUMENT: projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001

Où :

  • COLLECTION: emplacement de la collection dans votre base de données. En fonction du champ d'application, il peut s'agir d'un chemin d'accès pour le champ d'application de la collection ou du nom de la collection pour celui d'un groupe de collections.
  • PROPERTIES: champs utilisés pour créer l'index. La propriété de tri __name__ n'est affichée que pour les définitions d'index qui modifient l'ordre par défaut.
  • VALEURS: valeur de chaque propriété.
  • DOCUMENT: ID du document mis à jour lors d'une opération.

Dans l'exemple précédent, identifiez les champs de la valeur PROPERTIES pour trouver l'index concerné.

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

  1. Dans la console Google Cloud, accédez à la page Base de données.

    Accéder à la page "Bases de données"

  2. Sélectionnez la base de données requise dans la liste des bases de données.

  3. Dans le menu de navigation, cliquez sur Index.

  4. Accédez à l'onglet Composite ou Champ unique.

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

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

    Utilisez l'opérateur OR pour ajouter d'autres champs 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 composite: modifiez l'index pour vous assurer que le champ dont la valeur augmente ou diminue de manière monotone n'est pas sélectionné en tant que premier champ d'indexation, ou supprimez l'index.

  • Index à champ unique: ajoutez une exception pour le champ et l'ordre de tri que vous souhaitez exclure. Pour en savoir plus, consultez la section Ajouter une exception de champ unique.

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

Type Description Exemple
Index à champ unique au champ d'application de la collection ASC, DESC Par défaut, Firestore crée des index dont le champ d'application est défini sur une collection.

Entrée d'index pour l'index à champ unique dans le champ Timestamp, par ordre décroissant pour le document Users/5000000000000001.
COLLECTION: projects/PROJECT_ID/databases/(default)/documents/Users
PROPERTIES: (Timestamp: DESC)
VALUES: (16500000000000001)
DOCUMENT: projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001
Index à champ unique dont le champ d'application est défini pour les champs de tableau Pour chaque champ de tableau d'un document, Firestore crée et gère un index "array-contains" dont le champ d'application est défini sur une collection.

Entrée d'index pour les index à champ unique en mode "tableau-contains" qui sont créés lorsqu'un champ Country: [USA, Japan] est ajouté au document. Notez que les index ASC,DESC seront également créés par défaut pour ce champ. L'exemple montre l'index ASC pour le champ Country.
COLLECTION: projects/PROJECT_ID/databases/(default)/documents/Users
PROPERTIES:(Country: ASC)
VALUES:([USA, Japan]) DOCUMENT:(projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001)
Index à champ unique d'un groupe de collections ASC, DESC, ARRAY Un groupe de collections inclut toutes les collections possédant le même identifiant.
Entrée d'index pour l'index à champ unique du groupe de collections sur le champ Timestamp, par ordre décroissant.
COLLECTION GROUP: Users
PROPERTIES: (Timestamp: DESC)
VALUES: (16500000000000001L)
DOCUMENT: projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001
Index à champ unique d'un groupe de collections ASC, DESC, ARRAY Entrée d'index pour l'index à champ unique d'un groupe de collections sur le champ Country en mode array-contains COLLECTION GROUP: Users PROPERTIES: (Country: ARRAY ASC) VALUES: (USA) DOCUMENT: projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001
Entrée d'index composite de la collection avec les propriétés ASC, ASC et ARRAY Les entrées d'index composite avec parent sont créées lorsque des documents imbriqués sont créés avec une définition d'index de champ d'application de collection.

Entrée d'index pour l'index composite avec les champs Timestamp et Name dans l'ordre croissant, et Country en mode array-contains.
COLLECTION: projects/PROJECT_ID/databases/(default)/documents/Users
PROPERTIES: (Timestamp: ASC, Name: ASC,Country: ARRAY)
VALUES: (16500000000000001L, 'Alice', 'USA')
DOCUMENT: (projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001)
Entrée d'index composite de champ d'application du groupe de collections avec les propriétés ASC et ASC Entrée d'index pour l'index composite sur le champ Timestamp (dans l'ordre croissant) et le champ Name dans l'ordre croissant COLLECTION GROUP: Users
PROPERTIES: (Timestamp: ASC, Name: ASC)
VALUES: (16500000000000001L, 'Alice')
DOCUMENT: (projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001)
Entrée d'index composite du champ d'application de la collection avec les propriétés ASC et __name__ Entrée d'index pour l'index composite dans le champ Timestamp par ordre croissant et avec le tri __name__ dans l'ordre décroissant pour le document Users/5000000000000001. Vous pouvez utiliser __name__ comme dernier champ dans une définition d'index pour modifier l'ordre par défaut des résultats. COLLECTION: projects/PROJECT_ID/databases/(default)/documents/Users
PROPERTIES: (Timestamp: ASC, __name__ DESC)
VALUES: (16500000000000001)
DOCUMENT: projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001

Étapes suivantes