Tipi di dati DynamoDB
Ogni attributo DynamoDB è contrassegnato con un codice di tipo di una o due lettere nel formato wire. Conoscere l'insieme è importante perché il tipo determina sia come un valore viene memorizzato sia come incide sulla dimensione di un Item.
In sintesi
| Code | 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 | Document | object | {"M": {"k": {"S": "v"}}} |
L | List | Document | 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 per la sua lunghezza in byte, non per il numero di caratteri).N— numero, inviato come stringa per precisione; fino a 38 cifre.B— binario, inviato in codifica base64.BOOL—true/false.NULL— un marcatore null esplicito.
Document
M— map (oggetto). Gli attributi annidati mantengono ciascuno il proprio tag di tipo.L— list. 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 fa il round-trip come una list (L), mai come un SS/NS. Questa è una
limitazione reale di conversione, non un bug; vedi la nota del
convertitore DynamoDB-JSON.
Quali tipi possono essere una chiave?
Le partition key e le sort key — sulla tabella e su qualsiasi Index — 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 un unico S (es. ORDER#2026#42).
Limiti da conoscere
- Un Item arriva al massimo a 400 KB — ogni nome di attributo più il valore, inclusi quelli annidati.
- I numeri portano fino a 38 cifre di precisione (positive o negative).
- Le map e le list si annidano fino a 32 livelli di profondità.
- I set sono non vuoti e omogenei — nessun set vuoto, nessuna mescolanza di
SeN.
Perché il tipo influisce sul costo
La dimensione di un Item è la somma dei byte dei nomi degli attributi più i byte dei valori, e ogni tipo si dimensiona in modo diverso — i numeri sono compattati, i booleani e i null occupano 1 byte, le map e le list aggiungono un overhead per elemento. Quella dimensione viene arrotondata per eccesso a unità di capacità di lettura/scrittura capacity units. Misura un Item reale con il calcolatore della dimensione degli 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 Workbench SQL, che legge ogni tag di tipo al posto tuo.