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

La valeur TTL (Time To Live) vous permet de définir des stratégies visant à 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.
  • contribuer au respect des réglementations ou des 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. Chaque suppression nécessite une réplication de la clé primaire sur les instances dupliquées de la base de données, ce qui entraîne des coûts de réplication. Pour en savoir plus, consultez les Tarifs de la réplication de données. 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. Le TTL ne vérifie pas non plus les données lors de leur insertion. Il ne vous empêche donc pas d'insérer une ligne avec un code temporel 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 les sept jours.

Comment fonctionne la valeur TTL ?

Vous pouvez définir la valeur TTL sur les tables Spanner en définissant une règle de suppression des lignes dans le schéma de la base de données, ce qui permet à Spanner de supprimer régulièrement les données inutiles. Chaque table peut avoir sa propre règle. Une seule règle TTL peut être spécifiée par table. Vous configurez le TTL différemment pour les bases de données en dialecte Google SQL et les bases de données en dialecte PostgreSQL.

TTL avec GoogleSQL

Avec GoogleSQL, vous définissez une règle de suppression de lignes en spécifiant un horodatage et un intervalle pour déterminer à quel moment une ligne peut être supprimée, par exemple "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 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, des lignes peuvent subsister dans votre table jusqu'à trois jours après l'expiration de leur valeur TTL. Par exemple, une table ayant une règle de suppression de lignes qui s'applique aux lignes datant de plus de quatre jours peut inclure les lignes datant de sept jours, 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 Créer une règle TTL.

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 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 pour déterminer quand une ligne peut être supprimée.

La clause doit renvoyer un nombre entier de jours. Par exemple, '3 DAYS' et '4 DAYS 2 MINUTES - 2 MINUTES' sont autorisés, 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 en arrière-plan asynchrone, il y a un délai entre l'éligibilité et la suppression. Le tableau peut contenir des lignes éligibles à la suppression basée sur la valeur TTL, mais pour lesquelles l'exécution de l'opération TTL n'est pas encore terminée. En règle générale, le délai est inférieur à 72 heures.

Pour savoir comment créer une règle de suppression de lignes PostgreSQL, consultez 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 potentiellement supprimer des données ayant expiré dès que la sauvegarde a été restaurée. Vous devez donc reconfigurer le 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 éligibles à la suppression basée sur la valeur TTL, mais pour lesquelles l'exécution de l'opération 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

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

Étape suivante