Présentation de la valeur TTL (Time To Live)

La valeur TTL (Time To Live) vous permet de définir des règles afin de supprimer régulièrement les données des tables Spanner. Supprimer les données inutiles permet de :

  • réduire les coûts de stockage et de sauvegarde ;
  • réduire le nombre de lignes que la base de données doit analyser pour certaines requêtes, ce qui peut éventuellement améliorer les performances des requêtes.
  • Permet de respecter les réglementations ou les directives du secteur qui limitent la durée de conservation de certains types de données.

La valeur TTL est idéale pour les activités de nettoyage régulières. Elle s'exécute en arrière-plan de manière continue, en supprimant périodiquement les données éligibles par lots. Les données sont généralement supprimées dans les 72 heures suivant leur date d'expiration. La valeur TTL n'invalide pas immédiatement les données et ne les masque pas des requêtes dès qu'elles peuvent être supprimées. La valeur TTL ne vérifie pas non plus les données lors de leur insertion. Elle ne vous empêche donc pas d'insérer une ligne dont l'horodatage a expiré.

La valeur TTL est conçue pour minimiser l'impact sur les autres activités de base de données. Elle parallélise le travail plus efficacement que des requêtes des utilisateurs finaux et inclut une logique de nouvelles tentatives pour garantir un nettoyage de bout en bout.

Un autre processus de compactage en arrière-plan récupère l'espace de stockage des lignes supprimées, généralement dans un délai de sept jours.

Comment fonctionne la valeur TTL ?

Vous pouvez définir une valeur TTL dans les tables Spanner en définissant une règle de suppression de ligne dans le schéma de base de données, ce qui permet à Spanner de supprimer périodiquement les données inutiles. Chaque table peut avoir sa propre règle. Vous ne pouvez spécifier qu'une seule règle TTL par table. Vous avez configuré la valeur TTL différemment pour les bases de données utilisant le dialecte GoogleSQL et celles basées sur le dialecte PostgreSQL.

Valeur TTL avec GoogleSQL

À l'aide de GoogleSQL, vous définissez une règle de suppression des lignes en spécifiant un horodatage et un intervalle pour déterminer à quel moment une ligne peut être supprimée (par exemple, la date de la dernière mise à jour plus 30 jours).

Un processus système en arrière-plan vérifie quotidiennement les lignes éligibles. Elle parallélise les suppressions effectives dans des lots exécutés près de l'emplacement où les données sont stockées en interne. Chaque lot s'exécute dans sa propre transaction à un horodatage cohérent. Ainsi, les lignes d'un lot donné, ainsi que tous les index et enfants entrelacés, sont assurés d'être supprimés de manière atomique. Toutefois, les suppressions de lots sont effectuées dans des transactions différentes.

Comme il s'agit d'un processus en arrière-plan asynchrone, il y a un délai entre l'éligibilité et la suppression. En règle générale, le délai est inférieur à 72 heures. Par conséquent, des lignes peuvent rester dans votre table jusqu'à trois jours après l'expiration de leur valeur TTL. Par exemple, une table avec une règle de suppression des lignes qui supprime des lignes datant de plus de quatre jours peut inclure des lignes datant de plus de sept jours, ainsi que des lignes plus anciennes impossibles à supprimer.

Pour obtenir des instructions détaillées sur la création d'une règle de suppression de lignes GoogleSQL, consultez la page Créer une règle TTL.

Valeur TTL avec PostgreSQL

Avec PostgreSQL, un propriétaire de base de données peut utiliser une clause TTL INTERVAL dans l'instruction CREATE TABLE ou ALTER TABLE pour définir une règle de suppression de lignes.

Pour que vous puissiez définir une règle de suppression de lignes sur une table PostgreSQL, la table doit comporter une colonne avec le type de données TIMESTAMPTZ. La clause TTL INTERVAL utilise cette colonne pour définir une spécification d'intervalle à laquelle une ligne peut être supprimée.

La clause doit renvoyer un nombre entier de jours. Par exemple, '3 DAYS' est autorisé, tout comme '4 DAYS 2 MINUTES - 2 MINUTES', mais '4 DAYS 3 MINUTES' ne l'est pas, et une erreur est renvoyée. Vous ne pouvez pas utiliser de nombres négatifs.

La récupération de mémoire TTL supprime les lignes éligibles en continu et en arrière-plan. Comme il s'agit d'un processus asynchrone en arrière-plan, il existe un délai entre l'éligibilité et la suppression. La table peut contenir des lignes éligibles à la suppression TTL, mais pour lesquelles la valeur TTL n'est pas encore terminée. En général, le délai est inférieur à 72 heures.

Pour savoir comment créer une règle de suppression de lignes PostgreSQL, consultez la page Créer une règle TTL.

Sauvegardes et valeur TTL

Restaurer une sauvegarde

Lorsque vous restaurez une base de données à partir d'une sauvegarde, toutes les règles de suppression de lignes configurées sur la base de données source sont automatiquement supprimées. Cela empêche Spanner de supprimer potentiellement les données expirées dès que la sauvegarde a été restaurée. Vous devrez donc reconfigurer la valeur TTL manuellement.

Cohérence des données

Une sauvegarde est un instantané cohérent de vos données à un moment donné (version_time). La sauvegarde peut contenir des lignes susceptibles d'être supprimées de la valeur TTL, mais pour lesquelles la valeur TTL n'est pas encore terminée. De même, les tâches d'exportation Dataflow lisent l'intégralité de la table à un horodatage fixe.

Audits

La valeur TTL permet d'auditer ses suppressions via des flux de modifications. Pour les enregistrements de données de flux de modifications qui suivent les modifications de valeur TTL à une base de données, le champ transaction_tag est défini sur RowDeletionPolicy et le champ is_system_transaction sur true. Les lecteurs de flux de modifications peuvent ensuite filtrer tous les enregistrements TTL ou tous les enregistrements à l'exception de ceux TTL, en fonction de leur cas d'utilisation. Consultez un exemple d'utilisation de Beam pour filtrer par tags de transaction.