Ambil Semua Item dari DynamoDB di Node.js (AWS SDK v3)
Membaca seluruh tabel di SDK v3 berarti melakukan paginasi sebuah Scan sampai habis. Setiap respons dibatasi 1 MB, dan Anda mengumpankan LastEvaluatedKey kembali sebagai ExclusiveStartKey sampai salah satunya berhenti datang (cara kerja cursor DynamoDB).
Loop di bawah ditulis dengan tangan supaya cursor-nya terlihat. Di kode sungguhan Anda akan memakai paginateScan, yang sudah disertakan SDK.
Kode
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`);Penjelasan
paginateScansudah melakukan ini —import {paginateScan} from '@aws-sdk/client-dynamodb', lalufor await (const page of paginateScan({client}, {TableName: 'Music'})). Ia dihasilkan dari tiga field cursor yang sama yang dipakai loop di atas secara manual (ExclusiveStartKey,LastEvaluatedKey,Limit), jadi tak ada perilaku yang berubah saat Anda beralih.- Hanya
LastEvaluatedKeyyang tidak ada yang berarti selesai — respons dengan nolItemsdan sebuah cursor itu normal, bukan tabel kosong. Berhenti padaItems.length === 0adalah bug baris-hilang klasik, dan sebuahFilterExpressionmembuat halaman kosong jadi rutin alih-alih langka. Limitmenghitung item yang dievaluasi per panggilan, bukan total item — ia adalah field ketiga yang dikendalikan paginator, dan baik ia maupunpageSizemilik paginator tidak membatasi ukuran array yang akhirnya Anda pegang.ExclusiveStartKey: undefinedpada iterasi pertama tidak masalah — serializer membuang member yang undefined, jadi iterasi pertama tak butuh perlakuan khusus.itemstumbuh sebesar tabelnya — proses setiap halaman di dalam loop lalu lepaskan (tulis, stream, agregasi) kecuali Anda tahu tabelnya kecil. Menumpuknya hanya berjarak satu pertumbuhan tabel dari crash kehabisan memori.- Sebuah scan menagih setiap byte yang dibacanya, pada setiap kali jalan —
ProjectionExpressionmengecilkan apa yang melintasi jaringan dan bukan tagihannya (mengapa), dan sebuahFilterExpressionmembuang item setelah item itu dibaca dan ditagih (Scan dengan filter). Di jalur panas, yang Anda inginkan adalah Query. - Pecah dengan
Segment/TotalSegments— N worker async, masing-masing mengendalikan cursor-nya sendiri atas irisannya sendiri, semuanya pada satu client bersama. Node akan senang menjalankannya secara bersamaan; biaya bacanya tidak berubah, hanya waktu dindingnya (kapan itu sepadan).
Lakukan secara visual
Query builder DynamoDB menghasilkan seluruh program ini, termasuk loop paginasinya, dari sebuah formulir, dalam SDK v3 dan tujuh target lainnya.
DynoTable melakukan paginasi tabel live untuk Anda dalam grid yang bisa di-scroll tanpa batas, dan mengekspor Scan di balik grid itu sebagai kode yang siap dijalankan. Unduh DynoTable.
Contoh terkait
- Ambil semua item di Python — pembacaan penuh yang sama dengan paginator boto3.
- Ambil semua item dengan AWS CLI — CLI melakukan paginasi untuk Anda.
- DynamoDB Scan di Node.js — melakukan scan dengan sebuah
FilterExpression. - Parallel scan — Segment/TotalSegments, jumlah worker, dan kapan perlu repot.
- Mengapa Scan DynamoDB saya lambat dan mahal? — model biayanya dan cara menghindarinya.
- DynamoDB ProvisionedThroughputExceededException — membaca seluruh tabel adalah cara klasik untuk kena error ini.
- "The provided starting key is invalid" — resume key yang rusak di dalam loop paginasi.
Referensi
- 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
- [
paginateScan— AWS SDK for JavaScript v3 source](https://github.com/aws/aws-sdk-js-v3/blob/main/the client-dynamodb ScanPaginator module)
Terakhir diverifikasi 2026-07-28 terhadap dokumentasi resmi AWS yang ditautkan di atas.