Python'da DynamoDB Toplu Yazma (boto3 batch_writer)
DynamoDB öğelerini Python'da toplu yazmanın deyimsel yolu, boto3'ün batch_writer() bağlam yöneticisidir: put ve delete'lerinizi ara belleğe alır, bunları 25'e kadar BatchWriteItem çağrıları olarak gönderir ve işlenmemiş öğeleri otomatik olarak yeniden gönderir — diğer her dilin elle yazdığı yeniden deneme döngüsü.
Code
import boto3
dynamodb = boto3.resource("dynamodb")
table = dynamodb.Table("Music")
songs = [
{"Artist": "Arturo Sandoval", "SongTitle": "Cubano Chant", "AlbumTitle": "Danzon", "Year": 1994},
{"Artist": "Arturo Sandoval", "SongTitle": "A Mis Abuelos", "AlbumTitle": "Danzon", "Year": 1994},
{"Artist": "Arturo Sandoval", "SongTitle": "Groovin' High", "AlbumTitle": "Swingin'", "Year": 1996},
]
with table.batch_writer() as batch:
for song in songs:
batch.put_item(Item=song)
batch.delete_item(Key={"Artist": "Ella Fitzgerald", "SongTitle": "Misty"})
print(f"Wrote {len(songs)} songs")Açıklama
batch_writer()— boto3 belgelerine göre bu tanıtıcı, "ara belleğe alma ve öğeleri gruplar hâlinde gönderme işini otomatik olarak halleder" ve "ayrıca işlenmemiş öğeleri otomatik olarak halleder ve gerektiğinde yeniden gönderir".withbloğundan çıkmak, hâlâ ara bellekte olan her şeyi boşaltır.- Düz Python değerleri — bu, resource API'sidir: DynamoDB JSON yok, sayılar
int/Decimalolarak. Herput_itemöğesi tablonun tam birincil anahtarını içermelidir;delete_itemyalnızca anahtarı alır. - Yinelenen anahtarlar — ham bir
BatchWriteItemçağrısı, aynı anahtara yapılan iki yazmayı reddeder. Kaynak verileriniz anahtarları tekrarlayabiliyorsa, yazıcıyıtable.batch_writer(overwrite_by_pkeys=["Artist", "SongTitle"])olarak oluşturun — ara belleği yinelenenlerden arındırır ve anahtar başına son yazmayı tutar. - Altta aynı hizmet sınırları geçerlidir: istek başına 25 yazma, öğe başına 400 KB, istek başına 16 MB.
batch_writerparçalamayı halleder; öğe başına üst sınırı kaldıramaz. - Güncelleme yok, koşul yok —
BatchWriteItem,UpdateItemveya birConditionExpressionifade edemez; mevcut bir anahtara yapılan bir put, öğenin sessizce yerine geçer. Ya hep ya hiç veya koşullu yazmalara mı ihtiyacınız var? TransactWriteItems'ı kullanın. - Bunun yerine düşük seviyeli istemci (
client.batch_write_item) üzerinden mi gidiyorsunuz? O zamanUnprocessedItems'ı boşaltmak size kalmıştır — tam olarak Node.js örneğindeki gibi üstel geri çekilmeyle döngü yapın.
Görsel olarak yapın
Toplu bir yüklemeden önce öğelerinizi mi kontrol ediyorsunuz? Öğe boyutu hesaplayıcı, her öğeyi 400 KB üst sınırına karşı doğrular ve DynamoDB Expression Builder, takip eden okuma ve yazmalar için çalıştırılabilir boto3 kodunu kopyalar.
Öğeleri bir grafik arayüzde (GUI) toplu eklemek, düzenlemek ve silmek için — CSV/JSON içe aktarma dahil — DynoTable'ı indirin.
İlgili örnekler
- Node.js'te DynamoDB BatchWriteItem — batch_writer'ın gizlediği elle yeniden deneme döngüsü.
- AWS CLI ile DynamoDB BatchWriteItem — kabuktan aynı toplu yazma.
- Python'da DynamoDB PutItem — bunun toplu hâle getirdiği tek öğe yazması.
- DynamoDB'de toplu işlemler — sınırlar, kısmi başarısızlık ve toplu işlemenin ne zaman kazandırdığı.
- "Too many items requested for the BatchWriteItem call" — bir toplu istekte 25'ten fazla put/delete isteği.
- "Provided list of item keys contains duplicates" — bir toplu istekte aynı anahtara dokunan iki istek.
References
- Amazon DynamoDB guide (batch_writer) — Boto3 documentation
- BatchWriteItem — Amazon DynamoDB API Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.