ValidationException: Item size has exceeded the maximum allowed size
TL;DR — Sebuah item DynamoDB paling besar 400 KB (nama atribut + nilainya digabung). Penulisan Anda mendorong sebuah item melewati angka itu. Pindahkan field besar ke luar (ke S3, atau pecah ke beberapa item) dan simpan referensinya saja.
Apa artinya
ValidationException: Item size has exceeded the maximum allowed sizeBatasnya 400 KB = 409.600 byte. Yang dihitung adalah seluruh item: setiap nama atribut plus nilainya, dalam encoding UTF-8, termasuk overhead map/list bersarang. Sebuah UpdateItem yang menumbuhkan item existing melewati 400 KB gagal dengan cara yang sama (sebagai update, pesannya berbunyi "Item size to update has exceeded the maximum allowed size").
Mengapa itu terjadi
- Menyimpan blob besar secara inline — gambar base64, PDF, dokumen JSON besar.
- Sebuah list/map tanpa batas (array append-only, log event) yang tumbuh dari waktu ke waktu sampai melewati 400 KB.
- Nama atribut yang panjang dikalikan ke seluruh item besar.
- Terlalu banyak denormalisasi ke dalam satu item.
Bagaimana cara memperbaikinya
- Pindahkan nilai besar ke S3. Simpan objeknya di S3 dan sisakan hanya key/URL-nya di DynamoDB. Ini pola standar untuk apa pun yang mendekati batas.
- Pecah datanya ke beberapa item. Pakai pola item-collection / partisi vertikal — satu entitas logis sebagai beberapa item yang berbagi partition key.
- Batasi koleksi yang terus tumbuh. Jangan biarkan satu item mengakumulasi list tanpa batas; gulirkan entri ke item anak yang di-key oleh sort key.
- Kompres teks yang memang besar sebelum menyimpannya (gzip → atribut binary), kalau S3 bukan pilihan.
Contoh — pola referensi
// Instead of storing the blob inline, store an S3 pointer:
await doc.send(
new PutCommand({
TableName: 'Documents',
Item: {
pk: 'DOC#1',
title: 'Q3 report',
s3Key: 'documents/DOC#1/report.pdf', // the bytes live in S3
sizeBytes: 2_400_000
}
})
);FAQ
Berapa ukuran item maksimum di DynamoDB? 400 KB (409.600 byte) per item, menghitung setiap nama atribut plus nilainya dalam encoding UTF-8, termasuk overhead map dan list bersarang. UpdateItem yang menumbuhkan item existing melewati 400 KB gagal dengan error yang sama.
Bagaimana cara menyimpan data lebih besar dari 400 KB di DynamoDB? Pindahkan nilai besar itu ke S3 dan sisakan hanya key atau URL-nya di DynamoDB, pecah datanya ke beberapa item yang berbagi partition key, atau kompres teks besar menjadi atribut binary. Jangan biarkan satu item mengakumulasi list tanpa batas.
Cara mereproduksinya
Satu item yang membawa atribut string 410 KB, sedikit di atas plafon 400 KB:
await client.send(
new PutItemCommand({
TableName: 'orders',
Item: {pk: {S: 'BIG'}, sk: {S: 'META'}, blob: {S: 'x'.repeat(410 * 1024)}}
})
);Keluaran sebenarnya:
ValidationException: Item size has exceeded the maximum allowed size
HTTP 400Pesannya tidak pernah memberi tahu seberapa jauh Anda melewati batas, atau atribut mana penyebabnya — jadi ketika sebuah item dirakit dari beberapa sumber, ukur sebelum menulis alih-alih membelah-belah setelah ditolak.
Kesalahan terkait
- ItemCollectionSizeLimitExceededException — batas 10 GB untuk collection (tabel dengan LSI).
- ValidationException (ikhtisar)
- Pelajari: Ukuran item & batas 400 KB · Item collection
Referensi
- Supported data types and naming rules in Amazon DynamoDB — Developer Guide
- BatchWriteItem — Amazon DynamoDB API Reference
- TransactWriteItems — 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.
Direproduksi 2026-07-26 terhadap DynamoDB Local 2.x dengan AWS SDK for JavaScript v3.1095.0 — keluaran di atas dikutip apa adanya.