ValidationException: Item size has exceeded the maximum allowed size
TL;DR — Bir DynamoDB öğesi en fazla 400 KB olabilir (öznitelik adları + değerleri birleşik). Yazmanız bir öğeyi bunun üzerine iter. Büyük alanı dışarı taşıyın (S3'e ya da öğeler arasında bölün) ve bunun yerine bir referans saklayın.
Ne anlama gelir
ValidationException: Item size has exceeded the maximum allowed sizeSınır 400 KB = 409.600 bayttır. Tüm öğeyi sayar: her öznitelik adı artı değeri, UTF-8 kodlanmış, yuvalanmış map/list ek yükü dahil. Mevcut bir öğeyi 400 KB'nin üzerine büyüten bir UpdateItem aynı şekilde başarısız olur (bir güncelleme olarak, mesaj "Item size to update has exceeded the maximum allowed size" olarak okunur).
Neden olur
- Büyük ikili nesneleri satır içi saklamak — base64 görüntüler, PDF'ler, büyük JSON belgeleri.
- Zamanla 400 KB'yi geçene kadar büyüyen sınırsız bir liste/map (yalnızca ekleme dizileri, olay günlükleri).
- Büyük bir öğe boyunca çarpılan uzun öznitelik adları.
- Tek bir öğeye çok fazla normalleştirmeyi kaldırmak.
Nasıl düzeltilir
- Büyük değerleri S3'e boşaltın. Nesneyi S3'te saklayın ve DynamoDB'de yalnızca anahtarı/URL'yi tutun. Bu, sınıra yaklaşan her şey için standart desendir.
- Veriyi birden çok öğeye bölün. Öğe koleksiyonu / dikey bölüm desenini kullanın — tek bir mantıksal varlık, bir bölüm anahtarını paylaşan birkaç öğe olarak.
- Büyüyen koleksiyonları sınırlayın. Tek bir öğenin sınırsız bir liste biriktirmesine izin vermeyin; girdileri sıralama anahtarıyla anahtarlanan alt öğelere yuvarlayın.
- S3 bir seçenek değilse, saklamadan önce gerçekten büyük metni sıkıştırın (gzip → ikili öznitelik).
Örnek — referans deseni
// 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
}
})
);SSS
DynamoDB'de maksimum öğe boyutu nedir? Öğe başına 400 KB (409.600 bayt), her öznitelik adı artı değeri, UTF-8 kodlanmış, yuvalanmış map ve list ek yükü dahil sayılır. Mevcut bir öğeyi 400 KB'nin üzerine büyüten bir UpdateItem aynı hatayla başarısız olur.
DynamoDB'de 400 KB'den büyük veriyi nasıl saklarım? Büyük değeri S3'e boşaltın ve DynamoDB'de yalnızca anahtarı veya URL'yi tutun, veriyi bir bölüm anahtarını paylaşan birden çok öğeye bölün ya da büyük metni bir ikili özniteliğe sıkıştırın. Tek bir öğenin sınırsız bir liste biriktirmesine izin vermeyin.
Nasıl yeniden oluşturulur
400 KB tavanının hemen üstünde, 410 KB'lik bir string özniteliği taşıyan tek bir öğe:
await client.send(
new PutItemCommand({
TableName: 'orders',
Item: {pk: {S: 'BIG'}, sk: {S: 'META'}, blob: {S: 'x'.repeat(410 * 1024)}}
})
);Gerçek çıktı:
ValidationException: Item size has exceeded the maximum allowed size
HTTP 400Mesaj size ne kadar aştığınızı ya da bunu hangi özniteliğin yaptığını asla söylemez — bu yüzden bir öğe birden fazla kaynaktan birleştiriliyorsa, retten sonra ikili aramayla kısımları elemek yerine yazmadan önce ölçün.
İlgili hatalar
- ItemCollectionSizeLimitExceededException — 10 GB koleksiyon sınırı (LSI tabloları).
- ValidationException (genel bakış)
- Öğrenin: Item size & the 400 KB limit · Item collections
Kaynaklar
- 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
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.
2026-07-26 tarihinde AWS SDK for JavaScript v3.1095.0 ile DynamoDB Local 2.x'e karşı yeniden üretildi — yukarıdaki çıktı birebir alınmıştır.