Penulisan Batch DynamoDB di Python (boto3 batch_writer)
Cara idiomatik untuk menulis item DynamoDB secara massal di Python adalah context manager batch_writer() milik boto3: ia menyangga put dan delete Anda, mengirimnya sebagai panggilan BatchWriteItem hingga 25 item, dan otomatis mengirim ulang item yang belum diproses — loop retry yang di setiap bahasa lain ditulis dengan tangan.
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")Penjelasan
batch_writer()— menurut dokumentasi boto3, handle-nya "will automatically handle buffering and sending items in batches", dan "will also automatically handle any unprocessed items and resend them as needed". Keluar dari blokwithmengeluarkan (flush) apa pun yang masih tersangga.- Nilai Python biasa — ini adalah resource API: tanpa DynamoDB JSON, angka sebagai
int/Decimal. Setiap itemput_itemharus menyertakan primary key lengkap tabel;delete_itemhanya membutuhkan key. - Key duplikat — panggilan
BatchWriteItemmentah menolak dua penulisan ke key yang sama. Jika data sumber Anda bisa mengulang key, konstruksi writer sebagaitable.batch_writer(overwrite_by_pkeys=["Artist", "SongTitle"])— ia menghilangkan duplikat di buffer, mempertahankan penulisan terakhir per key. - Batas layanan yang sama berlaku di baliknya: 25 penulisan per request, 400 KB per item, 16 MB per request.
batch_writermenangani pemotongan (chunking); ia tidak bisa mengangkat batas per item. - Tanpa update, tanpa kondisi —
BatchWriteItemtidak bisa mengekspresikanUpdateItematau sebuahConditionExpression; sebuah put pada key yang sudah ada diam-diam menggantikan item. Butuh all-or-nothing atau penulisan bersyarat? Gunakan TransactWriteItems. - Menggunakan low-level client sebagai gantinya (
client.batch_write_item)? MakaUnprocessedItemsmenjadi tugas Anda untuk dikuras — loop dengan exponential backoff persis seperti contoh Node.js.
Lakukan secara visual
Memeriksa item Anda sebelum bulk load? Kalkulator ukuran item memvalidasi setiap item terhadap batas 400 KB, dan DynamoDB Expression Builder menyalin kode boto3 yang bisa dijalankan untuk pembacaan dan penulisan lanjutan.
Untuk menambah, mengedit, dan menghapus item secara massal dalam GUI — impor CSV/JSON termasuk — unduh DynoTable.
Contoh terkait
- DynamoDB BatchWriteItem di Node.js — loop retry manual yang disembunyikan batch_writer.
- DynamoDB BatchWriteItem dengan AWS CLI — penulisan batch yang sama dari shell.
- DynamoDB PutItem di Python — penulisan satu item yang ini batch-kan.
- Operasi batch di DynamoDB — batas, kegagalan parsial, dan kapan batching sepadan.
- "Too many items requested for the BatchWriteItem call" — lebih dari 25 request put/delete dalam satu batch.
- "Provided list of item keys contains duplicates" — dua request menyentuh key yang sama dalam satu batch.
References
- Amazon DynamoDB guide (batch_writer) — Boto3 documentation
- BatchWriteItem — Amazon DynamoDB API Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
Terakhir diverifikasi 2026-07-13 terhadap dokumentasi resmi AWS yang ditautkan di atas.