Cette page explique comment utiliser l'API MongoDB, la console Google Cloud et Google Cloud CLI pour configurer des index TTL (Time To Live).
Présentation de la valeur TTL
Utilisez des index TTL pour supprimer automatiquement les données obsolètes de vos bases de données. Un index TTL désigne un champ donné comme délai d'expiration des documents d'une collection donnée. Avec la valeur TTL, vous pouvez réduire les coûts de stockage en supprimant les données obsolètes. Les données sont généralement supprimées dans les 24 heures suivant leur délai d'expiration.
Tarifs
Les opérations de suppression TTL sont comptabilisées dans vos coûts de suppression de documents. Pour connaître les tarifs des opérations de suppression, consultez la page Tarifs de l'édition Cloud FirestoreEnterprise.
Limites et contraintes
- Vous ne pouvez créer qu'un seul index TTL par collection.
- Vous pouvez avoir un maximum de 500 index TTL.
Suppression TTL
Notez les comportements clés suivants de la suppression basée sur la valeur TTL :
La suppression via la valeur TTL n'est pas un processus instantané. Les documents expirés continuent d'apparaître dans les requêtes et les demandes de recherche jusqu'à ce que le processus TTL les supprime réellement. La valeur TTL échange la rapidité de suppression au profit d'une réduction du coût total de possession pour les suppressions. Les données sont généralement supprimées dans les 24 heures suivant leur délai d'expiration.
La création d'un index TTL sur une collection existante entraîne une suppression groupée de toutes les données expirées en fonction du nouvel index TTL. Notez que cette suppression groupée n'est pas non plus instantanée et dépend de la quantité de données existantes pour cette collection.
Si un document a un délai d'expiration dans le passé et que vous ajoutez un nouvel index TTL à la collection, le document sera supprimé dans les 24 heures suivant la fin de la configuration et l'activation de l'index TTL.
La valeur TTL ne supprime pas nécessairement les documents dans le même ordre que leurs codes temporels d'expiration.
Les suppressions ne sont pas effectuées de manière transactionnelle. Les documents ayant le même délai d'expiration ne sont pas nécessairement supprimés en même temps. Si vous avez besoin de ce comportement, effectuez les suppressions à l'aide d'une bibliothèque cliente.
Cloud Firestore respectera toujours le dernier champ TTL pour déterminer le délai d'expiration. Par exemple, si le champ TTL d'un document expiré mais non encore supprimé est mis à jour à une date ultérieure, le document n'expirera pas et la nouvelle date sera utilisée.
Cloud Firestore n'expire un document que lorsque le champ TTL est défini sur une valeur
Date and time/BSON Dateou sur une valeurArraycontenant une valeurDate and time/BSON Date. Laissez le champ absent ou défini sur une valeur telle quenullpour désactiver les expirations par document.La valeur TTL est conçue pour minimiser l'impact sur les autres activités de base de données. Les suppressions basées sur la valeur TTL sont traitées avec une priorité inférieure. D'autres stratégies sont également en place pour lisser les pics de trafic dus aux suppressions basées sur la valeur TTL.
Champs TTL et index non TTL
Un champ TTL peut être indexé ou non. Toutefois, comme un champ TTL est un code temporel, l'inclusion du champ dans un index non TTL peut affecter les performances à des taux de trafic plus élevés. L'inclusion d'un champ de code temporel dans un index non TTL peut créer des hotspots, ce qui n'est pas recommandé. Les hotspots sont des taux de lecture, d'écriture et de suppression élevés pour une plage de documents restreinte.
Autorisations
Le principal qui crée ou supprime un index TTL nécessite l'autorisation suivante dans le projet :
- L'affichage des index TTL nécessite les autorisations
datastore.indexes.listetdatastore.indexes.get. - La création ou la suppression d'index TTL nécessite l'autorisation
datastore.indexes.update. - La vérification de l'état des opérations TTL nécessite
datastore.operations.listetdatastore.operations.get.
Pour connaître les rôles qui attribuent ces autorisations, consultez la section Cloud Firestore Rôles Identity and Access Management.
Avant de commencer
Avant d'utiliser le gcloud CLI pour gérer les index TTL, utilisez la
gcloud components update
commande pour mettre à jour les composants vers la dernière version disponible :
gcloud components update
Créer un index TTL
Lorsque vous créez un index TTL, vous désignez un champ de document comme délai d'expiration des documents d'une collection.
La valeur TTL utilise un champ spécifié pour identifier les documents éligibles à la suppression.
Le champ TTL doit être défini sur une valeur Timestamp/BSON Date ou sur une valeur Array contenant une valeur Timestamp/BSON Date. Vous pouvez sélectionner un champ qui existe déjà ou en désigner un que vous prévoyez d'ajouter ultérieurement.
Tenez compte des points suivants avant de définir la valeur du champ TTL :
La valeur du champ TTL peut être une heure future, actuelle ou passée. Si la valeur est une heure passée, le document est immédiatement éligible à la suppression. Par exemple, vous pouvez créer un index TTL avec le champ
expireAt, que vous ajoutez ensuite aux documents existants.L'utilisation de tout autre type de données ou la non-définition de la valeur du champ TTL désactiveront la valeur TTL pour le document individuel.
Pour créer un index TTL, procédez comme suit :
API MongoDB
Incluez l'option d'index expireAfterSeconds lorsque vous appelez la méthode createIndex() :
db.COLLECTION_NAME.createIndex({"TTL_FIELD": 1, "expireAfterSeconds": EXPIRATION_OFFSET_SECONDS})
Exemple :
db.restaurants.createIndex({"ts": 1, "expireAfterSeconds": 3600})
expireAfterSeconds identifie la valeur TTL comme index TTL et correspond au décalage entre la valeur du code temporel du champ TTL et le délai d'expiration. Si expireAfterSeconds est défini sur 0, le délai d'expiration est directement indiqué par la valeur du code temporel du champ TTL.
Prenez note des restrictions suivantes :
- Les index TTL ne doivent inclure qu'un seul champ.
- Les index TTL ne peuvent pas être utilisés dans les requêtes.
- Vous ne pouvez créer qu'un seul index TTL par collection.
- Les journaux d'audit pour la création d'index TTL avec l'API MongoDB utilisent le nom de méthode
google.firestore.admin.v1.FirestoreAdmin.UpdateField.
Console Google Cloud
Dans la console Google Cloud, accédez à la page Bases 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 Time to live (Valeur TTL).
Cliquez sur Créer une règle.
Saisissez un nom de collection et un nom de champ de code temporel.
Cliquez sur Créer.
La console revient à la page Time to live (Valeur TTL). Si l'opération démarre correctement, la page ajoute une entrée au tableau des index TTL. En cas d'échec, la page affiche un message d'erreur.
gcloud
Installez et initialisez la CLI gcloud CLI.
Utilisez la
firestore fields ttls updatecommande pour configurer un index TTL. Ajoutez l'indicateur--asyncpour empêcher les gcloud CLI d'attendre la fin de l'opération.gcloud firestore fields ttls update ttl_field --collection-group=collection_name --enable-ttl
Durée de création d'un index TTL
Même sur une base de données vide, la création d'un index TTL peut prendre au moins dix minutes. Une fois que vous avez démarré une opération, la fermeture du terminal ne l'annule pas.
Afficher les index TTL
Pour afficher les index TTL, procédez comme suit :
API MongoDB
Utilisez la méthode listIndexes() pour afficher les index TTL. Exemple :
db.restaurants.listIndexes()
Notez que le résultat inclura à la fois les index TTL et les index non TTL. Les index TTL incluront l'option expireAfterSeconds.
Console Google Cloud
Dans la console Google Cloud, accédez à la page Bases 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 Time to live (Valeur TTL).
La console liste les index TTL de votre base de données et inclut l'état de chaque index.
gcloud
Installez et initialisez la CLI gcloud CLI.
Utilisez la
firestore fields ttls listcommande pour configurer un index TTL. La commande suivante liste tous les index TTL.gcloud firestore fields ttls list
Pour lister les index TTL sous une collection spécifique, utilisez la commande suivante :
gcloud firestore fields ttls list --collection-group=collection_name
Afficher les détails de l'opération
Vous pouvez utiliser la gcloud CLI pour afficher plus de détails sur un index TTL
à l'état CREATING.
Utilisez la commande operations list pour afficher toutes les opérations en cours et
récemment terminées :
gcloud firestore operations list
La réponse inclut une estimation de la progression de l'opération.
Supprimer un index TTL
Pour supprimer un index TTL, procédez comme suit :
API MongoDB
Utilisez la dropIndex() méthode pour supprimer un index TTL. Exemple :
Supprimer un index TTL à l'aide du nom d'index
db.restaurants.dropIndex("ts_1")
Supprimer un index TTL à l'aide de la définition d'index
db.restaurants.dropIndex({"ts": 1})
Notez que les journaux d'audit pour la suppression d'un index TTL avec l'API MongoDB utilisent le nom de méthode google.firestore.admin.v1.FirestoreAdmin.UpdateField.
Console Google Cloud
Dans la console Google Cloud, accédez à la page Bases 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 Time to live (Valeur TTL).
Dans le tableau des index TTL, recherchez la ligne correspondant à l'index TTL. Dans cette ligne du tableau, cliquez sur le bouton Supprimer (corbeille).
Confirmez l'opération en cliquant sur Supprimer.
La console revient à la page Time to live (Valeur TTL). En cas de réussite, Cloud Firestore supprime l'index TTL du tableau.
gcloud
Installez et initialisez la CLI gcloud CLI.
Utilisez la
firestore fields ttls updatecommande pour configurer un index TTL. Ajoutez l'indicateur--asyncpour empêcher les gcloud CLI d'attendre la fin de l'opération.gcloud firestore fields ttls update ttl_field --collection-group=collection_name --disable-ttl
Surveiller les suppressions TTL
Vous pouvez utiliser Cloud Monitoring pour afficher des métriques sur les suppressions basées sur la valeur TTL. Cloud Firestore fournit les métriques suivantes pour la valeur TTL :
| Type de métrique | Nom de la métrique | Description de la métrique |
|---|---|---|
| firestore.googleapis.com/document/ttl_deletion_count | Nombre de suppressions TTL |
Nombre total de documents supprimés par les index TTL. |
| firestore.googleapis.com/document/ttl_expiration_to_deletion_delays | Délai entre l'expiration et la suppression TTL |
Temps écoulé entre l'expiration d'un document sous un index TTL et sa suppression effective. |
Pour configurer un tableau de bord avec des métriques Cloud Firestore, consultez Gérer un tableau de bord personnalisé et Ajouter des widgets à un tableau de bord.