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

La valeur TTL (Time To Live) vous permet de définir des règles pour supprimer régulièrement des 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.
  • Vous aide à 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 lorsqu'elles sont insérées. Elle ne vous empêche donc pas d'insérer une ligne avec un horodatage arrivé à expiration.

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 le 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 sur les tables Spanner en définissant une règle de suppression des lignes 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. La configuration de la valeur TTL est différente pour les bases de données de dialecte GoogleSQL et les bases de données de dialecte PostgreSQL.

Valeur TTL avec GoogleSQL

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

Un processus système d'antécédents 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 sur plusieurs lots se produisent dans différentes transactions.

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, les 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 les lignes datant de plus de quatre jours peut inclure des lignes datant de sept jours au maximum, ainsi que des lignes plus anciennes qui ne peuvent pas être supprimées.

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 définir une règle de suppression de lignes dans une table PostgreSQL, celle-ci doit comporter une colonne dont le type de données est TIMESTAMPTZ. La clause TTL INTERVAL utilise cette colonne pour définir une spécification d'intervalle concernant le moment où une ligne peut être supprimée.

La clause doit correspondre à un nombre entier de jours. Par exemple, '3 DAYS' est autorisé, tout comme '4 DAYS 2 MINUTES - 2 MINUTES', mais '4 DAYS 3 MINUTES' n'est pas autorisé, 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 de manière continue et en arrière-plan. Comme il s'agit d'un processus en arrière-plan asynchrone, il existe un délai entre l'éligibilité et la suppression. La table peut contenir des lignes éligibles à la suppression de la valeur 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 section 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 devez donc reconfigurer la valeur TTL manuellement.

Cohérence des données

Une sauvegarde est un instantané cohérent de vos données à un moment précis (version_time). La sauvegarde peut contenir des lignes pouvant être supprimées des valeurs TTL, mais pour lesquelles celles-ci ne sont pas encore terminées. De même, les tâches d'exportation Dataflow lisent la table entière à un horodatage fixe.

Audit

La valeur TTL est compatible avec l'audit de ses suppressions via des flux de modifications. Le champ transaction_tag des flux de modifications qui suit les modifications de la valeur TTL d'une base de données est défini sur RowDeletionPolicy et le champ is_system_transaction est défini sur true. Les lecteurs de flux de modifications peuvent ensuite filtrer tous les enregistrements TTL ou tous les enregistrements à l'exception des enregistrements TTL, selon leur cas d'utilisation. Consultez un exemple d'utilisation de Beam pour filtrer par tags de transaction.