Tipos de dados do DynamoDB
Cada atributo do DynamoDB é marcado com um código de tipo de uma ou duas letras no formato de transporte. Conhecer o conjunto importa porque o tipo determina tanto como um valor é armazenado quanto como ele conta para o tamanho de um item.
Visão geral
| Código | Tipo | Categoria | Equivalente JSON / JS | Exemplo (DynamoDB-JSON) |
|---|---|---|---|---|
S | String | Escalar | string | {"S": "Ada"} |
N | Number | Escalar | number | {"N": "37"} |
B | Binary | Escalar | Uint8Array / base64 | {"B": "ZGF0YQ=="} |
BOOL | Boolean | Escalar | boolean | {"BOOL": true} |
NULL | Null | Escalar | null | {"NULL": true} |
M | Map | Documento | object | {"M": {"k": {"S": "v"}}} |
L | List | Documento | array | {"L": [{"N": "1"}]} |
SS | String set | Conjunto | — (sem tipo JSON) | {"SS": ["a", "b"]} |
NS | Number set | Conjunto | — | {"NS": ["1", "2"]} |
BS | Binary set | Conjunto | — | {"BS": ["ZA=="]} |
Escalares
S— string (UTF-8; dimensionada pelo comprimento em bytes, não pela contagem de caracteres).N— número, enviado como string para manter a precisão; até 38 dígitos.B— binário, enviado codificado em base64.BOOL—true/false.NULL— um marcador null explícito.
Documentos
M— mapa (objeto). Cada atributo aninhado mantém sua própria marcação de tipo.L— lista. Os elementos podem ter tipos mistos.
{"profile": {"M": {"name": {"S": "Ada"}, "age": {"N": "37"}}}}Conjuntos
SS— conjunto de strings,NS— conjunto de números,BS— conjunto de binários.
Os conjuntos são não ordenados, homogêneos e não podem ser vazios. O mais importante: o JSON puro
não tem tipo de conjunto — um array é transportado de ida e volta como uma lista (L), nunca como um
SS/NS. Isso é uma limitação real de conversão, não um bug; veja a nota do
conversor de DynamoDB-JSON.
Quais tipos podem ser uma chave?
As chaves de partição e de ordenação — na tabela e em qualquer índice — precisam ser um escalar,
e apenas S, N ou B. Você não pode usar como chave um boolean, conjunto, mapa ou lista. Modele uma
chave "composta" concatenando valores em um único S (por exemplo, ORDER#2026#42).
Limites que vale conhecer
- Um item chega ao máximo de 400 KB — cada nome de atributo mais o valor, incluindo os aninhados.
- Os números carregam até 38 dígitos de precisão (positivos ou negativos).
- Mapas e listas aninham até 32 níveis de profundidade.
- Os conjuntos são não vazios e homogêneos — sem conjunto vazio, sem misturar
SeN.
Por que o tipo afeta o custo
O tamanho do item é a soma dos bytes do nome do atributo mais os bytes do valor, e cada tipo é dimensionado de forma diferente — os números são compactados, booleans e nulls ocupam 1 byte, mapas e listas adicionam overhead por elemento. Esse tamanho é arredondado para cima até unidades de capacidade de leitura/escrita. Meça um item real com a calculadora de tamanho de item.
Experimente o DynoTable para ver o tipo de cada atributo e a contagem de bytes ao vivo conforme você edita um item — e para filtrar ou agregar entre atributos tipados no SQL Workbench, que lê cada marcação de tipo para você.