Simuler la valeur TTL au niveau de la cellule

Dans Cloud Bigtable, les stratégies de récupération de mémoire sont définies au niveau de la famille de colonnes, et vous ne pouvez pas spécifier de stratégie de récupération de mémoire au niveau de la cellule. Toutefois, vous pouvez simuler une stratégie de valeur TTL (Time To Live) au niveau de la cellule en modifiant vos paramètres de récupération de mémoire. Cette page décrit les différentes approches que vous pouvez utiliser.

Avant de lire cette page, consultez la page de présentation intitulée Récupération de mémoire. Pour savoir comment envoyer des requêtes d'écriture, y compris des horodatages, consultez la page Écritures Cloud Bigtable.

Expiration au bout d'une seconde

Cette approche vous permet de définir une règle de récupération de mémoire de façon à ce que les données expirent au bout d'une seconde. Lors de l'écriture de données, définissez l'horodatage de la cellule concernée sur l'heure à laquelle vous souhaitez que la valeur expire. Lors du compactage, le récupérateur de mémoire supprime les cellules dont l'horodatage date d'au moins une seconde. Par exemple, si vous définissez l'horodatage d'une cellule sur le 30 avril à 9:00:00, la cellule est récupérée après 9:00:01 le 30 avril. Cette approche vous permet de définir différentes valeurs d'expiration pour différentes cellules de la même famille de colonnes.

Avantages

  • L'horodatage présente une signification réelle : la date d'expiration.

Inconvénients

  • Chaque application qui écrit des données dans cette famille de colonnes Cloud Bigtable doit être configurée afin de suivre cette règle. Si vous oubliez de le faire et que vous utilisez un horodatage de serveur par défaut lors d'une écriture, ces données expirent immédiatement et sont supprimées lors du compactage suivant.

  • Étant donné que vos horodatages ne sont pas "réels", vous ne pouvez utiliser les horodatages pour aucun autre cas d'utilisation, tel que la détermination du moment où une valeur a été écrite. Pour contourner ce problème, vous pouvez écrire l'horodatage réel dans une colonne distincte, mais cela augmente la quantité de données stockées.

  • Vous ne pouvez pas mettre en œuvre cette stratégie dans le cas d'une famille de colonnes contenant déjà des données qui comprennent des horodatages réels. Si les données existantes présentent des horodatages réels ou si vous écrivez accidentellement de nouvelles données présentant des horodatages réels, ces données sont supprimées lors du compactage suivant.

  • Vous ne pouvez pas spécifier le fait que plusieurs cellules pour une ligne et une colonne données doivent expirer en même temps. Toutes nouvelles données présentant le même horodatage que d'anciennes données écraseront ces dernières.

  • Étant donné que la récupération de mémoire peut prendre jusqu'à une semaine, vous devez toujours utiliser des filtres lors de la lecture des données.

Expiration par défaut

Supposons que vous souhaitiez que la plupart de vos données aient une valeur TTL par défaut, mais que vous souhaitiez définir des valeurs d'expiration par cellule différentes pour certaines de vos données.

Par exemple, vous pouvez stocker les événements de clic de dix clients dans une seule table. La plupart des événements de clic doivent expirer au bout de deux jours, mais vous avez un client dont les événements de clic doivent expirer au bout d'une heure, et un autre client dont les événements de clic doivent expirer au bout de trois jours.

Dans cette approche, créez une famille de colonnes présentant une limite d'âge pour la récupération de mémoire définie sur la valeur TTL par défaut. Pour les données qui doivent expirer avant la valeur par défaut, définissez l'horodatage sur une valeur antérieure à l'heure à laquelle les données sont réellement écrites. Pour les données qui doivent expirer ultérieurement, définissez l'horodatage sur une valeur ultérieure à l'heure à laquelle les données sont réellement écrites.

Avantages

  • Une valeur TTL par défaut est en place pour les écritures qui ne présentent pas de valeur TTL personnalisée.

  • Cette approche peut être appliquée à une table existante en toute sécurité.

Inconvénients

  • Le terme horodatage ne présente pas de signification sémantique, car l'horodatage d'une cellule peut être réel ou artificiel. Cela implique que vous ne pouvez utiliser les horodatages des cellules pour aucun autre cas d'utilisation, tel que la détermination du moment où une valeur a été écrite. Pour contourner ce problème, vous pouvez écrire l'horodatage réel dans une colonne distincte, mais cela augmente la quantité de données stockées.

  • Par inadvertance, vous pouvez écrire un horodatage personnalisé qui entre en conflit avec un horodatage réel dans une colonne donnée.

  • La récupération de mémoire étant asynchrone, vous devez toujours utiliser des filtres lors de la lecture des données lorsque vous utilisez cette stratégie.

Étapes suivantes