O DynamoDB suporta TTL?

Sim. O DynamoDB suporta Time to Live (TTL). Você designa um atributo Number que contém um timestamp de expiração em epoch Unix, em segundos; o DynamoDB então remove os itens expirados em segundo plano — normalmente dentro de alguns dias após a expiração — sem custo extra e sem consumir capacidade de escrita. Itens expirados mas ainda não excluídos podem continuar aparecendo em leituras até serem removidos.

Como habilitar

Ative o TTL para a tabela e nomeie o atributo que guarda a expiração. Esse atributo precisa ser um Number armazenando um timestamp em epoch Unix em segundos (não em milissegundos). Itens cujo valor está no passado tornam-se elegíveis para exclusão.

O que esperar

  • Gratuito — a exclusão automática não consome unidades de capacidade de escrita. Fazer a mesma limpeza você mesmo custa uma unidade de escrita por item: dez milhões de itens expirados de 1 KB são dez milhões de unidades de escrita, US$6,25 no on-demand em us-east-1, mais cerca de US$1,64 para cada scan completo sobre uma tabela de 100 GB para encontrá-los. (Uma exceção: em uma tabela global, a exclusão replicada para cada outra Região consome, sim, capacidade de escrita replicada lá.)
  • Não é instantâneo — o DynamoDB normalmente remove os itens expirados dentro de alguns dias após a expiração.
  • Ainda legíveis — até serem fisicamente excluídos, itens expirados podem aparecer em leituras, consultas e scans, então filtre-os se a exatidão importar.

O jeito como ele silenciosamente nunca dispara

O DynamoDB não valida o atributo para o qual você apontou o TTL. Estas duas escritas retornaram HTTP 200 em uma tabela com TTL habilitado em expiresAt, e nenhum dos dois itens vai expirar algum dia:

{"pk": {"S": "sess#1"}, "expiresAt": {"S": "1790812800"}}
{"pk": {"S": "sess#2"}, "expiresAt": {"N": "1790812800000"}}

A primeira armazena o timestamp como String. A AWS é explícita ao dizer que "items with a TTL attribute that is not a Number type are ignored by the TTL process", e nada te avisa no momento da escrita, no momento da habilitação nem depois.

A segunda é a que de fato acontece, porque o tipo está certo e o valor veio de Date.now(). 1790812800000 é 1º de outubro de 2026 em milissegundos. Lido como segundos, que é o único jeito como o TTL o lê, esse timestamp cai no ano 58718. O item está bem formado, é consultável, é cobrado como armazenamento e está agendado para expirar daqui a cinquenta e seis mil anos.

Nada na API expõe nenhum desses dois erros, então a checagem precisa acontecer antes de você escrever. Nosso conversor de TTL trata qualquer valor acima de 1e12 como milissegundos por essa razão, e mostra a data para a qual o valor resolve.

Usos comuns

Registros de sessão, tokens de verificação e resultados cacheados que devem se limpar sozinhos — os casos de uso clássicos de TTL. Combine com o DynamoDB Streams para reagir às exclusões.

Aprofunde-se

Leia o guia de TTL do DynamoDB e DynamoDB Streams. Baixe o DynoTable para visualizar e definir atributos de TTL.

Referências

Verificado pela última vez em 2026-07-13 contra a documentação oficial da AWS vinculada acima; TTL.html reconferido em 2026-07-28.

As duas escritas acima foram executadas em 2026-07-28 contra o DynamoDB Local 3.3.0 via @aws-sdk/client-dynamodb 3.1095.0 e foram aceitas com HTTP 200. Os custos de limpeza foram calculados a partir das taxas on-demand de us-east-1 na nossa tabela de preços da AWS sincronizada.

Trabalhe com o DynamoDB sem o Console

Um cliente desktop rápido para DynamoDB que roda o SQL de verdade que o DynamoDB não consegue — JOINs, GROUP BY, agregações — com edição visual e um agente de IA com suas próprias chaves do Bedrock.

Teste grátis de 30 dias, sem cartão de crédito — depois o plano Grátis sem limite de tempo.