Wie zählt man Items in DynamoDB?
Nutze Select: 'COUNT' auf einer Query oder einem Scan, um passende Items zu zählen, ohne sie zurückzugeben. Jede Antwort zählt nur bis zu 1 MB Gescanntes, du musst also mit LastEvaluatedKey paginieren und die Count-Werte für eine Gesamtsumme addieren. Für eine ungefähre Gesamtzahl der Tabelle liest du ItemCount aus DescribeTable. Für eine gruppierte Zählung — oder ein SUM/AVG über eine Spalte — führt die SQL Workbench von DynoTable COUNT und GROUP BY als eine einzige Abfrage aus und erledigt die Paginierung für dich.
Passende Items exakt zählen
Setze Select auf COUNT bei einer Query (für einen Partition Key) oder einem Scan (ganze Tabelle). Die Antwort liefert Count und ScannedCount, aber keine Item-Daten. Übersteigen die gescannten Daten 1 MB, stoppt die Operation und liefert LastEvaluatedKey — ruf weiter auf und addiere Count, bis er fehlt. Beachte: Zählen ist nicht billiger als Lesen — COUNT verbraucht dieselbe Lesekapazität, die auch das Zurückgeben der Items verbrauchen würde.
Count vs. ScannedCount
Count— Items, die auf dieser Seite deinen Key-/Filterbedingungen entsprechen.ScannedCount— Items, die vor dem Filtern untersucht wurden. Eine Filter Expression engt die Ergebnisse ein, verringert aber nicht das Gescannte (und auch nicht dessen Kosten).
COUNT ist kein Rabatt, gemessen
„Zählen kostet dasselbe wie Lesen" lässt sich leicht behaupten und leicht bezweifeln — hier ist es also, auf einer Tabelle mit 40 Items von je rund 3 KB (insgesamt 120.700 Bytes), jeder Aufruf mit ReturnConsumedCapacity: 'TOTAL':
| Anfrage | Count | ScannedCount | ConsumedCapacity |
|---|---|---|---|
Query mit Select: 'COUNT' | 40 | 40 | 15 |
Query, die die Items zurückgibt | 40 | 40 | 15 |
Scan, Select: 'COUNT', Filter trifft die Hälfte | 20 | 40 | 15 |
Die dritte Zeile ist die interessante. Der Filter halbiert Count, lässt ScannedCount unberührt und bewegt die Rechnung um nichts.
15 ist die Zahl, die du vorhersagen würdest: 120.700 Bytes runden auf 30 Vier-Kilobyte-Read-Einheiten auf, halbiert, weil eine Query letztendlich konsistent ist, solange du nichts anderes verlangst.
Die billige Näherung
DescribeTable liefert ItemCount, eine tabellenweite Schätzung, die etwa alle sechs Stunden aktualisiert wird. Sie ist kostenlos und sofort da, aber nicht in Echtzeit — gut für Dashboards, nicht für exakte Summen.
Eine Warnung, falls du gegen DynamoDB Local testest: Es aktualisiert ItemCount sofort. 40 Items zu schreiben und dort DescribeTable aufzurufen liefert direkt 40. Der echte Dienst tut das nicht — Aktualitätslogik, die lokal besteht, kann in der Produktion sechs Stunden danebenliegen.
Zählen und aggregieren mit DynoTable
Die rohe API gibt dir COUNT, aber kein GROUP BY, SUM oder AVG — Gruppieren und Summieren passieren normalerweise in deinem Anwendungscode. Die SQL Workbench von DynoTable ergänzt sie: Schreib SELECT COUNT(*), SUM(total) oder eine gruppierte Zählung, und sie führt die Paginierungsschleife für dich aus und verfeinert die Zahl, während die Seiten hereinströmen. Sie liest weiterhin über DynamoDB, es gelten also dieselben Lesekapazitätskosten — aber du schreibst eine Abfrage statt einer Schleife und bekommst gruppierte und summierte Ergebnisse, die die API nicht direkt liefern kann.
Tiefer einsteigen
Lies Zählen, summieren und aggregieren in DynamoDB und baue Zähl-Abfragen mit dem Expression Builder. Lade DynoTable herunter, um Zählungen und Aggregate (COUNT, SUM, GROUP BY) gegen deine Tabellen auszuführen.
Referenzen
- Query — Amazon DynamoDB API Reference
- Scan — Amazon DynamoDB API Reference
- TableDescription — Amazon DynamoDB API Reference
Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.
Die Kapazitätswerte wurden am 2026-07-28 gegen DynamoDB Local 3.3.0 (amazon/dynamodb-local:latest) via @aws-sdk/client-dynamodb 3.1095.0 reproduziert. DynamoDB Local ist nicht der Dienst; die oben notierte ItemCount-Abweichung ist eine Stelle, an der sie sich unterscheiden.