Principiante3 min di lettura

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

CodeTipoCategoriaEquivalente JSON / JSEsempio (DynamoDB-JSON)
SStringScalarestring{"S": "Ada"}
NNumberScalarenumber{"N": "37"}
BBinaryScalareUint8Array / base64{"B": "ZGF0YQ=="}
BOOLBooleanScalareboolean{"BOOL": true}
NULLNullScalarenull{"NULL": true}
MMapDocumentobject{"M": {"k": {"S": "v"}}}
LListDocumentarray{"L": [{"N": "1"}]}
SSString setSet— (nessun tipo JSON){"SS": ["a", "b"]}
NSNumber setSet{"NS": ["1", "2"]}
BSBinary setSet{"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.
  • BOOLtrue / 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 S e N.

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.

Aggiornato