Iniciante3 min de leitura

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ódigoTipoCategoriaEquivalente JSON / JSExemplo (DynamoDB-JSON)
SStringEscalarstring{"S": "Ada"}
NNumberEscalarnumber{"N": "37"}
BBinaryEscalarUint8Array / base64{"B": "ZGF0YQ=="}
BOOLBooleanEscalarboolean{"BOOL": true}
NULLNullEscalarnull{"NULL": true}
MMapDocumentoobject{"M": {"k": {"S": "v"}}}
LListDocumentoarray{"L": [{"N": "1"}]}
SSString setConjunto— (sem tipo JSON){"SS": ["a", "b"]}
NSNumber setConjunto{"NS": ["1", "2"]}
BSBinary setConjunto{"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.
  • BOOLtrue / 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 S e N.

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ê.

Atualizado