Gestionar la conservación de datos con políticas de TTL
En esta página se describe cómo usar la consola de Google Cloud y la CLI de Google Cloud para configurar políticas de tiempo de vida (TTL).
Resumen del tiempo de vida
Usa políticas de TTL para eliminar automáticamente los datos obsoletos de tus bases de datos. Una política de TTL designa un campo concreto como la hora de vencimiento de los documentos de una colección determinada. Con TTL, puedes reducir los costes de almacenamiento eliminando los datos obsoletos. Los datos suelen eliminarse en un plazo de 24 horas después de su fecha de vencimiento.
Precios
Las operaciones de eliminación de TTL se tienen en cuenta en los costes de eliminación de documentos. Para consultar los precios de las operaciones de eliminación, consulta los precios de la edición Enterprise de Firestore.
Límites y restricciones
- Solo puedes marcar un campo por colección como campo TTL.
- Puedes tener un máximo de 500 configuraciones de TTL a nivel de campo.
Eliminación de TTL
Ten en cuenta los siguientes comportamientos clave de la eliminación basada en TTL:
La eliminación mediante TTL no es un proceso instantáneo. Los documentos caducados siguen apareciendo en las consultas y solicitudes de búsqueda hasta que el proceso de TTL los elimina. El TTL intercambia la puntualidad de la eliminación por el beneficio de reducir el coste total de propiedad de las eliminaciones. Los datos suelen eliminarse en un plazo de 24 horas después de su fecha de vencimiento.
Si se aplica una política de TTL a una colección, se eliminarán en bloque todos los datos caducados según la nueva política de TTL. Ten en cuenta que esta eliminación en bloque tampoco es instantánea y depende de la cantidad de datos que haya en esa colección.
Si un documento tiene una hora de vencimiento anterior y añades una nueva política de TTL a la colección, el documento se eliminará en un plazo de 24 horas a partir de que se configure y se active la política de TTL.
El TTL no elimina necesariamente los documentos en el mismo orden que sus marcas de tiempo de vencimiento.
Las eliminaciones no se realizan de forma transaccional. Los documentos con la misma hora de vencimiento no se eliminan necesariamente al mismo tiempo. Si necesitas este comportamiento, realiza las eliminaciones con una biblioteca de cliente.
Firestore con compatibilidad con MongoDB siempre tendrá en cuenta el campo TTL más reciente para determinar la fecha de vencimiento. Por ejemplo, si se actualiza el campo TTL de un documento caducado pero aún no eliminado a una fecha posterior, el documento no caducará y se usará la nueva fecha.
Firestore con compatibilidad con MongoDB solo caduca un documento cuando el campo TTL se define como de tipo
Date and time
oBSON Date
. Deje el campo vacío o defina un valor comonull
para inhabilitar las caducidades por documento.El TTL se ha diseñado para minimizar el impacto en otras actividades de la base de datos. Las eliminaciones basadas en el TTL se tratan con una prioridad más baja. También se han implementado otras estrategias para suavizar los picos de tráfico provocados por las eliminaciones basadas en TTL.
Campos e índices TTL
Un campo TTL puede estar indexado o no. Sin embargo, como el campo TTL es una marca de tiempo, indexarlo puede afectar al rendimiento con tasas de tráfico más altas. Indexar un campo de marca de tiempo puede crear puntos de acceso, lo que no es una práctica recomendada. Los puntos de acceso son tasas altas de lectura, escritura y eliminación en un intervalo de documentos reducido.
Permisos
La principal que configura una política de TTL requiere el siguiente permiso en el proyecto:
- Para ver las políticas de TTL, se necesitan los permisos
datastore.indexes.list
ydatastore.indexes.get
. - Para modificar las políticas de TTL, se necesita el permiso
datastore.indexes.update
. - Para comprobar el estado de las operaciones de TTL, se necesitan los permisos
datastore.operations.list
ydatastore.operations.get
.
Para ver los roles que asignan estos permisos, consulta Roles de gestión de identidades y accesos de Firestore.
Antes de empezar
Antes de usar la CLI de gcloud para gestionar las políticas de TTL, usa el comando
gcloud components update
para actualizar los componentes a la versión más reciente disponible:
gcloud components update
Crear una política de TTL
Cuando creas una política de TTL, designas un campo de documento como hora de vencimiento de los documentos de una colección.
TTL usa un campo específico para identificar los documentos que se pueden eliminar.
Este campo TTL debe ser de tipo Timestamp
o BSON Date
. Puede seleccionar un campo que ya exista o designar un campo que quiera añadir más adelante.
Tenga en cuenta lo siguiente antes de definir el valor del campo TTL:
El valor del campo TTL puede ser una hora futura, actual o pasada. Si el valor es una hora del pasado, el documento se puede eliminar inmediatamente. Por ejemplo, puedes crear una política de TTL con el campo
expireAt
, que luego puedes añadir a documentos ya creados.Si se usa otro tipo de datos o no se define el valor del campo TTL, se inhabilitará el TTL del documento en cuestión.
Para crear una política de TTL, siga estos pasos:
Consola de Google Cloud
En la Google Cloud consola, ve a la página Bases de datos.
Seleccione la base de datos que necesite de la lista de bases de datos.
En el menú de navegación, haga clic en Tiempo de vida.
Haz clic enCreate Policy (Crear política).
Introduce un nombre de colección y un nombre de campo de marca de tiempo.
Haz clic en Crear.
La consola vuelve a la página Tiempo de vida. Si la operación se inicia correctamente, la página añade una entrada a la tabla de políticas de TTL. Si se produce un error, la página muestra un mensaje de error.
gcloud
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Usa el comando
firestore fields ttls update
para configurar una política de TTL. Añade la marca--async
para evitar que la CLI de gcloud espere a que se complete la operación.gcloud firestore fields ttls update ttl_field --collection-group=collection_name --enable-ttl
Duración de la habilitación de la política de TTL
Incluso en una base de datos vacía, se pueden tardar diez minutos o más en habilitar una política de TTL. Una vez que inicies una operación, cerrar la terminal no la cancelará.
Ver políticas de TTL
Para ver las políticas de TTL y sus estados, sigue estos pasos:
Consola de Google Cloud
En la Google Cloud consola, ve a la página Bases de datos.
Seleccione la base de datos que necesite de la lista de bases de datos.
En el menú de navegación, haga clic en Tiempo de vida.
La consola muestra las políticas de TTL de tu base de datos e incluye el estado de cada política.
gcloud
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Usa el comando
firestore fields ttls list
para configurar una política de TTL. El siguiente comando muestra todas las políticas de TTL.gcloud firestore fields ttls list
Para enumerar las políticas de TTL de una colección específica, utiliza el siguiente código:
gcloud firestore fields ttls list --collection-group=collection_name
Ver los detalles de la operación
Puedes usar la CLI de gcloud para ver más detalles sobre una política de TTL que esté en el estado CREATING
.
Usa el comando operations list
para ver todas las operaciones en curso y las que se han completado recientemente:
gcloud firestore operations list
La respuesta incluye una estimación del progreso de la operación.
Inhabilitar una política de TTL
Para inhabilitar una política de TTL, sigue estos pasos:
Consola de Google Cloud
En la Google Cloud consola, ve a la página Bases de datos.
Seleccione la base de datos que necesite de la lista de bases de datos.
En el menú de navegación, haga clic en Tiempo de vida.
En la tabla de políticas de TTL, busque la fila de la política de TTL. En esta fila de la tabla, haz clic en el botón Eliminar (papelera).
Haz clic en Eliminar para confirmar la operación.
La consola vuelve a la página Tiempo de vida. Si la operación se realiza correctamente, la compatibilidad de Firestore con MongoDB elimina la política de TTL de la tabla.
gcloud
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Usa el comando
firestore fields ttls update
para configurar una política de TTL. Añade la marca--async
para evitar que la CLI de gcloud espere a que se complete la operación.gcloud firestore fields ttls update ttl_field --collection-group=collection_name --disable-ttl
Monitorizar las eliminaciones de TTL
Puede usar Cloud Monitoring para ver métricas sobre las eliminaciones basadas en TTL. Firestore con compatibilidad con MongoDB proporciona las siguientes métricas para el TTL:
Tipo de métrica | Nombre de la métrica | Descripción de la métrica |
---|---|---|
firestore.googleapis.com/document/ttl_deletion_count | Número de eliminaciones por tiempo de vida |
Recuento total de documentos eliminados por las políticas de TTL. |
firestore.googleapis.com/document/ttl_expiration_to_deletion_delays | Retrasos en la eliminación por caducidad del tiempo de vida |
Tiempo transcurrido entre el momento en que un documento caducó según una política de TTL y el momento en que se eliminó. |
Para configurar un panel de control con métricas de Firestore con compatibilidad con MongoDB, consulta los artículos sobre cómo gestionar paneles de control personalizados y añadir widgets a un panel de control.