Einsteiger4 Min. Lesezeit

DynamoDB-Datentypen

Jedes DynamoDB-Attribut ist im Wire-Format mit einem ein- oder zweibuchstabigen Typcode versehen. Diesen Satz zu kennen ist wichtig, weil der Typ sowohl bestimmt, wie ein Wert gespeichert wird, als auch, wie er zur Größe eines Items zählt.

Welche Datentypen unterstützt DynamoDB?

DynamoDB unterstützt zehn Datentypen in drei Kategorien. Skalare sind String (S), Number (N), Binary (B), Boolean (BOOL) und Null (NULL). Dokumente sind Map (M) und List (L), die andere Typen verschachteln. Sets sind String Set (SS), Number Set (NS) und Binary Set (BS) — ungeordnet, homogen und nicht leer. Nur S, N und B können ein Key sein.

CodeTypKategorieJSON- / JS-ÄquivalentBeispiel (DynamoDB-JSON)
SStringSkalarstring{"S": "Ada"}
NNumberSkalarnumber{"N": "37"}
BBinarySkalarUint8Array / base64{"B": "ZGF0YQ=="}
BOOLBooleanSkalarboolean{"BOOL": true}
NULLNullSkalarnull{"NULL": true}
MMapDokumentobject{"M": {"k": {"S": "v"}}}
LListDokumentarray{"L": [{"N": "1"}]}
SSString SetSet— (kein JSON-Typ){"SS": ["a", "b"]}
NSNumber SetSet{"NS": ["1", "2"]}
BSBinary SetSet{"BS": ["ZA=="]}

Skalare

  • S — String (UTF-8; dimensioniert nach seiner Byte-Länge, nicht der Zeichenanzahl).
  • N — Zahl, aus Präzisionsgründen als String gesendet; bis zu 38 Stellen.
  • B — Binary, base64-kodiert gesendet.
  • BOOLtrue / false.
  • NULL — ein expliziter Null-Marker.

Dokumente

  • M — Map (Objekt). Verschachtelte Attribute behalten jeweils ihr eigenes Typ-Tag.
  • L — List. Elemente dürfen gemischte Typen sein.
{"profile": {"M": {"name": {"S": "Ada"}, "age": {"N": "37"}}}}

Sets

  • SS — String Set, NS — Number Set, BS — Binary Set.

Sets sind ungeordnet, homogen und können nicht leer sein. Entscheidend: reines JSON hat keinen Set-Typ — ein Array wird als List (L) hin- und zurückkonvertiert, nie als SS/NS. Das ist eine echte Konvertierungseinschränkung, kein Bug; siehe die Anmerkung zum DynamoDB-JSON-Konverter.

Welche Typen können ein Key sein?

- und -Keys — auf der Tabelle und auf jedem Index — müssen ein Skalar sein, und nur S, N oder B. Du kannst nicht auf einem Boolean, Set, Map oder einer List keyen. Modelliere einen „zusammengesetzten“ Key, indem du Werte in einem S verkettest (z. B. ORDER#2026#42).

Wissenswerte Limits

  • Ein Item ist bei 400 KB ausgereizt — jeder Attributname plus Wert, einschließlich verschachtelter.
  • Zahlen tragen bis zu 38 Stellen Präzision (positiv oder negativ).
  • Maps und Lists verschachteln bis zu 32 Ebenen tief.
  • Sets sind nicht leer und homogen — kein leeres Set, kein Mischen von S und N.

Warum der Typ die Kosten beeinflusst

Die Item-Größe ist die Summe aus Attributnamen-Bytes plus Wert-Bytes, und jeder Typ dimensioniert unterschiedlich — Zahlen werden komprimiert, Booleans und Nulls sind 1 Byte, Maps und Lists fügen Overhead pro Element hinzu. Diese Größe rundet auf Read-/Write- Kapazitätseinheiten auf. Miss ein echtes Item mit dem Item-Größen-Rechner.

In DynoTable umsetzen

Die Set-vs-List-Unterscheidung oben ist das, was Tooling meist versteckt. DynoTables Item-Editor macht sie explizit mit einem Format-Umschalter:

  • Reines JSON — Primitive bleiben schlicht ("age": 30), aber Sets behalten ihren Typ-Wrapper, damit sie den Round-Trip überstehen: "tags": { "SS": ["a", "b"] }, "scores": { "NS": ["1.5", "2.5"] }. Das ist die lesbare Form für das alltägliche Bearbeiten.
  • DynamoDB JSON — die kanonische AWS- Form, in der jeder Wert sein Typ-Tag trägt: "age": { "N": "30" }, "name": { "S": "alice" }.

Zwischen ihnen zu wechseln zeigt dir genau, wie jeder Skalar-, Dokument- und Set-Typ auf dem Wire dargestellt wird — und weil die Set-Typen kein reines JSON-Äquivalent haben, ist der Umschalter der einzige Weg, ein SS/NS/BS von Hand zu erstellen, ohne das ganze Item von Hand zu marshallen.

DynoTables Item-Editor zeigt ein Item mit einem Number Set und einem String Set sowie den Umschalter Reines JSON / DynamoDB-JSON.
DynoTables Item-Editor zeigt ein Item mit einem Number Set und einem String Set sowie den Umschalter Reines JSON / DynamoDB-JSON.

Probiere DynoTable, um beim Bearbeiten eines Items den Typ jedes Attributs und die Live-Byte-Zählung zu sehen — und um über typisierte Attribute im SQL Workbench zu filtern oder zu aggregieren, der jedes Typ-Tag für dich liest. Um einen marshalled Blob ohne die App zu konvertieren, erledigt der DynamoDB-JSON-Konverter denselben Round-Trip im Browser.

Aktualisiert