Alle Items aus DynamoDB in Node.js holen (AWS SDK v3)
Es gibt kein "select all" in DynamoDB — eine ganze Tabelle zu lesen bedeutet einen Scan, den du bis zum Ende paginierst. Jede Antwort trägt höchstens 1 MB; du schleifst und speist LastEvaluatedKey als ExclusiveStartKey zurück, bis kein Schlüssel mehr zurückkommt.
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`);Erklärung
- Die Schleife ist der Punkt — ein einzelner
Scan-Aufruf gibt NICHT die Tabelle zurück; er gibt bis zu 1 MB zurück. Nach der ersten Antwort aufzuhören ist der klassische "meinem Scan fehlen Items"-Bug. Nur ein fehlenderLastEvaluatedKeybedeutet, dass du alles gelesen hast. - Speicher —
itemshält die gesamte Tabelle. Verarbeite bei großen Tabellen jede Seite innerhalb der Schleife (in eine Datei schreiben, streamen, aggregieren), statt anzusammeln. - Schneller bei großen Tabellen: Parallel Scan — teile die Arbeit mit
Segment/TotalSegmentsauf: Führe N Worker aus, jeder scannt sein eigenes Segment mit seiner eigenen Pagination-Schleife. Gleiche Gesamtkosten, deutlich geringere Wanduhrzeit. - Kosten — ein vollständiger Scan liest (und berechnet) jedes Byte jedes Items, jedes Mal, wenn du ihn ausführst. Trimme die Antwort mit
ProjectionExpression(weniger zurückgegebene Attribute — die Lesekosten bleiben gleich), und setze keinen Scan auf einen Hot Path; dafür sind Query und Zugriffsmuster-Design da. - Gleich mitfiltern? Eine
FilterExpressionverwirft Items nachdem sie gelesen (und berechnet) wurden — siehe Scan mit einem Filter.
Visuell erledigen
Eine Tabelle zu überfliegen braucht kein Skript: Lade DynoTable herunter, um jede Tabelle in einem paginierten Raster zu durchsuchen — es blättert die Scans für dich durch, keine Schleife, die man falsch machen kann. Und bevor du scannst und zahlst, zeigt der DynamoDB-Preisrechner, was ein vollständiges Lesen deiner Tabelle tatsächlich kostet.
Verwandte Beispiele
- Alle Items in Python holen — dasselbe vollständige Lesen mit boto3s Paginator.
- Alle Items mit der AWS CLI holen — die CLI paginiert für dich.
- DynamoDB Scan in Node.js — Scannen mit einer
FilterExpression. - Parallel Scans — Segment/TotalSegments, Worker-Anzahl und wann es sich lohnt.
- Warum ist mein DynamoDB Scan langsam und teuer? — das Kostenmodell und wie man es vermeidet.
- DynamoDB ProvisionedThroughputExceededException — die ganze Tabelle zu lesen ist der klassische Weg, sie zu treffen.
- "The provided starting key is invalid" — ein verstümmelter Fortsetzungsschlüssel in der Pagination-Schleife.
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
Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.