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 utilisent des unités de suppression gérées. Pour connaître les tarifs, consultez la page Tarifs de l'édition Enterprise Cloud Firestore.
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 la 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 ne fait expirer 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.
Différences avec les index TTL
Contrairement aux autres index Firestore, les index TTL ne sont pas utilisés lors de la planification des requêtes pour améliorer les performances. Pour améliorer les performances des requêtes sur un champ utilisé avec la valeur TTL, vous devez l'ajouter à un index non TTL distinct.
Il est important de noter que, comme les champs TTL utilisent des codes temporels, leur ajout à un index non TTL peut entraîner des hotspots. Les hotspots se produisent lorsque des taux d'écriture et de suppression élevés sont concentrés dans une plage de documents restreinte, ce qui peut avoir un impact négatif sur les performances de scaling pendant les périodes de trafic d'écriture élevé.
Autorisations
Le principal qui crée ou supprime un index TTL doit disposer de 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 de gestion de l'authentification et des accès.
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 désigner un champ 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 sont pas utilisés dans la planification des requêtes et n'améliorent pas les performances des 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 Create Policy (Créer une règle).
Saisissez un nom de collection et un nom de champ de code temporel.
Cliquez sur Create (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 l'interface de ligne de commande gcloud CLI.
Utilisez la
firestore fields ttls updatecommande pour configurer un index TTL. Ajoutez l'indicateur--asyncpour empêcher 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 de l'index TTL
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 la sortie 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 l'interface de ligne de commande 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 l'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 d'exécution et celles qui ont été
récemment effectué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 de l'index TTL. Dans cette ligne du tableau, cliquez sur le bouton Delete (Supprimer) (icône de corbeille).
Confirmez l'opération en cliquant sur Delete (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 l'interface de ligne de commande gcloud CLI.
Utilisez la
firestore fields ttls updatecommande pour configurer un index TTL. Ajoutez l'indicateur--asyncpour empêcher 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 la section Gérer les tableaux de bord personnalisés et ajouter des widgets de tableau de bord.