Nesting Levels have exceeded supported limits
TL;DR — DynamoDB, belge türlerini (map M ve list L) birbirinin içine 32 seviye derinliğe kadar yuvalamanıza olanak tanır. Daha derine giden bir yapı, bir ValidationException ile reddedilir. Veri modelini düzleştirin, derin dalı ayrı bir öğeye bölün ya da aşırı derin alt ağacı tek bir serileştirilmiş dize olarak saklayın.
Ne anlama gelir
ValidationException: 1 validation error detected: Nesting Levels have exceeded supported limits
# what the engine actually returns, reproduced against DynamoDB Local:
ValidationException: 1 validation error detected: Nesting Levels have exceeded supported limits: Attributes in the item have nested levels beyond supported limit(AWS'nin bu doğrulama hatası için belgelediği ifade budur; tam ifade işleme göre biraz değişebilir.) Bir öznitelik değeri bir skaler ya da kendisi daha fazla değer içeren bir map/list olabilir — ve DynamoDB bu yuvalanmayı 32 seviyeyle sınırlar. Aynı tavan ifadeler için de geçerlidir: bir belge yolunun maksimum derinliği 32'dir, dolayısıyla ondan daha derine de başvuramazsınız. Sınır, öznitelik sayısını değil, map'lerin ve listelerin derinliğini sayar. Onu aşmak, doğrulama zamanında yakalanan ve belge yeniden yapılandırılana kadar yeniden denenebilir olmayan bir HTTP 400 ValidationException'dır.
Neden olur
- Derin özyinelemeli veri — 32 seviyenin ötesinde map içinde map olarak serileştirilmiş ağaç/grafik yapıları (kuruluş şemaları, yorum dizileri, yuvalanmış kategoriler).
- Genel bir serileştirici — keyfi yuvalanmış JSON'u bir derinlik koruması olmadan doğrudan DynamoDB belge türlerine marshal eden kod.
- Kazara kendini yuvalama — bir öğeyi tekrar tekrar kendi içine saran bir hata.
- Yuvalanması hiç sınırlanmamış bir belge veritabanından taşınmış belgeler.
Nasıl düzeltilir
- Modeli düzleştirin — derin alt yapıları giderek daha derin map'ler yerine üst seviye özniteliklere ya da bir bileşik anahtar düzenine kaldırın.
- Birden çok öğeye bölün — derin dalı aynı bölüm anahtarı altında ayrı öğeler olarak modelleyin (tek tablo bitişiklik deseni).
- Derin alt ağacı serileştirin — içine sorgu yapmanız gerekmiyorsa, aşırı derin kısmı tek bir JSON dize özniteliği olarak saklayın (DynamoDB'ye opak, dolayısıyla iç derinliği artık sayılmaz).
- Marshal katmanınıza bir derinlik koruması ekleyin, böylece belgeler sessizce sınırı geçemez.
DynoTable’da ölç
DynoTable'deki iç içe geçmiş nitelikleri yazmadan önce inceleyin; ⌘K ile bir öğe açın ve yapının ne kadar derin çalıştığını görmek için JSON görüntüleyicideki harita/liste alanlarını genişletin. Aşamalandırma (⌘S), işleme koymadan önce bir yerleştirme/güncellemenin önizlemesini görmenizi ve derinlik hatalarını yakalamanızı sağlar.
Derinlik kontrollerinin yanında item sana calculator tuşunu kullanın; derin yuvalama genellikle öğeleri 400 KB sınırına doğru iter. Yerel ve AWS karşılaştırması yaparken profilleri ⌘P ile değiştirin. Kurulum: Connect to AWS, Install.
Kaynaklar
- Constraints in Amazon DynamoDB (2026-07-13 tarihinde doğrulandı)
- Referring to item attributes when using expressions (2026-07-13 tarihinde doğrulandı)
İlgili hatalar
- Item sana has exceeded the maximum allowed sana — ayrı 400 KB tüm öğe sınırı.
- An expression attribute name used in the document path is not defined — bir belge yolu başvuru hatası.
- ValidationException (genel bakış)
- Öğrenin: DynamoDB data types
Kaynaklar
- Constraints in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- TransactWriteItems — Amazon DynamoDB API Reference
- Referring to item attributes when using expressions in DynamoDB — Amazon DynamoDB Developer Guide
- 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ı.