Node.js'te DynamoDB'den Tüm Öğeleri Alma (AWS SDK v3)
DynamoDB'de "tümünü seç" yoktur — bütün bir tabloyu okumak, sonuna kadar sayfaladığınız bir Scan demektir. Her yanıt en fazla 1 MB taşır; hiçbir anahtar geri gelmeyene kadar LastEvaluatedKey'i ExclusiveStartKey olarak geri besleyerek döngü yaparsınız.
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`);Açıklama
- Asıl önemli olan döngüdür — tek bir
Scançağrısı tabloyu döndürmez; en fazla 1 MB döndürür. İlk yanıttan sonra durmak, klasik "taramam öğeleri kaçırıyor" hatasıdır. YalnızcaLastEvaluatedKey'in bulunmaması her şeyi okuduğunuz anlamına gelir. - Bellek —
itemstablonun tamamını tutar. Büyük tablolar için, biriktirmek yerine döngü içinde her sayfayı işleyin (bir dosyaya yazın, akıtın, toplayın). - Büyük tablolarda daha hızlı: paralel tarama — işi
Segment/TotalSegmentsile bölün: her biri kendi segmentini kendi sayfalama döngüsüyle tarayan N çalışan çalıştırın. Aynı toplam maliyet, çok daha düşük duvar-saati süresi. - Maliyet — tam bir tarama, çalıştırdığınız her seferinde her öğenin her baytını okur (ve faturalandırır). Yanıtı
ProjectionExpressionile kısaltın (daha az öznitelik döner — okuma maliyeti aynı kalır) ve bir taramayı sıcak yola koymayın; Query ve erişim deseni tasarımı bunun içindir. - Bu arada filtreliyor musunuz? Bir
FilterExpression, öğeleri okunduktan (ve faturalandırıldıktan) sonra eler — bkz. Filtreyle Scan.
Görsel olarak yapın
Bir tabloya göz atmak için bir betiğe gerek yok: herhangi bir tabloyu sayfalanmış bir ızgarada gezinmek için DynoTable'ı indirin — taramaları sizin için sayfalar, yanlış yapılacak bir döngü yok. Ve tarayıp ödemeden önce, DynamoDB fiyatlandırma hesaplayıcı tablonuzun tam bir okumasının gerçekte ne kadara mal olduğunu gösterir.
İlgili örnekler
- Python'da tüm öğeleri alma — boto3'ün sayfalayıcısıyla aynı tam okuma.
- AWS CLI ile tüm öğeleri alma — CLI sizin için sayfalar.
- Node.js'te DynamoDB Scan — bir
FilterExpressionile tarama. - Paralel taramalar — Segment/TotalSegments, çalışan sayıları ve ne zaman uğraşmaya değeceği.
- DynamoDB Scan'im neden yavaş ve pahalı? — maliyet modeli ve bundan nasıl kaçınılacağı.
- DynamoDB ProvisionedThroughputExceededException — tablonun tamamını okumak, buna takılmanın klasik yoludur.
- "The provided starting key is invalid" — sayfalama döngüsünde bozuk bir devam anahtarı.
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
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.