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

¿Qué tipos de datos admite DynamoDB?

DynamoDB admite diez tipos de datos en tres categorías. Los escalares son String (S), Number (N), Binary (B), Boolean (BOOL) y Null (NULL). Los documentos son Map (M) y List (L), que anidan otros tipos. Los sets son String Set (SS), Number Set (NS) y Binary Set (BS): desordenados, homogéneos y no vacíos. Solo S, N y B pueden ser una clave.

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 setSet— (sin tipo JSON){"SS": ["a", "b"]}
NSNumber setSet{"NS": ["1", "2"]}
BSBinary setSet{"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 string para preservar la precisión; hasta 38 dígitos.
  • B — binario, enviado codificado en base64.
  • BOOLtrue / false.
  • NULL — un marcador de null explícito.

Documentos

  • M — map (objeto). Los atributos anidados conservan cada uno su propia etiqueta de tipo.
  • L — list. Los elementos pueden ser de tipos mixtos.
{"profile": {"M": {"name": {"S": "Ada"}, "age": {"N": "37"}}}}

Sets

  • SS — string set, NS — number set, BS — binary set.

Los sets son desordenados, homogéneos y no pueden estar vacíos. Y algo crucial: el JSON plano no tiene un tipo set — un array hace un round-trip como una list (L), nunca como un SS/NS. Es una limitación de conversión real, no un bug; consulta la nota del conversor de DynamoDB-JSON.

¿Qué tipos pueden ser una clave?

Las claves de y de — en la tabla y en cualquier índice — deben ser un escalar, y solo S, N o B. No puedes usar como clave un boolean, set, map o list. Modela una clave «compuesta» concatenando valores en un solo 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 tienen hasta 38 dígitos de precisión (positivos o negativos).
  • Los maps y las lists se anidan hasta 32 niveles de profundidad.
  • Los sets son no vacíos y homogéneos: sin sets vacíos, sin mezclar S y N.

Por qué el tipo afecta al coste

El tamaño de un Item es la suma de los bytes de los nombres de atributo más los bytes de los valores, y cada tipo se dimensiona de forma distinta: los números se compactan, los booleans y los nulls ocupan 1 byte, y los maps y las lists añaden sobrecarga por elemento. Ese tamaño se redondea hacia arriba a unidades de capacidad de lectura/escritura. Mide un Item real con la calculadora de tamaño de Items.

Hazlo en DynoTable

La distinción set-frente-a-list de arriba es justo lo que las herramientas suelen ocultar. El editor de Items de DynoTable la hace explícita con un conmutador de formato:

  • JSON plano — los primitivos se quedan en plano ("age": 30), pero los sets conservan su envoltorio de tipo para que sobrevivan al round-trip: "tags": { "SS": ["a", "b"] }, "scores": { "NS": ["1.5", "2.5"] }. Esta es la forma legible para la edición del día a día.
  • DynamoDB JSON — la forma canónica de AWS, donde cada valor lleva su etiqueta de tipo: "age": { "N": "30" }, "name": { "S": "alice" }.

Cambiar entre ambas te muestra exactamente cómo se representa cada tipo escalar, de documento y de set en el formato de transporte — y como los tipos set no tienen equivalente en JSON plano, el conmutador es la única forma de crear a mano un SS/NS/BS sin hacer el marshalling del Item entero.

El editor de Items de DynoTable mostrando un Item con un number set y un string set, y el conmutador JSON plano / DynamoDB-JSON.
El editor de Items de DynoTable mostrando un Item con un number set y un string set, y el conmutador JSON plano / DynamoDB-JSON.

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 sobre atributos tipados en el SQL Workbench, que lee cada etiqueta de tipo por ti. Para convertir un blob marshalled sin la aplicación, el conversor de DynamoDB-JSON hace el mismo round-trip en el navegador.

Actualizado