Ottenere tutti gli Item da DynamoDB in Node.js (AWS SDK v3)
In DynamoDB non esiste un "select all" — leggere un'intera tabella significa uno Scan che pagini fino alla fine. Ogni risposta trasporta al massimo 1 MB; iteri, reimmettendo LastEvaluatedKey come ExclusiveStartKey, finché non torna più alcuna chiave.
Code
import {DynamoDBClient, ScanCommand} from '@aws-sdk/client-dynamodb';
const client = new DynamoDBClient({region: 'us-east-1'});
const items = [];
let lastEvaluatedKey;
do {
const response = await client.send(
new ScanCommand({
TableName: 'Music',
ExclusiveStartKey: lastEvaluatedKey
})
);
items.push(...(response.Items ?? []));
lastEvaluatedKey = response.LastEvaluatedKey;
} while (lastEvaluatedKey);
console.log(`Table holds ${items.length} items`);Spiegazione
- Il ciclo è il punto centrale — una singola chiamata
ScanNON restituisce la tabella; restituisce fino a 1 MB. Fermarsi dopo la prima risposta è il classico bug "al mio scan mancano degli Item". Solo unLastEvaluatedKeyassente significa che hai letto tutto. - Memoria —
itemscontiene l'intera tabella. Per tabelle grandi, elabora ogni pagina all'interno del ciclo (scrivi su file, stream, aggrega) invece di accumulare. - Più veloce sulle tabelle grandi: scan parallelo — dividi il lavoro con
Segment/TotalSegments: esegui N worker, ciascuno che scansiona il proprio segmento con il proprio ciclo di paginazione. Stesso costo totale, tempo reale molto inferiore. - Costo — uno scan completo legge (e fattura) ogni byte di ogni Item, ogni volta che lo esegui. Riduci la risposta con
ProjectionExpression(meno attributi restituiti — il costo di lettura resta lo stesso), e non mettere uno scan su un percorso critico; a questo servono Query e la progettazione dei pattern di accesso. - Vuoi filtrare già che ci sei? Una
FilterExpressionscarta gli Item dopo che sono stati letti (e fatturati) — vedi Scan con un filtro.
Fallo visivamente
Dare un'occhiata a una tabella non richiede uno script: scarica DynoTable per sfogliare qualsiasi tabella in una griglia paginata — pagina gli scan per te, senza cicli da sbagliare. E prima di fare scan-e-pagare, il calcolatore dei prezzi DynamoDB mostra quanto costa davvero una lettura completa della tua tabella.
Esempi correlati
- Ottenere tutti gli Item in Python — la stessa lettura completa con il paginator di boto3.
- Ottenere tutti gli Item con la AWS CLI — la CLI pagina per te.
- DynamoDB Scan in Node.js — scansione con una
FilterExpression. - Scan paralleli — Segment/TotalSegments, numero di worker e quando vale la pena.
- Perché il mio DynamoDB Scan è lento e costoso? — il modello di costo e come evitarlo.
- DynamoDB ProvisionedThroughputExceededException — leggere l'intera tabella è il modo classico per incapparci.
- "The provided starting key is invalid" — una chiave di ripresa malformata nel ciclo di paginazione.
References
- Scan — Amazon DynamoDB API Reference
- Scanning tables in DynamoDB — Amazon DynamoDB Developer Guide
- DynamoDB read and write operations (capacity unit consumption) — Amazon DynamoDB Developer Guide
Ultima verifica 2026-07-13 rispetto alla documentazione ufficiale AWS collegata sopra.