DynamoDB BatchGetItem di Node.js (AWS SDK v3)
BatchGetItem mengambil hingga 100 item berdasarkan primary key dalam satu request (maksimum 16 MB). Di AWS SDK v3 Anda mengirim BatchGetItemCommand dengan map RequestItems dari tabel → key — dan Anda harus melakukan loop pada UnprocessedKeys, karena sebuah batch secara sah bisa mengembalikan hanya sebagian dari yang Anda minta.
Code
import {BatchGetItemCommand, DynamoDBClient} from '@aws-sdk/client-dynamodb';
const client = new DynamoDBClient({region: 'us-east-1'});
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
let requestItems = {
Music: {
Keys: [
{Artist: {S: 'Arturo Sandoval'}, SongTitle: {S: 'Cubano Chant'}},
{Artist: {S: 'Arturo Sandoval'}, SongTitle: {S: 'A Mis Abuelos'}},
{Artist: {S: 'Ella Fitzgerald'}, SongTitle: {S: 'Misty'}}
]
}
};
const items = [];
let attempt = 0;
do {
const response = await client.send(new BatchGetItemCommand({RequestItems: requestItems}));
items.push(...(response.Responses?.Music ?? []));
// A partial result is NOT an error: throttling, a >16 MB response, or an
// internal failure returns the leftovers in UnprocessedKeys. Retry them
// with exponential backoff.
requestItems = response.UnprocessedKeys;
if (requestItems && Object.keys(requestItems).length > 0) {
attempt += 1;
await sleep(Math.min(100 * 2 ** attempt, 5000));
}
} while (requestItems && Object.keys(requestItems).length > 0);
console.log(`Fetched ${items.length} items`);Penjelasan
RequestItems— map dari nama tabel →{ Keys: [...] }; satu request bisa mencakup beberapa tabel. Setiap key harus berupa primary key lengkap (partition + sort untuk key komposit). Lebih dari 100 key, atau key yang sama dua kali, gagal denganValidationException.Responses— map dari nama tabel → item yang ditemukan. Item kembali dalam urutan yang tidak tertentu, dan key yang tidak ada cukup tidak muncul — cocokkan hasil dengan permintaan berdasarkan atribut key-nya.UnprocessedKeys— loop retry di atas bukan opsional. Jika response melewati 16 MB, throughput habis, atau sebuah pembacaan partition melewati 1 MB, DynamoDB mengembalikan sisanya di sini dalam bentukRequestItems, siap dimasukkan kembali. AWS sangat menyarankan exponential backoff di antara percobaan ulang — retry langsung cenderung menabrak throttle yang sama lagi.- Konsistensi — pembacaan batch bersifat eventually consistent secara default; setel
ConsistentRead: trueper tabel untuk pembacaan strongly-consistent. - Per tabel Anda juga bisa melewatkan
ProjectionExpression(denganExpressionAttributeNames) untuk mengambil hanya sebagian atribut. BatchGetItemmungkin mengambil item secara paralel di sisi server — ia menghemat perjalanan bolak-balik, bukan kapasitas baca: DynamoDB menagih setiap item dalam batch sebagaiGetItemindividual.
Lakukan secara visual
Lebih suka tidak merakit map key DynamoDB-JSON dengan tangan? DynamoDB Expression Builder membangun map key/value bertipe dan menyalin kode yang bisa dijalankan, dan kalkulator ukuran item menunjukkan seberapa dekat sebuah batch dengan plafon 16 MB.
Untuk mengambil dan memeriksa item di seluruh tabel dalam GUI — tanpa loop retry untuk ditulis — unduh DynoTable.
Contoh terkait
- DynamoDB BatchGetItem di Python — pembacaan batch yang sama dengan boto3.
- DynamoDB BatchGetItem dengan AWS CLI — pembacaan batch yang sama dari shell.
- DynamoDB GetItem di Node.js — pembacaan satu item yang ini batch-kan.
- Operasi batch di DynamoDB — batas, kegagalan parsial, dan kapan batching sepadan.
- "Too many items requested for the BatchGetItem call" — lebih dari 100 key dalam satu request.
- "Provided list of item keys contains duplicates" — key yang sama dua kali dalam satu batch.
References
- BatchGetItem — Amazon DynamoDB API Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
- DynamoDB read and write operations (capacity unit consumption) — Amazon DynamoDB Developer Guide
Terakhir diverifikasi 2026-07-13 terhadap dokumentasi resmi AWS yang ditautkan di atas.