Simular TTL a nivel de la celda

En Bigtable , las políticas de recolección de elementos no utilizados se establecen a nivel de familia de columnas, y no puedes especificar una política de recolección de elementos no utilizados a nivel de celda. Sin embargo, puedes simular una política de tiempo de actividad (TTL) a nivel de la celda cambiando la configuración de recolección de elementos no utilizados. En esta página, se explican algunos enfoques diferentes que puedes usar.

Antes de leer esta página, debes leer la descripción general de la recolección de elementos no utilizados. Para obtener información sobre cómo enviar solicitudes de escritura, que incluyen marcas de tiempo, consulta Escrituras de Bigtable.

Caducidad de un segundo

En este enfoque, configura tu regla de recolección de elementos no utilizados para que los datos venzan después de un segundo. Cuando escribas datos, establece la marca de tiempo de la celda en el momento en que deseas que caduque el valor. Durante la compactación, Bigtable borra las celdas que tengan una marca de tiempo que tenga al menos un segundo de antigüedad. Por ejemplo, si configuras la marca de tiempo de una celda para el 30 de abril a las 9:00:00 a.m., la celda se borrará en algún momento después del 30 de abril a las 9:00:01 a.m. Este enfoque te permite establecer diferentes valores de vencimiento para distintas celdas en la misma familia de columnas.

Ventajas del vencimiento en un segundo

  • La marca de tiempo tiene un significado real: el tiempo de caducidad.

Las desventajas del vencimiento de un segundo

  • Todas las aplicaciones que escriben datos en esta familia de columnas de Bigtable deben configurarse para seguir esta regla. Si te olvidas y usas una marca de tiempo predeterminada del servidor en una escritura, esos datos vencen de inmediato y se borran durante la siguiente compactación.

  • Debido a que tus marcas de tiempo no son “reales”, no puedes usar marcas de tiempo para ningún otro caso práctico, como determinar cuándo se escribió un valor. Como solución alternativa, puedes escribir la marca de tiempo real en una columna separada, pero esto aumentará la cantidad de datos que almacenas.

  • No puedes implementar esta estrategia en una familia de columnas que ya tiene datos con marcas de tiempo reales. Si los datos existentes tienen marcas de tiempo reales o si accidentalmente escribes datos nuevos con marcas de tiempo reales, esos datos se borrarán durante la siguiente compactación.

  • No puedes especificar que varias celdas de una fila y columna dadas caduquen al mismo tiempo que otras. Los datos nuevos reemplazarán los datos antiguos con la misma marca de tiempo.

  • Debido a que la recolección de elementos no utilizados puede demorar hasta una semana, siempre debes usar filtros cuando leas los datos.

Vencimiento predeterminado

Supongamos que deseas que la mayoría de tus datos tengan un TTL predeterminado, pero quieres establecer diferentes valores de vencimiento por celda para algunos de tus datos.

Por ejemplo, puedes almacenar eventos de clic para diez clientes en una tabla. La mayoría de los eventos de clic deben vencer después de 2 días, pero tienes un cliente cuyos eventos de clic deben vencer después de una hora, y otro cuyos eventos de clic deben vencer después de 3 días.

En este enfoque, crea la familia de columnas con un límite de antigüedad para la recolección de elementos no utilizados, establecido en el TTL predeterminado. Si quieres que algunos datos venzan antes del tiempo predeterminado, configura una marca de tiempo anterior a la hora en que estos se escribieron. Con los datos que deseas que venzan más adelante, configura una marca de tiempo posterior a la hora en que se escribieron los datos.

Ventajas del vencimiento predeterminado

  • Existe un TTL predeterminado para escrituras que no tienen un TTL personalizado.

  • Este enfoque puede aplicarse con seguridad a una tabla preexistente.

Desventajas del vencimiento predeterminado

  • La marca de tiempo no es semánticamente significativa porque la marca de tiempo de una celda puede ser real o artificial. Esto significa que no puedes usar las marcas de tiempo de las celdas para ningún otro caso práctico, como determinar cuándo se escribió un valor. Como solución alternativa, puedes escribir la marca de tiempo real en una columna separada, pero esto aumentará la cantidad de datos que almacenas.

  • Puedes escribir, sin darte cuenta, una marca de tiempo personalizada que entre en conflicto con una marca de tiempo real en una columna determinada.

  • Debido a que la recolección de elementos no utilizados es asíncrona, siempre debes usar filtros cuando leas los datos si usas esta estrategia.

¿Qué sigue?