Too many items requested for the BatchWriteItem call
TL;DR — BatchWriteItem çağrı başına en fazla 25 put/delete eylemi (ve toplam ≤16 MB) kabul eder. 25'ten fazla gönderdiniz, bu yüzden DynamoDB isteğin tamamını reddetti. Öğelerinizi 25 veya daha az parçalara bölün ve her parça için bir BatchWriteItem gönderin.
Ne anlama gelir
ValidationException: 1 validation error detected: Value '<your request>' at 'requestItems' failed to satisfy constraint: Map value must satisfy constraint: [Member must have length less than or equal to 25, Member must have length greater than or equal to 1]
# on DynamoDB Local the same call is rejected with a shorter sentence:
ValidationException: Too many items requested for the BatchWriteItem callHizmet, <your request> yerine serileştirilmiş isteğinizin tamamını geri yansıtır — 26 öğelik bir toplu istek için yaklaşık 12.000 karakter.
BatchWriteItem, bir veya daha fazla tabloda tek tek PutRequest/DeleteRequest eylemlerini gruplar — ancak tek bir çağrı 25 eylem ve 16 MB veriyle kesin olarak sınırlıdır. Her iki sınırı da aşın ve DynamoDB hiçbir şey yazmadan önce isteğin tamamını reddeder. Bu, istemci tarafında, toplu isteği yeniden boyutlandırana kadar yeniden denenebilir olmayan bir HTTP 400 ValidationException'dır.
Neden olur
- Tek bir çağrıda büyük bir koleksiyon yazmak — yüzlerce öğeden oluşan bir diziyi parçalamadan doğrudan
BatchWriteItem'a geçirmek. - Yanlış sınırlı bir parça döngüsü — sayıya göre gruplamak ama 25'in üstünde bir sınır kullanmak ya da 26'ya izin veren bir bir-eksik hatası.
- Eylemleri değil tabloları saymak — 25 sınırı, tablo başına değil, istekteki tüm tablolar genelindeki toplam eylemdir.
- Aşırı büyük yük — ≤25 eylemde bile, herhangi bir tek öğe 400 KB'yi ya da toplam istek 16 MB'yi aşarsa toplu isteğin tamamı reddedilir.
Nasıl düzeltilir
- ≤25 eylemlik gruplara bölün ve her parça için bir
BatchWriteItemgönderin. UnprocessedItems'i ele alın —BatchWriteItem, işlemediği öğeleri döndürebilir (kısıtlama); bunları üstel geri çekilmeyle yeniden deneyin. Bu, geçerli bir 25 öğelik toplu istekte bile normaldir.- Her toplu isteği 16 MB'nin altında tutun — büyük öğelerle çağrı başına 25'ten az gerekebilir.
- Senin için tamponlayan bir yardımcı kullanın — boto3'ün
Table.batch_writer()'ı yazmaları parçalar ve işlenmemiş öğeleri otomatik olarak yeniden gönderir (Java SDK'nın Enhanced Client'ı / v1 DynamoDBMapper de işlenmemiş öğeleri yeniden dener). Düşük seviyeli istemciler ve JavaScript belge istemcisi, aşırı büyük bir toplu isteği bölmez.
DynoTable’da ölç
Verileri toplu yüklemeden önce, DynoTable'daki öğe boyutlarını kontrol edin; ⌘K ile örnek bir öğe açın ve her birinin 400 KB'nin altına uyduğunu onaylayın. item sana calculator toplu yük boyutunu tahmin eder, böylece yükleyiciniz çalıştırılmadan önce güvenli bir parça boyutu seçersiniz.
Tam içe aktarmayı çalıştırmadan önce küçük bir toplu yazmayı bir geliştirme tablosuna karşı test etmek için aşamalandırmayı (⌘S) kullanın. Profilleri ⌘P ile değiştirin; bunları Ayarlar → Profiller altında Bağlantıyı Test Et ile yapılandırın. Bkz. Connect to AWS ve Install.
Kaynaklar
- BatchWriteItem — Amazon DynamoDB API Reference (2026-07-13 tarihinde doğrulandı)
- Amazon DynamoDB — AWS SDK for Python (Boto3) guide (2026-07-13 tarihinde doğrulandı)
İlgili hatalar
- Too many items requested for the BatchGetItem call — okuma tarafı sınırı (100 öğe).
- Provided list of item keys contains duplicates — tek bir BatchWriteItem içinde aynı anahtarın iki kez geçmesi.
- ProvisionedThroughputExceededException — UnprocessedItems olarak beliren kısıtlama.
- Kod örneği: BatchWriteItem in Node.js · Python (boto3) ile — UnprocessedItems yeniden denemesiyle parçalanmış yazmalar.
- Öğrenin: DynamoDB batch operations
Kaynaklar
- BatchWriteItem — Amazon DynamoDB API Reference
- BatchGetItem — Amazon DynamoDB API Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
- Amazon DynamoDB — AWS SDK for Python (Boto3) guide
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.