Gérer les index
Cette page explique comment gérer vos index. Pour en savoir plus sur les index, consultez Présentation des index.
Avant de commencer
Avant de pouvoir créer un index dans Firestore compatible avec MongoDB, assurez-vous de disposer de l'un des rôles suivants :
roles/datastore.owner
roles/datastore.indexAdmin
roles/editor
roles/owner
Pour attribuer un rôle, consultez Attribuer un rôle unique. Pour en savoir plus sur les rôles Firestore et les autorisations associées, consultez Rôles prédéfinis.
Si vous avez défini des rôles personnalisés, attribuez toutes les autorisations suivantes pour créer des index :
datastore.indexes.create
datastore.indexes.delete
datastore.indexes.get
datastore.indexes.list
datastore.indexes.update
Créer un index
Pour créer un index, procédez comme suit :
ConsoleGoogle Cloud
-
Dans la console Google Cloud , accédez à la page Bases de données.
- Sélectionnez une base de données dans la liste.
- Dans le menu de navigation, cliquez sur Index.
- Cliquez sur Créer un index.
- Saisissez un ID de collection.
- Ajoutez un ou plusieurs chemins de champ, puis sélectionnez une option d'index pour chacun d'eux.
- Sélectionnez une option de présence des champs (non clairsemée ou clairsemée).
- Vous pouvez également définir l'option Index multiclés.
- Cliquez sur Créer.
- Votre nouvel index apparaît dans la liste des index et Firestore compatible avec MongoDB commence à le créer. Une fois votre index créé, une coche verte apparaît à côté de l'index. Si l'index n'est pas créé, consultez Erreurs de création d'index pour connaître les causes possibles.
CLI gcloud
Pour créer un index, utilisez la commande gcloud firestore indexes composite create
. Définissez api-scope
sur mongodb-compatible-api
.
gcloud firestore indexes composite create \ --database='DATABASE_ID' \ --collection-group=COLLECTION \ --field-config=FIELD_CONFIGURATION \ --query-scope=collection-group \ --density=dense \ --api-scope=mongodb-compatible-api
Remplacez les éléments suivants :
- DATABASE_ID : ID de base de données.
- COLLECTION : nom d'une collection.
- FIELD_CONFIGURATION : configuration de champ. Pour chaque champ, ajoutez
--field-config=field-path=
. Exemple :--field-config=field-path=user-id,order=descending \ --field-config=field-path=score,order=descending
Pour en savoir plus sur la configuration de ces champs, consultez
--field-config
.
Pour créer un index creux, définissez --density=sparse-any
.
Pour créer un index multiclés, ajoutez l'option --multikey
.
Terraform
Utilisez la ressource google_firestore_index
, puis définissez api_scope
sur MONGODB_COMPATIBLE_API
et query_scope
sur COLLECTION_GROUP
.
resource "google_firestore_index" "index" { database = "DATABASE_ID" collection = "COLLECTION" api_scope = "MONGODB_COMPATIBLE_API" query_scope = "COLLECTION_GROUP" // You can include multiple field blocks fields { field_path = "FIELD_PATH" order = "ORDER" } // Optional multikey = true density = "DENSITY" }
Remplacez les éléments suivants :
- DATABASE_ID : ID de la base de données que vous avez choisie
- COLLECTION : nom de la collection à indexer.
- FIELD_PATH : nom du champ à indexer.
- ORDER :
ASCENDING
ouDESCENDING
- DENSITY :
SPARSE_ANY
ouDENSE
Supprimer un index
Pour supprimer un index, procédez comme suit :
ConsoleGoogle Cloud
-
Dans la console Google Cloud , accédez à la page Bases de données.
- Dans la liste des bases de données, sélectionnez-en une.
- Dans le menu de navigation, cliquez sur Index.
- Dans la liste des index, sélectionnez Supprimer dans le bouton Plus de l'index que vous souhaitez supprimer.
- Cliquez sur Supprimer l'index.
CLI gcloud
Pour trouver le nom de l'index, utilisez la commande
gcloud firestore indexes composite list
.gcloud firestore indexes composite list \ --database='DATABASE_ID'
Remplacez DATABASE_ID par l'ID de la base de données.
-
Pour supprimer l'index, utilisez la commande
gcloud firestore indexes composite delete
.gcloud firestore indexes composite delete INDEX_NAME \ --database='DATABASE_ID'
Remplacez les éléments suivants :
- INDEX_NAME : nom d'un index
- DATABASE_ID : ID de la base de données
Temps de création d'un index
Pour créer un index, Firestore avec la compatibilité MongoDB doit créer l'index, puis remplir les entrées d'index avec les données existantes. Le temps nécessaire pour créer un index est déterminé par les éléments suivants :
La durée minimale de création d'un index est de quelques minutes, même pour une base de données vide.
Le temps nécessaire pour remplir les entrées d'index dépend de la quantité de données existantes qui appartiennent au nouvel index. Plus les valeurs de champs correspondant à la définition de l'index sont nombreuses, plus le remplissage des entrées d'index prend du temps.
Gérer les opérations de longue durée
Les créations d'index sont des opérations de longue durée. Les sections suivantes décrivent comment utiliser les opérations de longue durée pour les index.
Une fois que vous avez commencé à créer un index, Firestore compatible avec MongoDB attribue un nom unique à l'opération. Les noms des opérations sont précédés du préfixe projects/PROJECT_ID/databases/DATABASE_ID/operations/
, par exemple :
projects/PROJECT_ID/databases/DATABASE_ID/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg
Vous pouvez omettre le préfixe lorsque vous spécifiez un nom d'opération pour la commande describe
.
Lister toutes les opérations de longue durée
Pour répertorier les opérations de longue durée, utilisez la commande gcloud firestore operations list
. Cette commande répertorie les opérations en cours et récemment terminées.
Une fois terminées, les opérations restent accessibles pendant quelques jours :
gcloud firestore operations list
Vérifier l'état de l'opération
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 délai d'exécution
Lorsque l'opération s'exécute, consultez la valeur du champ state
pour connaître son état global.
Une requête permettant d'obtenir l'état d'une opération de longue durée renvoie les métriques workEstimated
et workCompleted
. workEstimated
indique le nombre total estimé de documents qu'une opération va traiter. workCompleted
indique le nombre de documents traités jusqu'à présent. Une fois l'opération terminée, workCompleted
reflète le nombre total de documents réellement traités, qui peut être différent de la valeur de workEstimated
.
Pour estimer la progression d'une opération, divisez workCompleted
par workEstimated
.
Voici un exemple de progression de la création d'un 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 se termine, la description de l'opération contient "done": true
. Consultez la valeur du champ state
pour afficher le résultat de l'opération. Si le champ done
n'est pas défini dans la réponse, l'opération n'est pas terminée.