Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/

Configurar Remoção Automática para Coleções de séries temporais (TTL)

Nesta página

  • Habilitar Remoção Automática em uma Collection
  • Alterar o expireAfterSeconds Parâmetro
  • Recuperar o valor atual de expireAfterSeconds
  • Desabilitar remoção automática
  • Comportamento
  • Momento das operações de exclusão

Ao criar uma coleção de séries temporais, você pode configurar a remoção automática de documentos com mais de um número especificado de segundos usando o parâmetro expireAfterSeconds:

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

O limite de expiração é o valor do campo timeField mais o número especificado de segundos. Considere o seguinte documento na collection weather24h:

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

O documento expiraria no banco de dados em "2021-05-19T10:00:00.000Z". Quando todos os documentos em um bucket expirarem, a tarefa de plano de fundo que remove os buckets expirados removerá o bucket durante a próxima execução. Consulte Tempo das operações de exclusão para obter mais informações.

Para habilitar a remoção automática de documentos de uma coleção de séries temporais existente, emita o seguinte comando collMod:

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

Para alterar o valor de parâmetro do expireAfterSeconds, emita o seguinte comando collMod:

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

Para recuperar o valor atual de expireAfterSeconds, utilize o comando listCollections:

db.runCommand( { listCollections: 1 } )

O documento de resultado contém um documento para a coleção de séries temporais que contém o campo options.expireAfterSeconds.

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

Para desabilitar a remoção automática, utilize o comando collMod para configurar o expireAfterSeconds para off:

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

O MongoDB não garante que os dados expirados serão excluídos imediatamente após a expiração. Quando todos os documentos em um bucket expirarem, a tarefa de background que remove os buckets expirados removerá o bucket durante a próxima execução. O período máximo de tempo que um único bucket pode cobrir é controlado pela granularity da coleção de séries temporais:

granularity
Intervalo de tempo coberto

"seconds" (padrão)

uma hora

"minutes"

24 horas

"hours"

30 dias

A tarefa em segundo plano que remove os buckets expirados é executada a cada 60 segundos. Portanto, os documentos podem permanecer em uma coleção durante o período entre a expiração do documento, a expiração de todos os outros documentos no bucket e a execução da tarefa em segundo plano.

Como a duração da operação de remoção depende da carga de trabalho de sua instância de mongod, os dados expirados podem existir por algum tempo além do período de 60 segundos entre as execuções da tarefa em segundo plano.

Voltar

Listar coleções de séries temporais em um Banco de Dados