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.
| Code | Typ | Kategorie | JSON- / JS-Äquivalent | Beispiel (DynamoDB-JSON) |
|---|---|---|---|---|
S | String | Skalar | string | {"S": "Ada"} |
N | Number | Skalar | number | {"N": "37"} |
B | Binary | Skalar | Uint8Array / base64 | {"B": "ZGF0YQ=="} |
BOOL | Boolean | Skalar | boolean | {"BOOL": true} |
NULL | Null | Skalar | null | {"NULL": true} |
M | Map | Dokument | object | {"M": {"k": {"S": "v"}}} |
L | List | Dokument | array | {"L": [{"N": "1"}]} |
SS | String Set | Set | — (kein JSON-Typ) | {"SS": ["a", "b"]} |
NS | Number Set | Set | — | {"NS": ["1", "2"]} |
BS | Binary Set | Set | — | {"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.BOOL—true/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
SundN.
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.

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.


