Come si contano gli Item in DynamoDB?
Usa Select: 'COUNT' su una Query o uno Scan per contare gli Item corrispondenti senza restituirli. Ogni risposta conta solo fino a 1 MB scansionato, quindi devi paginare con LastEvaluatedKey e sommare i valori di Count per un totale completo. Per un totale approssimativo della tabella, leggi ItemCount da DescribeTable. Per un conteggio raggruppato — o una SUM/AVG su una colonna — il SQL Workbench di DynoTable esegue COUNT e GROUP BY come una sola query e gestisce la paginazione al posto tuo.
Contare esattamente gli Item corrispondenti
Imposta Select su COUNT in una Query (per una chiave di partizione) o in uno Scan (intera tabella). La risposta restituisce Count e ScannedCount ma nessun dato degli Item. Se i dati scansionati superano 1 MB, l'operazione si ferma e restituisce LastEvaluatedKey — continua a chiamare e a sommare Count finché non è assente. Nota che contare non è più economico che leggere: COUNT consuma la stessa capacità di lettura che consumerebbe restituire gli Item.
Count vs ScannedCount
Count— gli Item che corrispondono alle tue condizioni di chiave/filtro in questa pagina.ScannedCount— gli Item esaminati prima del filtro. Una filter expression restringe i risultati ma non riduce ciò che è stato scansionato (né il suo costo).
COUNT non è uno sconto, misurato
"Contare costa quanto leggere" è facile da affermare e facile da mettere in dubbio, quindi eccolo su una tabella che contiene 40 Item da circa 3 KB ciascuno (120.700 byte in totale), con ogni chiamata effettuata con ReturnConsumedCapacity: 'TOTAL':
| Richiesta | Count | ScannedCount | ConsumedCapacity |
|---|---|---|---|
Query con Select: 'COUNT' | 40 | 40 | 15 |
Query che restituisce gli Item | 40 | 40 | 15 |
Scan, Select: 'COUNT', filtro che ne prende metà | 20 | 40 | 15 |
La terza riga è quella da guardare. Il filtro dimezza Count, lascia stare ScannedCount e muove il conto di zero.
15 è il numero che avresti previsto: 120.700 byte arrotondano a 30 unità di lettura da quattro kilobyte, dimezzate perché una Query è a coerenza eventuale se non chiedi diversamente.
L'approssimazione economica
DescribeTable restituisce ItemCount, una stima a livello di tabella aggiornata circa ogni sei ore. È gratis e istantanea, ma non in tempo reale — buona per le dashboard, non per i totali esatti.
Un avvertimento se fai i test contro DynamoDB Local: aggiorna ItemCount immediatamente. Scrivere 40 Item e chiamare DescribeTable lì restituisce subito 40. Il servizio reale no, quindi una logica sulla freschezza che passa in locale può essere sbagliata di sei ore in produzione.
Contare e aggregare con DynoTable
L'API grezza ti dà COUNT ma non GROUP BY, SUM o AVG — raggruppare e sommare normalmente avviene nel codice della tua applicazione. Il SQL Workbench di DynoTable li aggiunge: scrivi SELECT COUNT(*), SUM(total) o un conteggio raggruppato, e lui esegue il loop di paginazione al posto tuo, affinando il numero man mano che le pagine arrivano. Legge comunque attraverso DynamoDB, quindi vale lo stesso costo in capacità di lettura — ma scrivi una query invece di un loop, e ottieni risultati raggruppati e sommati che l'API non può restituire direttamente.
Approfondisci
Leggi contare, sommare e aggregare in DynamoDB e costruisci query di conteggio con il Generatore di espressioni. Scarica DynoTable per eseguire conteggi e aggregati (COUNT, SUM, GROUP BY) sulle tue tabelle.
Riferimenti
- Query — Amazon DynamoDB API Reference
- Scan — Amazon DynamoDB API Reference
- TableDescription — Amazon DynamoDB API Reference
Ultima verifica 2026-07-13 rispetto alla documentazione ufficiale AWS collegata sopra.
Le cifre di capacità sono state riprodotte il 2026-07-28 contro DynamoDB Local 3.3.0 (amazon/dynamodb-local:latest) tramite @aws-sdk/client-dynamodb 3.1095.0. DynamoDB Local non è il servizio; la divergenza su ItemCount notata sopra è uno dei punti in cui differiscono.