Tipi di dato di DynamoDB
Ogni attributo di DynamoDB è etichettato con un codice di tipo di una o due lettere nel formato di trasmissione. Conoscere l'insieme è importante perché il tipo determina sia come un valore viene memorizzato sia quanto pesa nella dimensione di un Item.
Quali tipi di dato supporta DynamoDB?
DynamoDB supporta dieci tipi di dato su tre categorie. Gli scalari sono String (S), Number (N), Binary (B), Boolean (BOOL) e Null (NULL). I documenti sono Map (M) e List (L), che annidano altri tipi. I set sono String Set (SS), Number Set (NS) e Binary Set (BS) — non ordinati, omogenei e non vuoti. Solo S, N e B possono essere una chiave.
| Codice | Tipo | Categoria | Equivalente JSON / JS | Esempio (DynamoDB-JSON) |
|---|---|---|---|---|
S | String | Scalare | string | {"S": "Ada"} |
N | Number | Scalare | number | {"N": "37"} |
B | Binary | Scalare | Uint8Array / base64 | {"B": "ZGF0YQ=="} |
BOOL | Boolean | Scalare | boolean | {"BOOL": true} |
NULL | Null | Scalare | null | {"NULL": true} |
M | Map | Documento | object | {"M": {"k": {"S": "v"}}} |
L | List | Documento | array | {"L": [{"N": "1"}]} |
SS | String set | Set | — (nessun tipo JSON) | {"SS": ["a", "b"]} |
NS | Number set | Set | — | {"NS": ["1", "2"]} |
BS | Binary set | Set | — | {"BS": ["ZA=="]} |
Scalari
S— stringa (UTF-8; dimensionata dalla sua lunghezza in byte, non dal numero di caratteri).N— numero, inviato come stringa per precisione; fino a 38 cifre.B— binario, inviato codificato in base64.BOOL—true/false.NULL— un marcatore null esplicito.
Documenti
M— mappa (oggetto). Ogni attributo annidato mantiene la propria etichetta di tipo.L— lista. Gli elementi possono essere di tipi misti.
{"profile": {"M": {"name": {"S": "Ada"}, "age": {"N": "37"}}}}Set
SS— string set,NS— number set,BS— binary set.
I set sono non ordinati, omogenei e non possono essere vuoti. Fondamentale: il JSON semplice non
ha un tipo set — un array viene convertito in una list (L), mai in un SS/NS. È un
vero limite di conversione, non un bug; vedi la nota sul
convertitore DynamoDB-JSON.
Quali tipi possono essere una chiave?
Le chiavi e — sulla tabella e su qualsiasi indice — devono essere uno scalare,
e solo S, N o B. Non puoi usare come chiave un boolean, un set, una map o una list. Modella una
chiave "composita" concatenando i valori in una sola S (per es. ORDER#2026#42).
Limiti da conoscere
- Un Item raggiunge al massimo 400 KB — ogni nome di attributo più valore, inclusi quelli annidati.
- I numeri portano fino a 38 cifre di precisione (positive o negative).
- Map e list si annidano fino a 32 livelli di profondità.
- I set sono non vuoti e omogenei — nessun set vuoto, nessun mix di
SeN.
Perché il tipo influisce sul costo
La dimensione di un Item è la somma dei byte dei nomi di attributo più i byte dei valori, e ogni tipo si dimensiona in modo diverso — i numeri sono compattati, boolean e null occupano 1 byte, map e list aggiungono un overhead per elemento. Quella dimensione viene arrotondata per eccesso alle unità di capacità di lettura/scrittura. Misura un Item reale con il calcolatore delle dimensioni dell'Item.
Fallo in DynoTable
La distinzione set-vs-list vista sopra è la cosa che gli strumenti di solito nascondono. L'editor di Item di DynoTable la rende esplicita con un interruttore di formato:
- Plain JSON — i primitivi restano semplici (
"age": 30), ma i set mantengono il loro wrapper di tipo così sopravvivono alla conversione:"tags": { "SS": ["a", "b"] },"scores": { "NS": ["1.5", "2.5"] }. Questa è la forma leggibile per l'editing di tutti i giorni. - DynamoDB JSON — la forma canonica AWS , dove ogni valore
porta la sua etichetta di tipo:
"age": { "N": "30" },"name": { "S": "alice" }.
Passare dall'una all'altra ti mostra esattamente come ogni tipo scalare, documento e set
è rappresentato sul filo — e poiché i tipi set non hanno equivalente in plain JSON,
l'interruttore è l'unico modo per creare a mano un SS/NS/BS senza
fare il marshalling a mano dell'intero Item.

Prova DynoTable per vedere il tipo di ogni attributo e il conteggio dei byte in tempo reale mentre modifichi un Item — e per filtrare o aggregare su attributi tipizzati nel SQL Workbench, che legge per te ogni etichetta di tipo. Per convertire un blob marshalled senza l'app, il convertitore DynamoDB-JSON fa la stessa conversione nel browser.


