Too many items requested for the BatchGetItem call

TL;DR — BatchGetItem çağrı başına en fazla 100 öğe (ve ≤16 MB veri) getirir. 100'den fazla anahtar istediniz, bu yüzden DynamoDB isteği reddetti. Anahtarlarınızı 100 veya daha az parçalara bölün ve her parça için bir BatchGetItem gönderin.

Ne anlama gelir

ValidationException: 1 validation error detected: Value at 'RequestItems.<table-name>.member.Keys' failed to satisfy constraint: Member must have length less than or equal to 100

# on DynamoDB Local the same call is rejected with a shorter sentence:
ValidationException: Too many items requested for the BatchGetItem call

BatchGetItem, bir veya daha fazla tabloda öğeleri birincil anahtara göre getirir, ancak tek bir çağrı 100 anahtar ve 16 MB dönen veriyle sınırlıdır. 100'den fazla isteyin ve DynamoDB çağrının tamamını reddeder. Sınır içinde bile bir yanıt, istenenden daha az öğe döndürebilir (16 MB tavanı) ve gerisini UnprocessedKeys içinde bildirir. Sınır aşımı durumu, yeniden boyutlandırılana kadar yeniden denenebilir olmayan bir HTTP 400 ValidationException'dır.

Neden olur

  • Tek bir çağrıda büyük bir anahtar kümesi istemek — yüzlerce anahtarı doğrudan BatchGetItem'a geçirmek.
  • 100'ün üstünde bir parça sınırı — sayıya göre gruplamak ama 25 öğelik BatchWrite sınırının kardeşini yanlış kullanmak ya da 101'e izin veren bir bir-eksik hatası.
  • Anahtarları değil tabloları saymak — 100 sınırı, istekteki tüm tablolar genelindeki toplam anahtardır.
  • UnprocessedKeys sayfalamamak — bir çağrının her şeyi döndürdüğünü varsaymak, dolayısıyla hiç parçalamamak.

Nasıl düzeltilir

  1. Anahtarları ≤100'lük gruplara bölün ve her parça için bir BatchGetItem gönderin.
  2. UnprocessedKeys'i ele alın — dönen anahtarları üstel geri çekilmeyle yeniden deneyin; bu, geçerli bir 100 anahtarlık toplu istekte bile 16 MB sınırına ulaşıldığında olur.
  3. Yanıtları 16 MB'nin altında tutun — büyük öğelerle, çağrı başına 100'den az isteyin.
  4. SDK'nızın senin için ne yaptığını bilin — düşük seviyeli istemciler ve JavaScript belge istemcisi, aşırı büyük bir anahtar listesini bölmez; kendiniz 100'e parçalamalısınız. Bazı üst seviye istemciler (Java SDK'nın Enhanced Client'ı ve v1 DynamoDBMapper), en azından işlenmemiş öğeleri otomatik olarak yeniden dener.

Nasıl yeniden oluşturulur

Sınırın bir üstü olan 101 anahtar isteyen bir BatchGetItem:

const Keys = Array.from({length: 101}, (_, i) => ({pk: {S: `K#${i}`}, sk: {S: 'META'}}));
await client.send(new BatchGetItemCommand({RequestItems: {orders: {Keys}}}));

Gerçek çıktı:

ValidationException: Too many items requested for the BatchGetItem call
HTTP 400

Bu, istek şekli üzerinde hemen başarısız olur — kısmi bir okuma gerçekleşmez ve UnprocessedKeys içine hiçbir şey düşmez. 100 anahtarlık sınırı aşmakla, kısmi sonuç döndüren 16 MB yanıt sınırını aşmak arasındaki fark tam olarak budur.

DynoTable'dan

Hata ayıklama sırasında 100'den az anahtarı aynı anda toplu olarak okuyun; ⌘K ile tabloyu açın, anahtar kümenize göre filtreleyin ve kodda parçalanmış BatchGetItem'yi bağlamadan önce öğelerin mevcut olduğunu onaylayın. item sana calculator öğeler büyük olduğunda güvenli bir parça boyutu seçmenize yardımcı olur.

Önce tek tuşlu okumaların prototipini oluşturmak için Query Builder'yi kullanın. Profilleri ⌘P ile değiştirin; Ayarlar → Profiller'de Bağlantıyı Test Et. Bkz. Connect to AWS ve Install.

Kaynaklar

İlgili hatalar

Kaynaklar

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.

Console olmadan DynamoDB ile çalış

DynamoDB’nin çalıştıramadığı gerçek SQL’i çalıştıran hızlı bir DynamoDB masaüstü istemcisi — JOINs, GROUP BY, toplamalar — görsel düzenleme ve kendi Bedrock anahtarların üzerinde bir yapay zekâ aracısıyla.

30 günlük ücretsiz deneme, kredi kartı yok — ardından süre sınırı olmayan Ücretsiz plan.