Node.js'te DynamoDB BatchGetItem (AWS SDK v3)

BatchGetItem, tek bir istekte birincil anahtara göre 100'e kadar öğe getirir (en fazla 16 MB). AWS SDK v3'te, tablo → anahtarlar şeklinde bir RequestItems eşlemesi içeren bir BatchGetItemCommand gönderirsiniz — ve UnprocessedKeys üzerinde döngü yapmak zorundasınız, çünkü bir toplu istek yasal olarak istediğinizin yalnızca bir kısmını döndürebilir.

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`);

Açıklama

  • RequestItems — tablo adı → { Keys: [...] } şeklinde bir eşleme; bir istek birden çok tabloya yayılabilir. Her anahtar tam birincil anahtar olmalıdır (bileşik bir anahtar için bölüm + sıralama). 100'den fazla anahtar ya da aynı anahtarın iki kez geçmesi bir ValidationException ile başarısız olur.
  • Responses — tablo adı → bulunan öğeler şeklinde bir eşleme. Öğeler belirli bir sırada olmadan döner ve var olmayan anahtarlar basitçe görünmez — sonuçları anahtar özniteliklerine göre isteklerle eşleştirin.
  • UnprocessedKeys — yukarıdaki yeniden deneme döngüsü isteğe bağlı değildir. Yanıt 16 MB'ı aşarsa, iş hacmi tükenirse ya da bir bölüm okuması 1 MB'ı aşarsa, DynamoDB kalanı burada RequestItems biçiminde döndürür ve doğrudan geri beslenmeye hazırdır. AWS, yeniden denemeler arasında üstel geri çekilmeyi şiddetle önerir — anında yapılan bir yeniden deneme aynı kısıtlamaya tekrar takılma eğilimindedir.
  • Tutarlılık — toplu okumalar varsayılan olarak nihai tutarlıdır; güçlü tutarlı okumalar için tablo başına ConsistentRead: true ayarlayın.
  • Tablo başına, yalnızca bazı öznitelikleri getirmek için ayrıca ProjectionExpression (ExpressionAttributeNames ile) geçirebilirsiniz.
  • BatchGetItem, öğeleri sunucu tarafında paralel olarak alabilir — okuma kapasitesini değil, gidiş-dönüşleri kurtarır: DynamoDB, toplu istekteki her öğeyi ayrı bir GetItem olarak faturalandırır.

Görsel olarak yapın

DynamoDB-JSON anahtar eşlemelerini elle bir araya getirmemeyi mi tercih edersiniz? DynamoDB Expression Builder, türlü anahtar/değer eşlemeleri oluşturur ve çalıştırılabilir kodu kopyalar; öğe boyutu hesaplayıcı ise bir toplu isteğin 16 MB tavanına ne kadar yaklaştığını gösterir.

Yeniden deneme döngüleri yazmadan, tablolar arası öğeleri bir grafik arayüzde (GUI) getirmek ve incelemek için — DynoTable'ı indirin.

İlgili örnekler

References

En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.

Console olmadan DynamoDB ile çalışın

DynoTable, DynamoDB için hızlı bir masaüstü istemcisidir — tablolara göz atın, SQL tarzı sorgular çalıştırın ve item'ları yerel olarak düzenleyin.