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 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 la réplication de la clé primaire sur les instances répliquées de la base de données, ce qui conduit à la réplication les coûts. Pour en savoir plus, consultez la section 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 lorsqu'elles deviennent pouvant être supprimées. TTL ne vérifie pas non plus les données lorsqu'elles sont insérées, donc elle ne vous empêche pas d'insérer une ligne dont le code temporel 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 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 suppression de lignes dans le schéma de la base de données, ce qui permet à Spanner 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 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 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. En tant que les lignes peuvent rester dans votre table jusqu'à trois jours après que leur valeur TTL a été expirée ; Par exemple, une table avec une règle de suppression de lignes qui supprime les lignes les plus anciennes peut inclure les lignes datant de sept jours au maximum, ainsi que les lignes plus anciennes, de lignes impossibles à supprimer.

Pour obtenir des instructions détaillées sur la création d'une ligne GoogleSQL de suppression, 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 correspondre à 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 de manière continue 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 supprimées en fonction de 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

La valeur TTL est compatible avec l'audit de ses suppressions via des flux de modifications. Les enregistrements de flux de modifications qui suivent les modifications TTL d'une base de données ont la Champ transaction_tag défini sur RowDeletionPolicy et 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. Voir un exemple d'utilisation de Beam pour filtrer par tags de transaction.

Étape suivante