Configurar Remoção Automática para Coleções de séries temporais (TTL)
Nesta página
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.
Habilitar Remoção Automática em uma Collection
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 })
Altere o parâmetro expireAfterSeconds
Para alterar o valor de parâmetro do expireAfterSeconds
, emita o seguinte comando collMod
:
db.runCommand({ collMod: "weather24h", expireAfterSeconds: 604801 })
Recuperar o valor atual de expireAfterSeconds
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: { ... } }, ... }, ... ] } }
Desabilitar remoção automática
Para desabilitar a remoção automática, utilize o comando collMod
para configurar o expireAfterSeconds
para off
:
db.runCommand({ collMod: "weather24h", expireAfterSeconds: "off" })
Comportamento
Momento das operações de exclusão
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.