Docs Menu
Docs Home
/
Manual de base de datos
/

Configurar la eliminación automática para las colecciones de series de tiempo (TTL)

Cuando creas un recopilación de series de tiempo, puede configurar la eliminación automática de documentos con más de una cantidad específica de segundos mediante el uso de expireAfterSeconds parámetro:

db.createCollection(
"weather24h",
{
timeseries: {
timeField: "timestamp",
metaField: "metadata",
granularity: "hours"
},
expireAfterSeconds: 86400
}
)

El umbral de expiración es el valor del campo timeField más el número de segundos especificado. Considere el siguiente documento de la colección weather24h:

{
"metadata": {"sensorId": 5578, "type": "temperature"},
"timestamp": ISODate("2021-05-18T10:00:00.000Z"),
"temp": 12
}

El documento caducaría de la base de datos a las "2021-05-19T10:00:00.000Z". Una vez que todos los documentos de un bucket hayan caducado, la tarea en segundo plano que remueve los buckets caducados remueve el bucket en la siguiente ejecución. Consulta Momento de las operaciones de borrar para obtener más información.

Para habilitar la eliminación automática de documentos de una colección de series de tiempo existente, emita el siguiente collMod comando:

db.runCommand({
collMod: "weather24h",
expireAfterSeconds: 604801
})

Para cambiar el expireAfterSeconds valor del parámetro, emita el siguiente collMod comando:

db.runCommand({
collMod: "weather24h",
expireAfterSeconds: 604801
})

Para recuperar el valor actual de,expireAfterSeconds utilice el listCollections comando:

db.runCommand( { listCollections: 1 } )

El documento de resultado contiene un documento para la colección de series de tiempo que contiene el campo options.expireAfterSeconds.

{
cursor: {
id: <number>,
ns: 'test.$cmd.listCollections',
firstBatch: [
{
name: <string>,
type: 'timeseries',
options: {
expireAfterSeconds: <number>,
timeseries: { ... }
},
...
},
...
]
}
}

Para deshabilitar la eliminación automática, use el comando collMod para expireAfterSeconds establecer off en:

db.runCommand({
collMod: "weather24h",
expireAfterSeconds: "off"
})

MongoDB no garantiza que los datos caducados se eliminen inmediatamente después de su vencimiento. Una vez caducados todos los documentos de un bucket, la tarea en segundo plano que elimina los buckets caducados lo hace en la siguiente ejecución. El tiempo máximo que un solo bucket puede cubrir se controla mediante el granularity de la colección de series temporales:

granularity
Lapso de tiempo cubierto

"seconds" (por defecto)

una hora

"minutes"

24 horas

"hours"

30 días

La tarea en segundo plano que elimina los buckets caducados se ejecuta cada 60 segundos. Por lo tanto, los documentos pueden permanecer en una colección durante el periodo comprendido entre la caducidad del documento, la caducidad de todos los demás documentos del bucket y la ejecución de la tarea en segundo plano.

Debido a que la duración de la operación de eliminación depende de la carga de trabajo de su instancia de mongod, los datos vencidos pueden existir durante algún tiempo más allá del período de 60 segundos entre ejecuciones de la tarea en segundo plano.

Volver

Listar colecciones de series temporales en una base de datos

En esta página