Einsteiger5 Min. Lesezeit

Tabellengröße und Item-Anzahl in DynamoDB

Es gibt kein SELECT COUNT(*), das du günstig auf eine DynamoDB-Tabelle richten kannst. DynamoDB gibt dir zwei sehr verschiedene Antworten auf „wie groß ist diese Tabelle?“: eine kostenlose Schätzung, die bis zu sechs Stunden alt sein kann, und eine exakte Zahl, die einen vollständigen Lesevorgang der Tabelle kostet. Die meiste Verwirrung nach dem Muster „warum stimmt meine Item-Anzahl nicht?“ entsteht daraus, das eine zu wählen und das Verhalten des anderen zu erwarten.

Wie bekomme ich Item-Anzahl und Größe einer DynamoDB-Tabelle?

Ruf DescribeTable auf: Es liefert ItemCount und TableSizeBytes kostenlos, aber laut AWS gilt "DynamoDB updates this value approximately every six hours. Recent changes might not be reflected in this value" (AWS API-Referenz). Für eine exakte Zahl führst du einen Scan mit --select COUNT aus — er gibt nur die Anzahl zurück, liest (und berechnet) aber jedes Item. Eine GUI wie DynoTable zeigt die Schätzungen an jeder Tabelle und kann auf Wunsch exakte Zahlen ermitteln.

Du willstNimmKostenAktualität
Ungefähre Anzahl + Größe, kostenlosDescribeTablekeine (Metadaten-Aufruf)~6 h veraltet
Exakte GesamtanzahlScan mit Select COUNTliest die ganze Tabellelive
Exakte Anzahl für einen KeyQuery mit Select COUNTliest die passenden Itemslive
Anzahl einer gefilterten TeilmengeScan/Query + Filter + COUNTliest alles Gescanntelive

Methode 1: DescribeTable (kostenlos, ~6 h veraltet)

DescribeTable ist ein Metadaten-Lookup — es liest keine Items, verbraucht also keine Lesekapazität und trägt die beiden Zahlen, die du suchst:

aws dynamodb describe-table --table-name Orders \
  --query 'Table.[ItemCount, TableSizeBytes]'

Für beide gilt derselbe Vorbehalt, wörtlich aus der API-Referenz: "DynamoDB updates this value approximately every six hours. Recent changes might not be reflected in this value." Eine Tabelle, die du gerade massenhaft befüllt hast, kann also stundenlang ItemCount: 0 melden — die Zahl ist nicht falsch, sie ist eine Momentaufnahme.

Dieselbe Antwort trägt außerdem Zahlen pro Index: Jede GSI und LSI meldet ihre eigenen ItemCount und IndexSizeBytes im selben Sechs-Stunden-Takt. Die Item-Anzahl eines mit der der Tabelle zu vergleichen, ist ein netter kostenloser Gesundheitscheck — er sagt dir, wie viele Items den Index-Key tatsächlich tragen.

Methode 2: exakte Anzahl mit Scan + Select COUNT

Wenn „ungefähr, Stand heute Morgen“ nicht reicht, zähle richtig:

aws dynamodb scan --table-name Orders --select COUNT

Was du vor dem Ausführen wissen solltest, alles aus der Scan-API-Referenz:

  • COUNT "returns the number of matching items, rather than the matching items themselves" — weniger Netzwerkverkehr, aber "this uses the same quantity of read capacity units as getting the items". Eine exakte Zählung einer 100-GB-Tabelle ist ein 100-GB-Lesevorgang auf deiner Rechnung.
  • Eine einzelne Anfrage stoppt weiterhin bei 1 MB gescannter Daten; das Count der Antwort "only return[s] the count of items specific to a single scan request". Die CLI folgt LastEvaluatedKey und summiert die Seiten für dich; im SDK-Code schleifst und addierst du — siehe Paginierung.
  • Bei einer großen Tabelle teilst du die Arbeit mit einem parallelen Scan (--segment / --total-segments) auf und summierst die Anzahlen je Segment.

Eine Teilmenge zählen

  • Items unter einem Partition Key: Query mit --select COUNT — liest nur die Items dieses Keys und ist damit so günstig, wie die Daten klein sind. So zählt man eine richtig.
  • Items, die auf einen Filter passen: ergänze eine FilterExpression — aber denk daran, dass abgerechnet wird, was in ScannedCount steht, nicht in Count: DynamoDB filtert nach dem Lesen, „zähl die archivierten Bestellungen“ über einen gefilterten Scan bezahlt also jede Bestellung. Ein hoher ScannedCount neben einem kleinen Count ist die Signatur eines Filters, der eine GSI sein will — siehe Filterstrategien.

Für reichhaltigere Fragen — Anzahlen je Status, Summen, Durchschnitte — hat DynamoDB gar kein GROUP BY; die Umwege stehen in Zählen, Summieren & Aggregieren. (Oder spar dir den Umweg: Der SQL Workbench von DynoTable führt GROUP BY und Aggregate clientseitig aus.)

Tabellengröße und Item-Anzahl in DynoTable

DynoTable legt dir beide Antworten dorthin, wo du ohnehin hinschaust. Jede offene Tabelle hat in der Tab-Toolbar eine Einstellungen-Schaltfläche; der Dialog, den sie öffnet, zeigt:

  • Primärschlüssel und Secondary Indexes — die Form der Tabelle auf einen Blick.
  • Items · Größe · Ø Item — die DescribeTable-Schätzungen von DynamoDB selbst, als Schätzungen ausgewiesen, mit dem Sechs-Stunden-Vorbehalt einen Hover entfernt.
  • Tabelle indizieren — unter Indexierung, ein Sampling-Scan per Klick, der die gefundenen Attribute erfasst (inklusive verschachtelter Pfade wie commonData.status), mit Live-Fortschritt. Der Scan ist gedeckelt, seltene Attribute können also fehlen; die Grenzen stehen unter Tabellenübersicht und -indexierung. Er speist die Feld-Autovervollständigung und einen abgeleiteten TypeScript-/Zod-/JSON-Schema-Export, und er verursacht normale DynamoDB-Lesekosten — die App sagt das vorab.
Der Tabellen-Dialog in DynoTable: Keys und Indizes, die Schätzzeile Items / Größe / Ø Item und die Liste der indizierten Felder.
Der Tabellen-Dialog in DynoTable: Keys und Indizes, die Schätzzeile Items / Größe / Ø Item und die Liste der indizierten Felder.

Und für die exakten Zahlen berechnet der eingebaute KI-Agent auf Anfrage Anzahlen, Summen und Aufschlüsselungen je Gruppe über die gesamte Tabelle — er liest jedes passende Item, statt eine Seite zu sampeln, und er fragt nach, bevor er etwas ausführt, das Lesekapazität kostet.

FAQ

Warum stimmt meine DynamoDB-Item-Anzahl nicht? ItemCount (und TableSizeBytes) aktualisieren sich „ungefähr alle sechs Stunden“, kürzlich erfolgte Schreib- und Löschvorgänge sind also noch nicht enthalten. Die Tabellenübersicht der Konsole zeigt dieselben DescribeTable-Zahlen mit derselben Verzögerung.

Wie zähle ich Zeilen in DynamoDB exakt? aws dynamodb scan --table-name X --select COUNT — die CLI blättert durch die ganze Tabelle und summiert die Anzahlen je Seite. Das ist exakt, kostet aber dieselbe Lesekapazität wie das Holen jedes Items.

Ist DescribeTable kostenlos? Es verbraucht keine Lesekapazität — es ist ein Metadaten-Aufruf, kein Datenlesevorgang, ein Polling rührt den Durchsatz deiner Tabelle also nicht an.

Wie finde ich die Größe eines einzelnen Items heraus? DynamoDB misst nach Item-Größe (aufgerundet je 1 KB geschrieben / 4 KB gelesen). Füge ein Item in den Item-Size-Rechner ein, um seine abgerechnete Größe zu sehen, und schau für die Obergrenze in das 400-KB-Item-Limit.

Beeinflusst die Item-Anzahl meine Rechnung? Speicher wird nach TableSizeBytes abgerechnet und Anfragen nach Item-Größe × Anzahl der Anfragen — nicht direkt nach Item-Anzahl. Gib die Zahlen deiner Tabelle in den Preisrechner ein, um das monatliche Bild über On-Demand und Provisioned zu sehen.

Du willst Form, Schätzungen und indizierte Felder deiner Tabelle einen Klick entfernt haben? Lade DynoTable herunter und öffne den Tabellen-Dialog an einer beliebigen Tabelle.

Aktualisiert