Principiante3 min de lectura

Tipos de datos de DynamoDB

Cada atributo de DynamoDB se etiqueta con un código de tipo de una o dos letras en el formato de transporte. Conocer el conjunto importa porque el tipo determina tanto cómo se almacena un valor como cuánto cuenta para el tamaño de un Item.

De un vistazo

CódigoTipoCategoríaEquivalente JSON / JSEjemplo (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— (sin tipo JSON){"SS": ["a", "b"]}
NSNumber setConjunto{"NS": ["1", "2"]}
BSBinary setConjunto{"BS": ["ZA=="]}

Escalares

  • S — string (UTF-8; su tamaño se calcula por su longitud en bytes, no por el número de caracteres).
  • N — número, enviado como una cadena por precisión; hasta 38 dígitos.
  • B — binario, enviado codificado en base64.
  • BOOLtrue / false.
  • NULL — un marcador de null explícito.

Documentos

  • M — mapa (objeto). Cada atributo anidado conserva su propia etiqueta de tipo.
  • L — lista. Los elementos pueden ser de tipos mixtos.
{"profile": {"M": {"name": {"S": "Ada"}, "age": {"N": "37"}}}}

Conjuntos

  • SS — conjunto de cadenas, NS — conjunto de números, BS — conjunto binario.

Los conjuntos no están ordenados, son homogéneos y no pueden estar vacíos. Lo más importante: el JSON plano no tiene un tipo conjunto — un array se transporta de ida y vuelta como una lista (L), nunca como un SS/NS. Esa es una limitación real de conversión, no un error; consulta la nota del conversor de DynamoDB-JSON.

¿Qué tipos pueden ser una clave?

Las claves de partición y de ordenación —en la tabla y en cualquier índice— deben ser un escalar, y solo S, N o B. No puedes usar como clave un booleano, un conjunto, un mapa o una lista. Modela una clave «compuesta» concatenando valores en un único S (p. ej. ORDER#2026#42).

Límites que conviene conocer

  • Un Item alcanza un máximo de 400 KB —cada nombre de atributo más su valor, incluidos los anidados.
  • Los números admiten hasta 38 dígitos de precisión (positivos o negativos).
  • Los mapas y las listas se anidan hasta 32 niveles de profundidad.
  • Los conjuntos no están vacíos y son homogéneos —sin conjuntos vacíos, sin mezclar S y N.

Por qué el tipo afecta al coste

El tamaño del Item es la suma de los bytes del nombre del atributo más los bytes del valor, y cada tipo se calcula de forma diferente —los números se compactan, los booleanos y los nulls ocupan 1 byte, los mapas y las listas añaden sobrecarga por elemento. Ese tamaño se redondea hacia arriba a las unidades de capacidad de lectura/escritura. Mide un Item real con la calculadora de tamaño de Items.

Prueba DynoTable para ver el tipo de cada atributo y el recuento de bytes en vivo mientras editas un Item —y para filtrar o agregar entre atributos tipados en el SQL Workbench, que lee cada etiqueta de tipo por ti.

Actualizado