Modèles de cartes 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
Si une carte de densité affiche un mélange finement granuleux de couleurs sombres et lumineuses, les opérations d'écriture/de suppression pour les clés d'index sont réparties de manière homogène dans la base de données. Cette carte de densité représente probablement un modèle d'utilisation efficace pour Firestore.
Index sur des clés séquentielles
Une carte de densité avec une seule ligne brillante en diagonale peut indiquer un indice sur une clé strictement croissante ou décroissante, comme un code temporel. Les index sur les clés séquentielles ne sont pas recommandés et peuvent créer des points d'accès. Dans le hotspotting, vous pouvez observer des latences élevées correspondantes.
Voici quelques exemples de points chauds courants dans l'index:
Hotspot 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 de code temporel.
Hotspotting en raison de l'augmentation du nombre de noms de champs
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/suppression d'index strictement croissantes ou décroissantes sur un champ incrémentiel, tel que les numéros de facture générés automatiquement.
Pour identifier le problème de point chaud, utilisez l'outil Key Visualizer et compréhendez la structure de la clé d'index afin de déterminer quel indice est à l'origine du problème et d'exempter ces indices 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 du chemin d'accès à la collection pour le champ d'application de la collection ou du nom de la collection pour le champ d'application du groupe de collections.
- PROPRIÉTÉS: champs utilisés pour créer l'index. La propriété d'ordre
__name__
ne s'affiche que pour les définitions d'index qui modifient l'ordre par défaut. - VALUES: valeur de chaque propriété.
- DOCUMENT: ID du document mis à jour dans une opération.
Dans l'exemple précédent, identifiez les champs à partir de la valeur PROPERTIES pour trouver l'index concerné.
Pour trouver l'index, procédez comme suit:
Dans la console Google Cloud, accédez à la page Base de données.
Sélectionnez la base de données requise dans la liste des bases de données.
Dans le menu de navigation, cliquez sur Index.
Accédez à l'onglet Composite ou Champ individuel.
Vous pouvez identifier le type d'index en analysant le champ PROPERTIES (PROPRIÉTÉS). Pour en savoir plus, consultez les exemples de clés d'index.
Cliquez sur Filtrer, sélectionnez Champs, puis saisissez le nom du champ.
Utilisez l'opérateur OU pour ajouter d'autres champs en cas d'index composites.
Une fois que vous avez identifié l'index à l'origine du problème, vous pouvez utiliser les solutions suivantes:
Indice composite: modifiez l'indice pour vous assurer que le champ dont la valeur augmente ou diminue de façon linéaire n'est pas sélectionné comme premier champ pour l'indexation, ou supprimez l'indice.
Index de 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 pour un seul champ.
Exemples d'entrées de clé d'index sur la carte de densité
Type | Description | Exemple |
---|---|---|
Index à champ unique de portée collection ASC, DESC | Par défaut, Firestore crée des index qui s'appliquent à une collection. Entrée d'index pour l'index à champ unique sur 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 de portée collection pour les champs de tableau | Pour chaque champ de tableau d'un document, Firestore crée et conserve 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 "array-contains" qui seront créés lorsqu'un champ Country: [USA, Japan] est ajouté au document. Notez que des index ASC,DESC seront également créés par défaut pour ce champ. L'exemple montre l'indice 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 du 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 du groupe de collections ASC, DESC, ARRAY | Entrée d'index pour l'index à champ unique du 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 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 portée de collection. Entrée d'index pour un index composite avec les champs Timestamp et Name triés par 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 de groupe de collections avec propriétés ASC, ASC | Entrée d'index pour l'index composite sur le champ Timestamp , dans l'ordre croissant, et sur 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 de champ d'application de collection avec les propriétés ASC et __name__ |
Entrée d'index pour l'index composite sur le champ Timestamp par ordre croissant et avec le tri __name__ par ordre décroissant pour le document Users/5000000000000001 . Vous pouvez utiliser __name__ comme champ final 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 |
Étape suivante
- Lisez la présentation Premiers pas avec Key Visualizer.
- Découvrez comment explorer les cartes de densité en profondeur.
- Informez-vous sur les métriques que vous pouvez afficher dans une carte de densité.