DynamoDB Öğe Boyutu Sınırı (400 KB)
Tek bir DynamoDB öğesi en fazla 400 KB veri tutabilir. MongoDB'den (16 MB
belgeler) ya da pratik bir sınırı olmayan ilişkisel bir satırdan geliyorsan, bu tavan
düşük gelir — ve onu genellikle zor yoldan keşfedersin: aylarca çalışan bir yazma,
sonunda bir öğe çok büyüdüğü için aniden bir ValidationException ile başarısız
olduğunda.
Sınır keyfi değildir ve yükseltebileceğin bir kota değildir. Bir modelleme kısıtlamasıdır ve ona çarpan öğeler genellikle sana verinin yanlış modellendiğini söyler.
DynamoDB'de maksimum öğe boyutu nedir?
DynamoDB tek bir öğeyi 400 KB ile sınırlar — yükseltemeyeceğin kesin bir sınır. Boyut, attribute adlarını ve değerleri birlikte sayar; her iç içe liste, map ve set öğesi dahil. Öğeler buna genellikle sınırsız büyüme yoluyla çarpar, sürekli genişleyen gömülü bir liste gibi; düzeltme sıkıştırma değil modellemedir — koleksiyonu ayrı öğelere bölmektir.
- Öğe başına 400 KB, kesin tavan. Ayarlanamaz, esnek bir kota değil.
- Boyut = attribute adları + değerler, birlikte. Uzun attribute adları her öğede sayılır.
- İç içe yapı ve set'ler de sayılır. Listeler, map'ler ve iç içe değerlerinin hepsi toplanır.
- Olağan sebep sınırsız büyümedir — bir üst öğeye sınır olmadan büyüyen bir liste gömmek.
- Düzeltme sıkıştırma değil, modellemedir. Büyüyen koleksiyonu, paylaşılan bir partition anahtarı altında kendi öğelerine ayır.
Sorun: sonsuza kadar büyüyen öğe
Diyelim ki bir araç filosunu izliyorsun ve her aracın telemetri okumalarını araç öğesi üzerinde bir liste olarak saklamaya karar veriyorsun:
PK: VEHICLE#A1 readings: [ {ts, lat, lng, fuel}, {ts, lat, lng, fuel}, ... ]Bir iki gün için sorun yok. Ama okumalar her birkaç saniyede bir gelir ve hiç durmaz, bu yüzden liste sınırsız büyür. Sonunda tek bir araç öğesi 400 KB'yi aşar ve ona her yazma başarısız olur — o araç için artık hiç telemetri kaydedemezsin, çünkü her güncelleme tüm (artık aşırı büyük) öğeyi yeniden yazar.
Hata, boyut sınırı değil. Sınırsız bir bire-çok ilişkiyi gömülü bir liste olarak modellemek. Bu yalnızca "çok" tarafı sınırlı ve küçük olduğunda işe yarar.
400 KB'ye gerçekte ne sayılır
DynamoDB öğenin toplam boyutunu şunların toplamı olarak ölçer:
- Her attribute adı, UTF-8 kodlanmış. Milyonlarca öğede tekrarlanan 20 karakterlik bir ad, hem boyuttur hem de ödediğin depolamadır — deneyimli modelcilerin attribute adlarını kısa tutmasının sebebi budur.
- Her attribute değeri. String'ler ve binary bayt uzunluklarıyla; sayılar kompakt bir kodlamayla; booleanlar ve nulllar küçük sabit bir maliyetle.
- İç içe yapı. Bir liste ya da map kendi ek yükünü artı içindeki her öğenin ve anahtarın boyutunu, en alta kadar sayar.
Etrafında plan yapacağın ayrı bir attribute-başına tavan yoktur — 400 KB çizgisine karşı olan tüm öğedir. AWS servis kotaları tam bayt muhasebesini açıklar.
Sınır neden var
Büyük öğeleri taşımak pahalıdır. DynamoDB okumaları 4 KB birimlerle ölçülür, bu yüzden 400 KB'lik bir öğeyi güçlü okumak 100 RCU'ya mal olur — ve öğeler büyüdükçe okumalar, yazmalar ve çoğaltma hep daha yavaş ve daha pahalı hale gelir. Tavan, NoSQL'e yeni başlayanların ilişkisel alışkanlıkla uzandığı "tek dev blob getir" anti-deseninden uzaklaştırıp seni küçük, hedefli öğelere doğru iter.
Etrafında modelleme
Filo örneği için gömmeyi bırak. Her okumaya araçla aynı partition'da kendi öğesini ver, sort key'de zaman damgasına göre sıralanmış:
PK: VEHICLE#A1 SK: READING#2026-06-27T10:00:05Z lat, lng, fuel
PK: VEHICLE#A1 SK: READING#2026-06-27T10:00:10Z lat, lng, fuelArtık hiçbir öğe büyümez, yazmalar asla tavanı aşmaz ve VEHICLE#A1 üzerinde tek bir
Query yine bir aracın okumalarını tek bir sıralı
öğe koleksiyonu olarak geri çeker. Sınırlı alt
listeler (bir avuç etiket, sabit bir config bloğu) gömülü kalabilir; sınırsız olanlar
öğe olur.
DynoTable'da öğe boyutunu kontrol etme
Bir şekle bağlanmadan önce temsili bir öğeyi tart. DynoTable'da bir öğeyi Quick View'da aç; öğenin byte boyutunu attribute'larının yanında gösterir — böylece gerçek verilere göz atarken çok ağır bir şekli başarısız yazmada değil, tasarım zamanında yakalarsın.
Tarayıcıda kalmayı mı tercih ediyorsun? DynamoDB öğe boyutu hesaplayıcısı yapıştırılan bir örnekten aynısını yapar; tam KB'yi ve her okuma ile yazmanın mal olacağı RCU/WCU'yu raporlar.

Tuzaklar ve sonraki adımlar
- Trafikle büyüyen gömülü listelere dikkat et — klasik 400 KB saatli bombasıdır. Onları sınırla ya da ayır.
- Attribute adlarını kısalt yüksek kardinaliteli öğelerde — ücretsiz geri kazanılan boyut ve depolamadır.
- Büyük değerler S3'e aittir. Büyük blobları (resimler, belgeler) S3'te sakla ve öğede yalnızca anahtarı tut.
- İlgili: denormalizasyon ve bire-çok ilişkiler ne zaman gömeceğini ve ne zaman ayıracağını kapsar.
Bir tablodaki gerçek öğe boyutlarını bir bakışta görmek mi istiyorsun? DynoTable'ı indir ve verini doğrudan incele.


