Python'da DynamoDB'den Tüm Öğeleri Alma (boto3)
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; boto3'ün yerleşik scan sayfalayıcısı, sizin için her sayfada LastEvaluatedKey'i takip eder.
Code
import boto3
client = boto3.client("dynamodb")
paginator = client.get_paginator("scan")
items = []
for page in paginator.paginate(TableName="Music"):
items.extend(page["Items"])
print(f"Table holds {len(items)} items")Açıklama
- Asıl önemli olan sayfalayıcıdır — tek bir
scançağrısı tabloyu döndürmez; en fazla 1 MB döndürür.client.get_paginator("scan"), tablo tükenene kadar takip istekleri yayar (LastEvaluatedKey'iExclusiveStartKeyolarak geri besleyerek) — insanların öğelerin neden "eksik" olduğunu merak ederken unuttuğu döngü. (Elle mi yapıyorsunuz? Yanıt birLastEvaluatedKeyiçerdiği sürece çağırmaya devam edin.) - Bellek —
itemstablonun tamamını tutar. Büyük tablolar için, biriktirmek yerine döngü içinde herpage'i işleyin (bir dosyaya yazın, akıtın, toplayın). - Büyük tablolarda daha hızlı: paralel tarama —
Segment=i, TotalSegments=Ngeçirin ve her biri kendi segmentini sayfalayan N çalışan (iş parçacığı/süreç) ç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).
ProjectionExpressionfaturayı değil, yanıtı küçültür; bir taramayı sıcak yola koymayın — query ve erişim deseni tasarımı bunun içindir. - Öğeler DynamoDB JSON olarak döner (
{"S": ...}). Yerel Python türlerini mi tercih edersiniz? resource API'sini kullanın (table.scan+ elle birLastEvaluatedKeydöngüsü — resource API'sinde sayfalayıcı yoktur).
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
- Node.js'te tüm öğeleri alma — açık bir döngüyle aynı tam okuma.
- AWS CLI ile tüm öğeleri alma — CLI sizin için sayfalar.
- Python'da 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
- DynamoDB.Paginator.Scan — Boto3 documentation
- 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ı.