Principiante6 min di lettura

Come ottenere la dimensione e il conteggio degli item di una tabella DynamoDB

Non c'è alcun SELECT COUNT(*) da puntare a basso costo su una tabella DynamoDB. DynamoDB ti dà due risposte molto diverse a "quanto è grande questa tabella?": una stima gratuita che può essere vecchia fino a sei ore, e un conteggio esatto che costa una lettura completa della tabella. La maggior parte della confusione da "perché il mio conteggio di item è sbagliato?" nasce dallo scegliere l'una aspettandosi il comportamento dell'altra.

Come ottengo il conteggio degli item e la dimensione di una tabella DynamoDB?

Chiama DescribeTable: restituisce ItemCount e TableSizeBytes gratis, ma "DynamoDB updates this value approximately every six hours. Recent changes might not be reflected in this value" (riferimento API AWS). Per un numero esatto, esegui uno Scan con --select COUNT — restituisce solo il conteggio, ma legge (e fattura) ogni item. Una GUI come DynoTable mostra le stime su ogni tabella e può calcolare conteggi esatti su richiesta.

VuoiUsaCostoFreschezza
Conteggio + dimensione a spanne, gratisDescribeTablenessuno (chiamata di metadati)~6 h di ritardo
Conteggio totale esattoScan con Select COUNTlegge l'intera tabellalive
Conteggio esatto per una chiaveQuery con Select COUNTlegge gli item corrispondentilive
Conteggio di un sottoinsieme filtratoScan/Query + filtro + COUNTlegge tutto ciò che scansionalive

Metodo 1: DescribeTable (gratis, ~6 h di ritardo)

DescribeTable è una lettura di metadati — non legge alcun item, quindi non consuma read capacity, e porta i due numeri che cerchi:

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

Entrambi arrivano con la stessa avvertenza, testuale dal riferimento API: "DynamoDB updates this value approximately every six hours. Recent changes might not be reflected in this value." Quindi una tabella che hai appena caricato in bulk può riportare ItemCount: 0 per ore — il numero non è sbagliato, è un'istantanea.

La stessa risposta porta anche cifre per-indice: ogni GSI e LSI riporta i propri ItemCount e IndexSizeBytes con la stessa cadenza di sei ore. Confrontare il conteggio di item di un con quello della tabella è un bel controllo di salute gratuito — ti dice quanti item portano davvero la chiave dell'indice.

Metodo 2: conteggio esatto con Scan + Select COUNT

Quando "circa, com'era stamattina" non basta, conta per davvero:

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

Fatti da sapere prima di eseguirlo, tutti dal riferimento API di Scan:

  • COUNT "returns the number of matching items, rather than the matching items themselves" — meno traffico di rete, ma "this uses the same quantity of read capacity units as getting the items". Un conteggio esatto di una tabella da 100 GB è una lettura da 100 GB sulla tua fattura.
  • Una singola richiesta si ferma comunque a 1 MB di dati scansionati; il Count della risposta "only return[s] the count of items specific to a single scan request". La CLI segue LastEvaluatedKey e somma le pagine per te; nel codice SDK cicli e sommi — vedi paginazione.
  • Su una tabella grande, dividi il lavoro con uno scan parallelo (--segment / --total-segments) e somma i conteggi per-segmento.

Contare un sottoinsieme

  • Item sotto una partition key: Query con --select COUNT — legge solo gli item di quella chiave, quindi è economico quanto i dati sono piccoli. È il modo giusto di contare una .
  • Item che corrispondono a un filtro: aggiungi una FilterExpression — ma ricorda che il conteggio che ti viene fatturato è ScannedCount, non Count: DynamoDB filtra dopo la lettura, quindi "conta gli ordini archiviati" via scan filtrato paga per ogni ordine. Uno ScannedCount alto accanto a un Count piccolo è la firma di un filtro che vuole diventare un GSI — vedi strategie di filtro.

Per domande più ricche — conteggi per status, somme, medie — DynamoDB non ha alcun GROUP BY; i workaround vivono in count, sum & aggregate.

Dimensione tabella e conteggio item in DynoTable

DynoTable mette entrambe le risposte dove stai già guardando. Ogni tabella aperta ha un pulsante Stats (l'icona a grafico a barre) nella toolbar del tab; il pannello mostra:

  • Primary key e indici secondari — la forma della tabella a colpo d'occhio.
  • Items · Size · Avg item — le stime DescribeTable di DynamoDB stessa, etichettate come stime, con l'avvertenza delle sei ore a un hover di distanza.
  • Index table — uno scan di campionamento a un click che scopre ogni attributo che i tuoi item portano davvero (inclusi i percorsi annidati come commonData.status), con progresso live. Alimenta l'autocomplete dei campi e un export inferito TypeScript / Zod / JSON Schema, e comporta normali costi di lettura DynamoDB — l'app lo dice in anticipo.
Il pannello Table stats in DynoTable: chiavi e indici, la riga di stime Items / Size / Avg item, e la lista dei campi indicizzati.
Il pannello Table stats in DynoTable: chiavi e indici, la riga di stime Items / Size / Avg item, e la lista dei campi indicizzati.

E per i numeri esatti, l'assistente AI integrato calcola conteggi, somme e suddivisioni per gruppo sull'intera tabella su richiesta — legge ogni item corrispondente invece di campionare una pagina, e chiede prima di eseguire qualsiasi cosa che costi read capacity.

FAQ

Perché il conteggio di item di DynamoDB è sbagliato? Non è sbagliato — è vecchio. ItemCount (e TableSizeBytes) si aggiornano "approximately every six hours", quindi scritture ed eliminazioni recenti non sono ancora riflesse. La panoramica tabella della console mostra gli stessi numeri di DescribeTable, con lo stesso ritardo.

Come conto le righe in DynamoDB in modo esatto? aws dynamodb scan --table-name X --select COUNT — la CLI sfoglia l'intera tabella e somma i conteggi per-pagina. È esatto ma fattura la stessa read capacity del recuperare ogni item.

DescribeTable è gratis? Non consuma read capacity — è una chiamata di metadati, non una lettura di dati, quindi interrogarla in polling non toccherà il throughput della tua tabella.

Come trovo la dimensione di un singolo item? DynamoDB mette a metro per dimensione dell'item (arrotondata per eccesso per 1 KB scritto / 4 KB letto). Incolla un item nel calcolatore di dimensione item per vedere la sua dimensione fatturata, e vedi il limite di 400 KB per item per il tetto.

Il conteggio di item influisce sulla mia fattura? Lo storage è fatturato per TableSizeBytes, e le richieste per dimensione dell'item × numero di richieste — non per conteggio di item direttamente. Inserisci i numeri della tua tabella nel calcolatore di prezzi per vedere il quadro mensile tra le modalità on-demand e provisioned.

Vuoi la forma della tabella, le stime e i campi indicizzati a un click di distanza? Scarica DynoTable e apri il pannello Stats su qualsiasi tabella.

Aggiornato