Como funciona: vida útil (TTL) do DynamoDB - Amazon DynamoDB

Como funciona: vida útil (TTL) do DynamoDB

Quando o TTL é habilitado em uma tabela do DynamoDB, é necessário identificar um nome de atributo específico que o serviço procurará ao determinar se um item está qualificado para expiração. Depois de habilitar o TTL em uma tabela, um processo de varredura por partição, executado em segundo plano, avalia de forma automática e contínua o status de expiração dos itens na tabela.

O processo de varredura, executado em segundo plano, compara a hora atual no formato de tempo do Unix epoch em segundos com o valor armazenado no atributo definido pelo usuário de um item. Se o atributo for um tipo de dados Number (o valor do atributo será uma marca de hora no formato de tempo epoch do Unix em segundos). E, se o valor da marca de hora for anterior à hora atual, mas não cinco anos ou mais (a fim de evitar a possibilidade de exclusão acidental causada por um valor de TTL mal-formado), o item será definido como expirado. Para obter detalhes sobre como formatar atributos de TTL, consulte Formatar o atributo TTL de um item. Um segundo processo em segundo plano verifica se há itens expirados e os exclui. Os dois processos ocorrem automaticamente em segundo plano, não afetam o tráfego de leitura ou gravação na tabela e não têm um custo monetário.

À medida que os itens são excluídos da tabela, duas operações em segundo plano acontecem simultaneamente:

  • Os itens são removidos de qualquer índice secundário local e índice secundário global da mesma forma que uma operação DeleteItem. Essa operação não tem nenhum custo extra.

  • Uma operação de exclusão para cada item entra no DynamoDB Stream, mas é marcada como uma exclusão do sistema e não como uma exclusão regular. Para obter mais informações sobre como usar essa exclusão do sistema, consulte Streams e vida útil do DynamoDB.

Importante
  • Dependendo do tamanho e do nível de atividade de uma tabela, a operação de exclusão real de um item expirado pode variar. Como o TTL deve ser um processo em segundo plano, a natureza da capacidade usada para expirar e excluir itens via TTL é variável (mas gratuita). O TTL geralmente exclui os itens expirados em até 48 horas após a expiração.

  • Itens que expiraram, mas ainda não foram excluídos pelo TTL, ainda aparecem em leituras, consultas e varreduras. Se você não quiser itens expirados no conjunto de resultados, deverá filtrá-los. Para isso, use uma expressão de filtro que retorne apenas itens nos quais o valor de expiração da vida útil seja maior que a hora atual no formato epoch. Para obter mais informações, consulte Expressões de filtro de Scan.

  • Os itens que passaram da expiração, mas ainda não foram excluídos poderão ser atualizados, e atualizações bem-sucedidas para alterar ou remover o atributo de expiração serão respeitadas.

É possível monitorar as taxas de TTL na guia de métricas do CloudWatch para uma tabela e ver quando e a taxa em que os itens são excluídos.


            Captura de tela do console mostrando o TTL e o CloudWatch.

Exemplo de vida útil

Por exemplo, considere uma tabela chamada SessionData que controla o histórico de sessão dos usuários. Cada item em SessionData é identificado pela chave de partição (UserName) e a chave de classificação (SessionId). Atributos adicionais, como UserName, SessionId, CreationTime e ExpirationTime controlam as informações das sessões. O atributo ExpirationTime é definido como o atributo TTL na tabela (nem todos os atributos em cada item são mostrados).

SessionData
UserName SessionId CreationTime ExpirationTime (TTL) SessionInfo
user1 74686572652773 1571820360 1571827560 {JSON Document} ...
user2 6e6f7468696e67 1571820180 1571827380 {JSON Document} ...
user3 746f2073656520 1571820923 1571828123 {JSON Document} ...
user4 68657265212121 1571820683 1571827883 {JSON Document}
user5 6e6572642e2e2e 1571820743 1571831543 {JSON Document} ...
... ... ... ... ...

Neste exemplo, cada item tem um valor de atributo ExpirationTime definido quando o item foi criado. Considere o item da tabela a seguir.

SessionData
UserName SessionId CreationTime ExpirationTime (TTL) SessionInfo
user1 74686572652773 1571820360 1571827560 {JSON Document} ...

Neste exemplo, o item CreationTime é definido como quarta-feira, 23 de outubro 08:46 UTC 2019, e o ExpirationTime é definido como 2 horas depois na quarta-feira, 23 de outubro 10:46 UTC 2019. O item expirará quando a hora atual, no formato epoch, for maior que a hora do atributo ExpirationTime. Nesse caso, o item com a chave { Username: user1, SessionId: 74686572652773} expira após às 10h46 da manhã (1571827560).