Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Gérer les index dans Cloud Firestore

Cloud Firestore garantit les performances des requêtes en exigeant un index pour chaque requête. Les indices nécessaires pour la plupart des requêtes de base sont créées automatiquement pour vous. Lorsque vous utilisez et testez votre application, Cloud Firestore génère des messages d'erreur qui vous aident à créer les index supplémentaires dont votre application a besoin. Cette page décrit comment gérer votre seul champ et composite index.

Créer un index manquant via un message d'erreur

Si vous tentez une requête composée avec une clause de plage qui ne correspond pas à un index existant, vous recevez une erreur. Le message d'erreur inclut un lien direct pour créer l'index manquant dans la console Firebase.

Suivez le lien généré à la console Firebase, vérifiez les informations renseignées automatiquement et cliquez sur Créer.

Utiliser la console Firebase

Pour créer manuellement un index à partir de la console Firebase :

image de l'interface d'indexation firestore dans la console firebase

  1. Allez à la section Nuage Firestore de la console Firebase .
  2. Allez dans l'onglet Index et cliquez sur Ajouter un index.
  3. Saisissez le nom de la collection et définissez les champs selon lesquels vous souhaitez classer l'index.
  4. Cliquez sur Créer.

La création des index peut prendre quelques minutes, selon la taille de la requête. Après les avoir créés, vous pouvez voir vos index et leur statut dans la section Index composites. S'ils sont encore en construction, la console Firebase inclut une barre d'état de construction.

Supprimer les index

Pour supprimer un index :

  1. Allez à la section Nuage Firestore de la console Firebase .
  2. Cliquez sur l'onglet Index.
  3. Passez la souris sur l'index que vous souhaitez supprimer , puis sélectionnez Supprimer dans le menu contextuel.
  4. Confirmez que vous souhaitez supprimer en cliquant sur Supprimer de l'alerte.

Utiliser l'interface de ligne de commande Firebase

Vous pouvez également déployer des index avec la Firebase CLI . Pour commencer, exécutez firebase init firestore dans votre répertoire de projet. Lors de l'installation, la CLI Firebase génère un fichier JSON avec les index par défaut au format correct. Modifiez le fichier pour ajouter d' autres indices et déployer avec la firebase deploy commande. Si vous ne souhaitez que déployer des index, ajoutez le --only firestore:indexes drapeau. Si vous apportez des modifications aux index à l'aide de la console Firebase, assurez-vous également de mettre à jour votre fichier d'index local. Reportez - vous à l' indice de référence JSON définition .

Temps de construction de l'index

Pour créer un index, Cloud Firestore doit configurer l'index, puis remplir l'index avec les données existantes. Le temps de construction de l'index est la somme du temps de configuration et du temps de remplissage :

  • La configuration d'un index prend quelques minutes. Le temps de construction minimum pour un index est de quelques minutes, même pour une base de données vide.

  • Le temps de remplissage dépend de la quantité de données existantes appartenant au nouvel index. Plus il y a de valeurs de champ qui correspondent à la définition de l'index, plus le remplissage de l'index est long.

Index construit sont des opérations de longue durée.

Une fois que vous avez démarré une compilation d'index, Cloud Firestore attribue un nom unique à l'opération. Les noms d'opération sont préfixées avec des projects/[PROJECT_ID]/databases/(default)/operations/ de projects/[PROJECT_ID]/databases/(default)/operations/ , par exemple:

projects/project-id/databases/(default)/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg

Cependant, vous pouvez laisser le préfixe en spécifiant un nom d'opération pour la describe commande.

Lister toutes les opérations de longue durée

Pour la liste des opérations longues à exécuter, utilisez la liste des opérations FireStore gcloud commande. Cette commande répertorie les opérations en cours et récemment terminées. Les opérations sont répertoriées pendant quelques jours après leur achèvement :

gcloud firestore operations list

Vérifier l'état de fonctionnement

Au lieu de répertorier toutes les opérations de longue durée, vous pouvez répertorier les détails d'une seule opération :

gcloud firestore operations describe operation-name

Estimation du temps de réalisation

À mesure que votre opération fonctionne, voir la valeur de l' state champ de l'état général de l'opération.

Une demande de statut d'une opération de longue durée renvoie également les mesures workEstimated et workCompleted . Ces métriques sont renvoyées pour le nombre de documents. workEstimated indique le nombre total estimé de documents d' une opération traitera. workCompleted montre le nombre de documents traités jusqu'à présent. Après la finalise opération, workCompleted reflète le nombre total de documents qui ont été effectivement traités, ce qui pourrait être différente de la valeur de workEstimated .

Diviser workCompleted par workEstimated pour une estimation de progression approximative. L'estimation peut être inexacte car elle dépend de la collecte tardive des statistiques.

Par exemple, voici l'état d'avancement d'une génération d'index :

{
  "operations": [
    {
      "name": "projects/project-id/operations/AyAyMDBiM2U5NTgwZDAtZGIyYi0zYjc0LTIzYWEtZjg1ZGdWFmZWQHEjF0c2Flc3UtcmV4ZWRuaS1uaW1kYRUKSBI",
      "metadata": {
        "@type": "type.googleapis.com/google.firestore.admin.v1.IndexOperationMetadata",
        "common": {
          "operationType": "CREATE_INDEX",
          "startTime": "2020-06-23T16:52:25.697539Z",
          "state": "PROCESSING"
        },
        "progressDocuments": {
          "workCompleted": "219327",
          "workEstimated": "2198182"
        }
       },
    },
    ...

Lorsqu'une opération est effectuée, la description de l' opération contiendra "done": true . Voir la valeur de l' state champ pour le résultat de l'opération. Si le done champ n'est pas défini dans la réponse, alors sa valeur est false . Ne pas dépendre de l'existence de la done valeur pour les opérations en cours.

Erreurs de construction d'index

Vous pouvez rencontrer des erreurs de création d'index lors de la gestion d'index composites et d'exemptions d'index à champ unique. Une opération d'indexation peut échouer si Cloud Firestore rencontre un problème avec les données qu'il indexe. Le plus souvent, cela signifie que vous atteint une limite d'index . Par exemple, l'opération peut avoir atteint le nombre maximal d'entrées d'index par document.

Si la création de l'index échoue, le message d'erreur s'affiche dans la console. Après avoir vérifié que vous n'êtes pas heurter les limites d'index , ré-essayez votre opération d'index.