Iniciante6 min de leitura

Como Obter o Tamanho e a Contagem de Itens de uma Tabela DynamoDB

Não existe um SELECT COUNT(*) que você possa apontar de forma barata para uma tabela DynamoDB. O DynamoDB te dá duas respostas muito diferentes para "quão grande é esta tabela?": uma estimativa gratuita que pode estar até seis horas defasada, e uma contagem exata que custa uma leitura completa da tabela. A maior parte da confusão de "por que minha contagem de itens está errada?" é escolher uma esperando o comportamento da outra.

Como obtenho a contagem de itens e o tamanho de uma tabela DynamoDB?

Chame o DescribeTable: ele retorna ItemCount e TableSizeBytes de graça, mas "o DynamoDB atualiza este valor aproximadamente a cada seis horas. Mudanças recentes podem não estar refletidas neste valor" (referência da API da AWS). Para um número exato, rode um Scan com --select COUNT — ele retorna apenas a contagem, mas lê (e cobra) cada item. Uma GUI como o DynoTable mostra as estimativas em cada tabela e pode computar contagens exatas sob demanda.

Você querUseCustoFrescor
Contagem + tamanho de bolso, grátisDescribeTablenenhum (chamada de metadados)~6 h defasado
Contagem total exataScan com Select COUNTlê a tabela inteiraao vivo
Contagem exata para uma chaveQuery com Select COUNTlê os itens correspondentesao vivo
Contagem de um subconjunto filtradoScan/Query + filtro + COUNTlê tudo o que foi escaneadoao vivo

Método 1: DescribeTable (grátis, ~6 h defasado)

O DescribeTable é uma consulta de metadados — ele não lê nenhum item, então não consome capacidade de leitura, e carrega os dois números que você procura:

aws dynamodb describe-table --table-name Orders \
  --query 'Table.[ItemCount, TableSizeBytes]'

Ambos vêm com a mesma ressalva, literalmente da referência da API: "O DynamoDB atualiza este valor aproximadamente a cada seis horas. Mudanças recentes podem não estar refletidas neste valor." Então uma tabela que você acabou de carregar em massa pode reportar ItemCount: 0 por horas — o número não está errado, é um snapshot.

A mesma resposta também carrega números por índice: cada GSI e LSI reporta seu próprio ItemCount e IndexSizeBytes na mesma cadência de seis horas. Comparar a contagem de itens de um com a da tabela é um belo health check gratuito — ele te diz quantos itens realmente carregam a chave do índice.

Método 2: contagem exata com Scan + Select COUNT

Quando "aproximadamente, no estado desta manhã" não é bom o suficiente, conte de verdade:

aws dynamodb scan --table-name Orders --select COUNT

Fatos para saber antes de rodar, todos da referência da API de Scan:

  • COUNT "retorna o número de itens correspondentes, em vez dos próprios itens correspondentes" — menos tráfego de rede, mas "isso usa a mesma quantidade de unidades de capacidade de leitura que buscar os itens". Uma contagem exata de uma tabela de 100 GB é uma leitura de 100 GB na sua fatura.
  • Uma única requisição ainda para em 1 MB de dados escaneados; o Count da resposta "retorna apenas a contagem de itens específica de uma única requisição de scan". A CLI segue o LastEvaluatedKey e soma as páginas para você; em código de SDK você faz o loop e soma — veja paginação.
  • Em uma tabela grande, divida o trabalho com um parallel scan (--segment / --total-segments) e some as contagens por segmento.

Contando um subconjunto

  • Itens sob uma chave de partição: Query com --select COUNT — lê apenas os itens daquela chave, então é tão barato quanto os dados são pequenos. Este é o jeito certo de contar uma .
  • Itens que batem com um filtro: adicione uma FilterExpression — mas lembre que a contagem pela qual você é cobrado é o ScannedCount, não o Count: o DynamoDB filtra depois de ler, então "contar os pedidos arquivados" via scan filtrado paga por cada pedido. Um ScannedCount alto ao lado de um Count pequeno é a assinatura de um filtro que quer ser um GSI — veja estratégias de filtragem.

Para perguntas mais ricas — contagens por status, somas, médias — o DynamoDB não tem GROUP BY algum; as soluções alternativas vivem em count, sum e agregações.

Tamanho de tabela e contagem de itens no DynoTable

O DynoTable coloca as duas respostas onde você já está olhando. Cada tabela aberta tem um botão Estatísticas (o ícone de gráfico de barras) na barra de ferramentas da aba; o painel mostra:

  • Chave primária e índices secundários — o formato da tabela num relance.
  • Itens · Tamanho · Item médio — as próprias estimativas de DescribeTable do DynamoDB, rotuladas como estimativas, com a ressalva das seis horas a um hover de distância.
  • Indexar tabela — um scan de amostragem de um clique que descobre cada atributo que seus itens realmente carregam (incluindo caminhos aninhados como commonData.status), com progresso ao vivo. Ele alimenta o autocomplete de campos e um export inferido de TypeScript / Zod / JSON Schema, e incorre em custos normais de leitura do DynamoDB — o app avisa isso de antemão.
O painel Estatísticas da tabela no DynoTable: chaves e índices, a linha de estimativas Itens / Tamanho / Item médio, e a lista de campos indexados.
O painel Estatísticas da tabela no DynoTable: chaves e índices, a linha de estimativas Itens / Tamanho / Item médio, e a lista de campos indexados.

E para os números exatos, o assistente de IA embutido computa contagens, somas e quebras por grupo sobre a tabela inteira sob demanda — ele lê cada item correspondente em vez de amostrar uma página, e pergunta antes de rodar qualquer coisa que custe capacidade de leitura.

FAQ

Por que minha contagem de itens do DynamoDB está errada? Ela não está errada — está defasada. ItemCount (e TableSizeBytes) se atualizam "aproximadamente a cada seis horas", então escritas e exclusões recentes ainda não estão refletidas. A visão geral de tabela do console mostra os mesmos números de DescribeTable, com a mesma defasagem.

Como conto linhas no DynamoDB exatamente? aws dynamodb scan --table-name X --select COUNT — a CLI pagina pela tabela inteira e soma as contagens por página. É exato, mas cobra a mesma capacidade de leitura que buscar cada item.

O DescribeTable é grátis? Ele não consome capacidade de leitura — é uma chamada de metadados, não uma leitura de dados, então fazer polling dele não toca o throughput da sua tabela.

Como descubro o tamanho de um item? O DynamoDB mede por tamanho de item (arredondado para cima por 1 KB escrito / 4 KB lido). Cole um item na calculadora de tamanho de item para ver seu tamanho cobrado, e veja o limite de 400 KB por item para o teto.

A contagem de itens afeta minha fatura? O armazenamento é cobrado por TableSizeBytes, e as requisições por tamanho de item × número de requisições — não pela contagem de itens diretamente. Coloque os números da sua tabela na calculadora de preços para ver o retrato mensal entre os modos on-demand e provisionado.

Quer o formato da tabela, as estimativas e os campos indexados a um clique de distância? Baixe o DynoTable e abra o painel Estatísticas em qualquer tabela.

Atualizado