DynamoDB'de öğeler nasıl sayılır?
Eşleşen öğeleri döndürmeden saymak için bir Query ya da Scan üzerinde Select: 'COUNT' kullanın. Her yanıt yalnızca taranan 1 MB'a kadarını sayar, dolayısıyla tam toplam için LastEvaluatedKey ile sayfalamanız ve Count değerlerini toplamanız gerekir. Yaklaşık bir tablo toplamı için DescribeTable'dan ItemCount'u okuyun. Gruplanmış bir sayım — ya da bir sütun üzerinde SUM/AVG — için DynoTable'ın SQL Workbench'i COUNT ve GROUP BY'ı tek sorgu olarak çalıştırır ve sayfalamayı sizin yerinize halleder.
Eşleşen öğeleri tam olarak saymak
Bir Query'de (tek bir bölüm anahtarı için) ya da Scan'de (tablonun tamamı) Select'i COUNT yapın. Yanıt Count ve ScannedCount döndürür ama hiç öğe verisi vermez. Taranan veri 1 MB'ı aşarsa işlem durur ve LastEvaluatedKey döndürür — o yok olana kadar çağırmaya ve Count eklemeye devam edin. Saymanın okumaktan ucuz olmadığına dikkat edin: COUNT, öğeleri döndürmenin tüketeceği okuma kapasitesinin aynısını tüketir.
Count ile ScannedCount
Count— bu sayfada anahtar/filtre koşullarınızla eşleşen öğeler.ScannedCount— filtrelemeden önce incelenen öğeler. Bir filtre ifadesi sonuçları daraltır ama neyin tarandığını (ya da maliyetini) azaltmaz.
COUNT bir indirim değildir, ölçüldü
"Saymak okumakla aynıya mal olur" iddia etmesi kolay, kuşkulanması da kolay bir cümledir; işte her biri kabaca 3 KB olan 40 öğeyi (toplam 120.700 bayt) tutan bir tabloda, her çağrı ReturnConsumedCapacity: 'TOTAL' ile yapılarak:
| İstek | Count | ScannedCount | ConsumedCapacity |
|---|---|---|---|
Select: 'COUNT' ile Query | 40 | 40 | 15 |
Öğeleri döndüren Query | 40 | 40 | 15 |
Scan, Select: 'COUNT', yarısıyla eşleşen filtre | 20 | 40 | 15 |
Bakılması gereken üçüncü satırdır. Filtre Count'u yarıya indirir, ScannedCount'a dokunmaz ve faturayı hiç oynatmaz.
15, öngöreceğiniz sayıdır: 120.700 bayt, 30 adet dört kilobaytlık okuma birimine yuvarlanır ve bir Query aksini istemedikçe nihai tutarlı olduğu için yarıya iner.
Ucuz yaklaşım
DescribeTable, kabaca altı saatte bir güncellenen tablo geneli bir tahmin olan ItemCount'u döndürür. Ücretsiz ve anlıktır ama gerçek zamanlı değildir — panolar için iyi, kesin toplamlar için değil.
DynamoDB Local'a karşı test ediyorsanız bir uyarı: orada ItemCount anında güncellenir. 40 öğe yazıp DescribeTable çağırmak orada hemen 40 döndürür. Gerçek hizmet bunu yapmayacak, dolayısıyla yerelde geçen bir tazelik mantığı üretimde altı saat yanlış olabilir.
DynoTable ile sayma ve toplama
Ham API size COUNT verir ama GROUP BY, SUM ya da AVG vermez — gruplama ve toplama normalde uygulama kodunuzda olur. DynoTable'ın SQL Workbench'i bunları ekler: SELECT COUNT(*), SUM(total) ya da gruplanmış bir sayım yazın; sayfalama döngüsünü sizin yerinize çalıştırır ve sayfalar aktıkça sayıyı iyileştirir. Yine DynamoDB üzerinden okur, dolayısıyla aynı okuma kapasitesi maliyeti geçerlidir — ama bir döngü yerine tek sorgu yazarsınız ve API'nin doğrudan döndüremeyeceği gruplanmış ve toplanmış sonuçlar alırsınız.
Daha derine inin
DynamoDB'de sayma, toplama ve toplulaştırma sayfasını okuyun ve sayım sorgularını Expression Builder ile oluşturun. Tablolarınıza karşı sayımlar ve toplamalar (COUNT, SUM, GROUP BY) çalıştırmak için DynoTable'ı indirin.
Kaynaklar
- Query — Amazon DynamoDB API Reference
- Scan — Amazon DynamoDB API Reference
- TableDescription — Amazon DynamoDB API Reference
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.
Kapasite rakamları 2026-07-28 tarihinde @aws-sdk/client-dynamodb 3.1095.0 üzerinden DynamoDB Local 3.3.0'a (amazon/dynamodb-local:latest) karşı yeniden üretildi. DynamoDB Local hizmet değildir; yukarıda not edilen ItemCount sapması ayrıştıkları yerlerden biridir.