Node.js (AWS SDK v3) ile DynamoDB Tablosundaki Tüm Öğeleri Alma

SDK v3'te bütün bir tabloyu okumak, bir Scan'i sonuna kadar sayfalamak demektir. Her yanıt 1 MB ile sınırlıdır ve biri geri gelmeyi kesene kadar LastEvaluatedKey'i ExclusiveStartKey olarak geri beslersiniz (DynamoDB imleçleri nasıl çalışır).

Aşağıdaki döngü, imleç görünür olsun diye elle yazılmıştır. Gerçek kodda, SDK'nın zaten sunduğu paginateScan'e uzanırdınız.

Kod

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

Açıklama

  • paginateScan bunu zaten yapıyorimport {paginateScan} from '@aws-sdk/client-dynamodb', ardından for await (const page of paginateScan({client}, {TableName: 'Music'})). Yukarıdaki döngünün elle kullandığı aynı üç imleç alanından (ExclusiveStartKey, LastEvaluatedKey, Limit) üretilmiştir, dolayısıyla geçiş yaptığınızda davranışı hiçbir şey değiştirmez.
  • Yalnızca LastEvaluatedKey'in yokluğu bitti demektir — sıfır Items ve bir imleç içeren bir yanıt normaldir, boş bir tablo değil. Items.length === 0 üzerinde durmak klasik eksik-satır hatasıdır ve bir FilterExpression, boş sayfaları nadir değil rutin hâle getirir.
  • Limit, çağrı başına değerlendirilen öğeleri sayar, toplam öğeleri değil — sayfalayıcının sürdüğü üçüncü alandır ve ne o ne de sayfalayıcının pageSize'ı, sonunda elinizde tutacağınız dizinin boyutunu sınırlar.
  • İlk geçişte ExclusiveStartKey: undefined sorun değildir — serileştirici tanımsız üyeleri düşürür, dolayısıyla ilk yineleme özel bir duruma ihtiyaç duymaz.
  • items, tablonun boyutuna kadar büyür — tablonun küçük olduğunu bilmiyorsanız her sayfayı döngünün içinde işleyin ve bırakın gitsin (yazın, akıtın, toplayın). Biriktirmek, bellek yetersizliğiyle çökmekten bir tablo büyümesi uzaktır.
  • Bir tarama, okuduğu her baytı her çalıştırmada faturalandırırProjectionExpression kablodan geçeni küçültür, faturayı değil (nedeni) ve bir FilterExpression öğeleri okunup ücretlendirildikten sonra düşürür (filtreli Scan). Sıcak bir yolda Query istersiniz.
  • Onu Segment / TotalSegments ile bölün — her biri kendi dilimi üzerinde kendi imlecini süren N eşzamansız işçi, hepsi tek bir paylaşılan istemci üzerinde. Node onları seve seve eşzamanlı çalıştırır; okuma maliyeti değişmez, yalnızca duvar saati değişir (bunun ne zaman değdiği).

Görsel olarak yapın

DynamoDB sorgu oluşturucu bu programın tamamını, sayfalama döngüsü dahil, bir formdan üretir — SDK v3 ve yedi hedef daha için.

DynoTable canlı bir tabloyu sizin için sonsuz kaydırmalı bir ızgarada sayfalar ve o ızgaranın arkasındaki Scan'i çalıştırılabilir kod olarak dışa aktarır. DynoTable'ı indirin.

İlgili örnekler

Kaynaklar

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

Bu isteği görsel olarak oluştur

Bu operasyonu ücretsiz DynamoDB Sorgu Oluşturucuda kur — anahtar koşulu, filtre, index, Limit, sıralama yönü ve bir sayfalama döngüsü — ve çalıştırılabilir bir SDK v3, CLI veya boto3 programı olarak geri kopyala.

DynamoDB Sorgu Oluşturucuyu aç

Console olmadan DynamoDB ile çalış

DynamoDB’nin çalıştıramadığı gerçek SQL’i çalıştıran hızlı bir DynamoDB masaüstü istemcisi — JOINs, GROUP BY, toplamalar — görsel düzenleme ve kendi Bedrock anahtarların üzerinde bir yapay zekâ aracısıyla.

30 günlük ücretsiz deneme, kredi kartı yok — ardından süre sınırı olmayan Ücretsiz plan.