Gérer la conservation des données avec des règles TTL

Cette page explique comment utiliser la console Google Cloud et la Google Cloud CLI pour configurer des règles de durée de vie (TTL). Avant de lire cette page, vous devez comprendre le modèle de données Cloud Firestore.

Présentation de la valeur TTL

Utilisez des règles de valeur TTL pour supprimer automatiquement les données obsolètes de vos bases de données. Une règle TTL désigne un champ donné comme délai d'expiration des documents d'un groupe de collections donné. Avec la valeur TTL, vous pouvez réduire les coûts de stockage en nettoyant les données obsolètes. Les données sont généralement supprimées dans les 24 heures suivant leur date 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 Cloud Firestore.

Limites et contraintes

  • Vous ne pouvez marquer qu'un seul champ par groupe de collections comme champ TTL.
  • Vous pouvez avoir jusqu'à 1 000 configurations au niveau du champ. Une configuration de champ peut contenir plusieurs configurations pour le même champ. Par exemple, une exception d'indexation à champ unique et une règle TTL sur le même champ sont comptabilisées comme une seule configuration de champ par rapport à la limite.
  • Pour les clients Firestore en mode Datastore, la valeur TTL ne peut pas être utilisée avec le mode de simultanéité Optimiste avec groupes d'entités. Envisagez de passer au mode de simultanéité optimiste.

Suppression TTL

Notez les principaux comportements suivants de la suppression basée sur la valeur TTL :

  • La suppression via TTL n'est pas un processus instantané. Les documents arrivés à expiration continuent d'apparaître dans les requêtes et les demandes de recherche jusqu'à ce que le processus TTL les supprime réellement. La fonctionnalité TTL échange la rapidité de suppression contre un coût total de possession réduit pour les suppressions. Les données sont généralement supprimées dans les 24 heures suivant leur date d'expiration.

  • La suppression d'un document via la valeur TTL ne supprime pas les sous-collections de ce document.

  • L'application d'une règle TTL à un groupe de collections existant entraîne la suppression groupée de toutes les données arrivées à expiration conformément à la nouvelle règle 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 ce groupe de collections.

  • Si un document a une date d'expiration passée et que vous ajoutez une nouvelle règle TTL à la collection, le document sera supprimé dans les 24 heures suivant la fin de la configuration de la règle TTL et son activation.

  • 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 la même date 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 respecte toujours le dernier champ TTL pour déterminer l'expiration. Par exemple, si un document arrivé à expiration, mais pas encore supprimé, voit son champ TTL mis à jour à une date ultérieure, il 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 des types de valeurs spécifiques. Pour les bases de données de l'édition Standard, le champ doit être défini sur une valeur Date and time. Pour les bases de données Enterprise Edition, le champ doit être défini sur une valeur Date and time ou une valeur Array contenant une valeur Date and time. Si vous laissez le champ vide ou que vous le définissez sur une valeur telle que null, vous pouvez 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.

  • La suppression via TTL appelle tous les écouteurs d'instantanés actifs et déclenche les déclencheurs Cloud Functions Cloud Firestore.

Champs et index TTL

Un champ TTL peut être indexé ou non. Toutefois, comme un champ TTL est un code temporel, l'indexation du champ peut affecter les performances lorsque le trafic est plus élevé. L'indexation d'un champ d'horodatage peut créer des points d'accès, ce qui est contraire aux bonnes pratiques. Les hotspots sont des taux élevés de lecture, d'écriture et de suppression sur une plage de documents étroite.

Par défaut, l'édition Cloud Firestore Standard crée un index à champ unique pour tous les champs. Vous pouvez créer une exception d'index à champ unique pour désactiver les index sur un champ TTL.

Autorisations

Le compte principal qui configure une règle TTL doit disposer de l'autorisation suivante dans le projet :

  • L'affichage des règles TTL nécessite les autorisations datastore.indexes.list et datastore.indexes.get.
  • Pour modifier les règles TTL, vous devez disposer de l'autorisation datastore.indexes.update.
  • Pour vérifier l'état des opérations TTL, vous devez disposer des autorisations datastore.operations.list et datastore.operations.get.

Pour connaître les rôles qui attribuent ces autorisations, consultez Rôles Identity and Access Management pour Cloud Firestore.

Créer une règle TTL

Lorsque vous créez une règle TTL, vous désignez un champ de document comme date d'expiration des documents d'un groupe de collections.

Le TTL utilise un champ spécifié pour identifier les documents pouvant être supprimés. Pour les bases de données de l'édition Standard, le champ TTL doit être défini sur une valeur Date and time. Pour les bases de données Enterprise Edition, elle doit être définie sur une valeur Date and time ou une valeur Array contenant une valeur Date and time. Vous pouvez sélectionner un champ existant 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 date passée, le document peut être supprimé immédiatement. Par exemple, vous pouvez créer une règle TTL avec le champ expireAt, que vous ajoutez ensuite aux documents existants.

  • Si vous utilisez un autre type de données ou si vous ne définissez pas la valeur du champ TTL, la valeur TTL sera désactivée pour le document individuel.

Pour créer une règle TTL, procédez comme suit :

Console Google Cloud

  1. Dans la console Google Cloud, accédez à la page Base de données.

    Accéder à la page "Bases de données"

  2. Sélectionnez la base de données requise dans la liste des bases de données.

  3. Dans le menu de navigation, cliquez sur Durée de vie.

  4. Cliquez sur Créer une règle.

  5. Saisissez un nom pour le groupe de collections et un nom pour le champ de code temporel.

  6. Facultatif : configurez un décalage d'expiration. Saisissez une valeur et sélectionnez une unité (jours, heures, minutes ou secondes). Par défaut, le décalage est de 0.

  7. Cliquez sur Créer.

La console revient à la page Durée de vie. Si l'opération démarre correctement, la page ajoute une entrée à la table des règles TTL. En cas d'échec, la page affiche un message d'erreur.

gcloud

Utilisez la commande firestore fields ttls update pour configurer une règle TTL. Ajoutez l'option --async pour empêcher la gcloud CLI d'attendre la fin de l'opération.

 gcloud firestore fields ttls update 
ttl_field
--collection-group=collection_group_name
--enable-ttl

Pour activer la valeur TTL avec un décalage d'expiration, ajoutez l'option --expiration-offset :

 gcloud firestore fields ttls update 
ttl_field
--collection-group=collection_group_name
--enable-ttl
--expiration-offset=expiration_offset

Remplacez expiration_offset par une durée, par exemple 7d pour sept jours ou 24h pour 24 heures. Si vous omettez cette option, le décalage d'expiration est défini par défaut sur 0.

Durée d'activation de la règle TTL

L'activation d'une règle TTL peut prendre au moins 10 minutes. Une fois que vous avez lancé une opération, la fermeture du terminal ne l'annule pas.

Afficher les règles TTL

Pour afficher les règles TTL et leur état, procédez comme suit :

Console Google Cloud

  1. Dans la console Google Cloud, accédez à la page Base de données.

    Accéder à la page "Bases de données"

  2. Sélectionnez la base de données requise dans la liste des bases de données.

  3. Dans le menu de navigation, cliquez sur Durée de vie.

La console liste les règles TTL de votre base de données et inclut l'état de chaque règle.

gcloud

Utilisez la commande firestore fields ttls list pour configurer une règle TTL. La commande suivante liste toutes les règles TTL.

   gcloud firestore fields ttls list
   

Pour lister les règles TTL d'un groupe de collections spécifique, utilisez la commande suivante :

   gcloud firestore fields ttls list  --collection-group=collection_group_name
   

Afficher les détails de l'opération

Vous pouvez utiliser la gcloud CLI pour afficher plus de détails sur une règle TTL à l'état CREATING.

Exécutez 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.

Désactiver une règle TTL

Pour désactiver une règle TTL, procédez comme suit :

Console Google Cloud

  1. Dans la console Google Cloud, accédez à la page Base de données.

    Accéder à la page "Bases de données"

  2. Sélectionnez la base de données requise dans la liste des bases de données.

  3. Dans le menu de navigation, cliquez sur Durée de vie.

  4. Dans le tableau des règles TTL, recherchez la ligne correspondant à la règle TTL. Dans cette ligne du tableau, cliquez sur le bouton Supprimer (corbeille).

  5. Confirmez l'opération en cliquant sur Supprimer.

La console revient à la page Durée de vie. En cas de réussite, Cloud Firestore supprime la règle TTL de la table.

gcloud

1. Utilisez la commande firestore fields ttls update pour configurer une règle TTL. Ajoutez l'option --async pour empêcher la gcloud CLI d'attendre la fin de l'opération.

   gcloud firestore fields ttls update ttl_field --collection-group=collection_group_name --disable-ttl
   

Surveiller les suppressions TTL

Vous pouvez utiliser Cloud Monitoring pour afficher les 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 de la valeur TTL (Time To Live)

Nombre total de documents supprimés par les règles TTL.

firestore.googleapis.com/document/ttl_expiration_to_deletion_delays Délais entre l'expiration de la valeur TTL et la suppression

Temps écoulé entre l'expiration d'un document en vertu d'une règle 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 de tableau de bord.