El tiempo de vida (TTL) te permite definir políticas para eliminar periódicamente datos de las tablas de Spanner. Eliminar datos innecesarios:
- Reduce los costes de almacenamiento y de copias de seguridad.
- Reduce el número de filas que la base de datos tiene que analizar en algunas consultas, lo que puede aumentar el rendimiento de las consultas.
- Ayuda a cumplir las normativas o las directrices del sector que limitan el tiempo de conservación de determinados tipos de datos.
El TTL es ideal para las actividades de limpieza periódicas. Se ejecuta continuamente en segundo plano y elimina periódicamente los datos aptos por lotes. Los datos se suelen eliminar en un plazo de 72 horas después de su fecha de vencimiento. Cada eliminación requiere una replicación de clave principal en las réplicas de la base de datos, lo que conlleva costes de replicación. Para obtener más información, consulta los precios de la replicación de datos. El TTL no invalida los datos inmediatamente ni los oculta de las consultas cuando se pueden eliminar. Además, TTL no comprueba los datos mientras se insertan, por lo que no te impide insertar una fila con una marca de tiempo caducada.
El TTL se ha diseñado para minimizar el impacto en otras cargas de trabajo de bases de datos. El proceso de barrido de TTL funciona en segundo plano con prioridad baja del sistema. Distribuye el trabajo a lo largo del tiempo y los recursos de las instancias disponibles de forma más eficiente que las consultas de los usuarios finales e incluye una lógica de reintento para asegurar la limpieza de extremo a extremo con una sobrecarga de procesamiento mínima.
Otro proceso de compactación en segundo plano reclama el almacenamiento de las filas eliminadas, normalmente en un plazo de siete días.
¿Cómo funciona TTL?
Puedes definir el TTL en las tablas de Spanner definiendo una política de eliminación de filas en el esquema de la base de datos. Esta política permite a Spanner eliminar periódicamente los datos innecesarios. Las políticas de TTL tienen las siguientes características:
- Cada tabla puede tener su propia política.
- Solo se puede especificar una política de TTL por tabla.
- El TTL se configura de forma diferente en las bases de datos con dialecto GoogleSQL y en las bases de datos con dialecto PostgreSQL.
- La política de TTL no elimina las filas que tienen la marca de tiempo definida en
NULL
. - Los datos insertados con marcas de tiempo caducadas se eliminan cuando se detectan en el siguiente ciclo de eliminación de TTL.
TTL con GoogleSQL
Con GoogleSQL, puedes definir una política de eliminación de filas especificando una marca de tiempo y un intervalo para determinar cuándo se puede eliminar una fila. Por ejemplo, la fecha de la última actualización más 30 días.
Un proceso del sistema en segundo plano comprueba diariamente las filas aptas. Paraleliza las eliminaciones reales en lotes que se ejecutan cerca de donde se almacenan los datos internamente. Cada lote se ejecuta en su propia transacción con una marca de tiempo coherente. Por lo tanto, las filas de un lote determinado, junto con los índices y los elementos secundarios intercalados, se eliminan de forma atómica. Sin embargo, las eliminaciones en lotes se producen en transacciones diferentes.
Como se trata de un proceso en segundo plano asíncrono, hay un retraso entre la cumplimiento de los requisitos y la eliminación. Normalmente, el retraso es inferior a 72 horas. Por lo tanto, es posible que las filas permanezcan en la tabla hasta tres días después de que haya caducado su TTL. Por ejemplo, una tabla con una política de eliminación de filas que elimine las filas con más de cuatro días podría incluir filas de hasta siete días, así como filas más antiguas que no se puedan eliminar.
Para ver instrucciones detalladas sobre cómo crear una política de eliminación de filas de GoogleSQL, consulta Crear una política de TTL.
TTL con PostgreSQL
Con PostgreSQL, el propietario de una base de datos puede usar una cláusula TTL INTERVAL
en la instrucción CREATE TABLE
o ALTER TABLE
para definir una política de eliminación de filas.
Para definir una política de eliminación de filas en una tabla de PostgreSQL, la tabla debe tener una columna con el tipo de datos TIMESTAMPTZ
. La cláusula TTL INTERVAL
usa esta columna para definir un intervalo en el que se puede eliminar una fila.
La cláusula debe dar como resultado un número entero de días. Por ejemplo, se permite '3
DAYS'
y '4 DAYS 2 MINUTES - 2 MINUTES'
, pero no '4 DAYS 3
MINUTES'
, y se devuelve un error. No puedes usar números negativos.
La recogida de elementos no utilizados con TTL elimina las filas aptas de forma continua y en segundo plano. Como se trata de un proceso en segundo plano asíncrono, hay un retraso entre la cumplimiento de los requisitos y la eliminación. La tabla puede contener filas aptas para la eliminación por TTL, pero cuyo TTL aún no se ha completado. Normalmente, el retraso es inferior a 72 horas.
Para obtener instrucciones sobre cómo crear una política de eliminación de filas de PostgreSQL, consulta Crear una política de TTL.
Copias de seguridad y TTL
Restaurar una copia de seguridad
Cuando restauras una base de datos a partir de una copia de seguridad, se eliminan automáticamente todas las políticas de eliminación de filas que se hayan configurado en la base de datos de origen. De esta forma, se evita que Spanner elimine los datos caducados en cuanto se restaure la copia de seguridad. Por lo tanto, tendrás que volver a configurar el TTL manualmente.
Coherencia de datos
Una copia de seguridad es una instantánea coherente de tus datos en un momento concreto (version_time
). La copia de seguridad puede contener filas que cumplan los requisitos para eliminarse por TTL, pero cuyo TTL aún no se haya completado.
Del mismo modo, las tareas de exportación de Dataflow leen toda la tabla en una marca de tiempo fija.
Auditoría
TTL admite la auditoría de sus eliminaciones a través de secuencias de cambios.
Los registros de datos de los flujos de cambios que monitorizan los cambios de TTL de una base de datos tienen el campo transaction_tag
definido como RowDeletionPolicy
y el campo is_system_transaction
definido como true
. Los lectores de flujos de cambios pueden filtrar todos los registros TTL o todos los registros excepto los TTL, en función de su caso práctico. Consulta un ejemplo de uso de Beam para filtrar por etiquetas de transacción.
Siguientes pasos
- Consulta cómo gestionar la conservación de datos con TTL.
- Consulta información sobre las métricas y la monitorización de TTL.