DEV Community

Bruno Santos
Bruno Santos

Posted on

TTL em documentos com MongoDB

O objetivo deste artigo é a demonstração de como podemos inserir documentos com tempo de vida (TTL — Time to Live ) no MongoDB.

Em alguns cenários a criação de documentos com tempo de vida pode ser necessário, como por exemplo, registros de logs ou de eventos. Em alguns bancos para efetuar a limpeza desses documentos seria necessário a criação de uma rotina para efetuar a exclusão desses dados após um determinado tempo. No MongoDB podemos utilizar os índices TTL para efetuar a exclusão automática desses dados.

Índices

Os índices são uma das ferramentas de otimização mais conhecidas e utilizadas para otimização de acesso, através dele o número de documentos a serem inspecionados passa a ser menor.

Para uma consulta mais detalhada sobre índices e seus tipos no MongoDB, podemos utilizar sua documentação disponível em Índices - MongoDB.

Índices TTL

De acordo com a documentação do MongoDB, índices TTL são índices especiais de campo único que são usados para remover automaticamente documentos de uma coleção após uma determinada quantidade de tempo ou em um horário de relógio específico.

Criando um índice TTL

Para efetuar a criação de um índice TTL no MongoDB vamos utilizar como modelo a estrutura abaixo.

public class EventLog
{
    public string Name { get; set; }
    public string Description { get; set; }
    public string UserName { get; set;}
    public DateTime Date { get; set; }
    public DateTime Expiration { get; set; }
}
Enter fullscreen mode Exit fullscreen mode

A partir do modelo acima, ao inserir um documento no Mongo vamos utilizar o campo **Expiration **como chave a ser utilizada para a exclusão automática.

O script abaixo é responsável pela criação do índice TTL na coleção eventLog.

db.eventlog
  .createIndex( { "Expiration": 1 }, { expireAfterSeconds: 30} )
Enter fullscreen mode Exit fullscreen mode

Abaixo temos o documento que será persistido no nosso banco.

{
    "Name" : "Event Log 123",
    "Description" : "Description event log",
    "UserName" : "BH",
    "Date" : ISODate("2023-04-26T19:00:00.00+0000"),
    "Expiration" : ISODate("2023-04-26T20:00:00.00+0000"),
}
Enter fullscreen mode Exit fullscreen mode

Comportamento

A expiração do documento ocorrerá após o número específico de segundos ter passado desde o valor do campo indexado, no nosso caso o valor do campo **Expiration + valor de expireAfterSeconds **utilizado na criação do index.

Para o exemplo de índice e registro que criamos, a expiração do registro iria ocorrer após as “2023–04–26T20:00:30.00+0000”.

Informações adicionais

Podemos criar um índice com o campo **expireAfterSeconds **igual a 0, com isso o documento terá sua expiração logo após o horário atual ser igual ao campo do documento utilizado como referência.

Se o campo for uma matriz que contenha mais valores do tipo data, será utilizado o menor valor como parâmetro para calcular o limite de expiração.

Se o campo do documento não for uma data ou uma matriz que contenha um ou mais valores do tipo data, o documento não será excluído.

Referências

Indexes - MongoDB Manual
Índices TTL - MongoDB

Top comments (0)