Tipos de datos y reglas de nomenclatura admitidos en Amazon DynamoDB
En esta sección se describen las reglas de nomenclatura de Amazon DynamoDB y los distintos tipos de datos que DynamoDB admite. Existen límites que se aplican a los tipos de datos. Para obtener más información, consulte Tipos de datos.
Reglas de nomenclatura
Las tablas, los atributos y otros objetos de DynamoDB deben tener nombres. Los nombres deben ser significativos y concisos; por ejemplo, Products, Books y Authors son nombres que indican claramente su significado.
A continuación, se indican las reglas de nomenclatura de DynamoDB:
-
Todos los nombres deben codificarse mediante UTF-8 y distinguen entre mayúsculas y minúsculas.
-
Los nombres de las tablas y los índices deben tener entre 3 y 255 caracteres, que solo pueden ser los siguientes:
-
a-z
-
A-Z
-
0-9
-
_
(guion bajo) -
-
(guion) -
.
(punto)
-
-
Los nombres de atributo deben tener al menos un carácter y un tamaño inferior a 64 KB. Se considera una práctica recomendada mantener los nombres de los atributos lo más cortos posible. Esto contribuye a reducir las unidades de solicitud de lectura consumidas, ya que los nombres de los atributos se incluyen en la medición del uso del almacenamiento y del rendimiento.
A continuación se muestran las excepciones. Los siguientes nombres de atributo no pueden tener más de 255 caracteres:
-
Nombres de clave de partición de índice secundario
-
Nombres de clave de clasificación de índice secundario
-
Nombres de atributos proyectados especificados por el usuario (aplicables solo a índices secundarios locales)
-
Palabras reservadas y caracteres especiales
DynamoDB tiene una lista de palabras reservadas y caracteres especiales. Para ver una lista completa, consulte Palabras reservadas en DynamoDB. También los siguientes caracteres tienen un significado especial en DynamoDB: # (hash) y : (dos puntos).
Aunque DynamoDB permite utilizar estas palabras reservadas y caracteres especiales en los nombres, recomendamos que evite hacerlo, porque tendría que definir variables de marcador de posición cada vez que utilizase estos nombres en una expresión. Para obtener más información, consulte Nombres de atributos de expresión en DynamoDB.
Tipos de datos
DynamoDB admite muchos tipos de datos para los atributos de una tabla. Se pueden categorizar como se indica a continuación:
-
Tipos escalares: un tipo escalar es aquel que puede representar exactamente un valor. Los tipos escalares son Number, String, Binary, Boolean y Null.
-
Tipos de documentos: un tipo de documento puede representar una estructura compleja con atributos anidados, como los que se encontraría en un documento JSON. Los tipos de documentos son List y Map.
-
Tipos de conjuntos: un tipo de conjunto puede representar varios valores escalares. Los tipos de conjuntos son String Set, Number Set y Binary Set.
Al crear una tabla o un índice secundario, debe especificar los nombres y los tipos de datos de cada uno de los atributos de clave principal (clave de partición y clave de ordenación). Además, cada atributo de clave principal debe definirse como de tipo String, Number o Binary.
DynamoDB es una base de datos NoSQL sin esquema. Esto significa que, a excepción de los atributos de clave principal, no tiene que definir atributos ni tipos de datos cuando crea las tablas. En comparación, las bases de datos relacionales requieren que se definan los nombres y los tipos de datos de cada columna al crear la tabla.
A continuación se muestran las descripciones de cada tipo de datos, junto con ejemplos en formato JSON.
Tipos escalares
Los tipos escalares son Number, String, Binary, Boolean y Null.
Número
Los números pueden ser positivos, negativos o cero. Los números pueden tener hasta 38 dígitos de precisión. Si excede este tope, se generará una excepción. Si necesita una precisión superior a 38 dígitos, puede utilizar cadenas.
-
Rango de valores positivos: de 1E-130 a 9.9999999999999999999999999999999999999E+125
-
Rango de valores negativos: de -9.9999999999999999999999999999999999999E+125 a -1E-130
En DynamoDB, los números se representan con longitud variable. Los ceros iniciales y finales se recortan.
Todos los números se envían a través de la red a DynamoDB como cadenas, para maximizar la compatibilidad entre lenguajes y bibliotecas. Sin embargo, DynamoDB los trata como atributos de tipo Number en las operaciones matemáticas.
Puede utilizar el tipo de datos Number para representar una fecha o una marca temporal. Una forma de hacerlo es utilizar fechas en formato de tiempo Unix, es decir, el número de segundos desde las 00:00:00 UTC del 1 de enero de 1970. Por ejemplo, la fecha de inicio 1437136300
representa las 12:31:40 UTC del 17 de julio de 2015.
Para obtener más información, consulte http://en.wikipedia.org/wiki/Unix_time
Cadena
Los valores de tipo String son Unicode con codificación binaria UTF-8. La longitud mínima de una cadena puede ser cero si el atributo no se utiliza como clave de un índice o tabla y tiene un límite de tamaño máximo de 400 KB para los elementos de DynamoDB.
Las siguientes restricciones adicionales son aplicables a atributos de clave principal definidos como cadena de tipo:
-
Para una clave principal simple, la longitud máxima del valor del primer atributo (clave de partición) es 2048 KB.
-
Para una clave principal compuesta, la longitud máxima del valor del segundo atributo (clave de ordenación) es 1024 KB.
DynamoDB recopila y compara las cadenas utilizando los bytes de la codificación de cadena UTF-8 subyacente. Por ejemplo, "a
" (0x61) es mayor que "A
" (0x41) y "¿
" (0xC2BF) es mayor que "z
" (0x7A).
Puede utilizar el tipo de datos String para representar una fecha o una marca temporal. Una forma de hacerlo es utilizar cadenas ISO 8601, tal y como se muestra en estos ejemplos:
-
2016-02-15
-
2015-12-21T17:42:34Z
-
20150311T122706Z
Para obtener más información, consulte http://en.wikipedia.org/wiki/ISO_8601
nota
A diferencia de las bases de datos relacionales convencionales, DynamoDB no admite de forma nativa un tipo de datos de fecha y hora. En cambio, puede ser útil almacenar los datos de fecha y hora como un tipo de dato numérico, mediante el tiempo de época de Unix.
Binario
Los atributos de tipo Binary pueden almacenar cualquier tipo de datos binarios, como texto comprimidos, datos cifrados o imágenes. Siempre que DynamoDB compara valores de tipo Binary, trata cada byte de los datos binarios como sin signo.
La longitud de un atributo binario puede ser cero si el atributo no se utiliza como clave de un índice o tabla y tiene un límite de tamaño máximo de 400 KB para los elementos de DynamoDB.
Si define un atributo de clave principal como atributo de tipo Binary, se aplican las siguientes restricciones adicionales:
-
Para una clave principal simple, la longitud máxima del valor del primer atributo (clave de partición) es 2048 KB.
-
Para una clave principal compuesta, la longitud máxima del valor del segundo atributo (clave de ordenación) es 1024 KB.
Las aplicaciones deben codificar los valores de tipo Binary en formato codificado en base64 antes de enviarlos a DynamoDB. Al recibirlos, DynamoDB decodifica los datos y los convierte a matrices de bytes sin signo; a continuación, utiliza ese resultado como longitud del atributo de tipo Binary.
El siguiente ejemplo es un atributo de tipo Binary en el que se utiliza texto con la codificación en base64.
dGhpcyB0ZXh0IGlzIGJhc2U2NC1lbmNvZGVk
Booleano
Un atributo de tipo Boolean puede almacenar los valores true
o false
.
Nulo
Null representa un atributo con un estado desconocido o sin definir.
Tipos de documentos
Los tipos de documentos son List y Map. Estos tipos de datos pueden anidarse unos en otros para representar estructuras de datos complejas con un máximo de 32 niveles de profundidad.
No existe ningún límite respecto al número de valores de una lista o un mapa, siempre y cuando el elemento que contenga los valores se ajuste al límite de tamaño de elemento de DynamoDB (400 KB).
El valor de un atributo puede ser una cadena vacía o un valor binario vacío si el atributo no se utiliza en una tabla o clave de índice. El valor de un atributo no puede ser un conjunto vacío (conjunto de cadenas, conjunto de números o conjunto binario); sin embargo, sí se permiten listas y mapas vacíos. Se pueden utilizar valores binarios y de cadena vacíos en las listas y los mapas. Para obtener más información, consulte Atributos.
Enumeración
Un atributo de tipo List puede almacenar una colección ordenada de valores. Las listas deben ir entre corchetes: [ ... ]
.
Una lista es similar a una matriz JSON. No hay ninguna limitación respecto a los tipos de datos que se pueden almacenar en una entrada de lista y no es preciso que las entradas de una entrada de lista sean del mismo tipo.
En el siguiente ejemplo se muestra una lista que contiene dos cadenas y un número.
FavoriteThings: ["Cookies", "Coffee", 3.14159]
nota
DynamoDB permite usar entradas individuales contenidas en las listas, aunque estas entradas estén anidadas a gran profundidad. Para obtener más información, consulte Uso de expresiones en DynamoDB.
Asignación
Un atributo de tipo Map puede almacenar una colección desordenada de pares nombre-valor. Los mapas deben ir entre llaves: { ... }
.
Un mapa es similar a un objeto JSON. No hay ninguna limitación respecto a los tipos de datos que se pueden almacenar en una entrada de mapa y no es preciso que las entradas de un mapa sean del mismo tipo.
Los mapas son idóneos para almacenar documentos JSON en DynamoDB. En el siguiente ejemplo se muestra un mapa que contiene una cadena, un número y una lista anidada que contiene otro mapa.
{ Day: "Monday", UnreadEmails: 42, ItemsOnMyDesk: [ "Coffee Cup", "Telephone", { Pens: { Quantity : 3}, Pencils: { Quantity : 2}, Erasers: { Quantity : 1} } ] }
nota
DynamoDB permite usar entradas individuales contenidas en los mapas, aunque estas entradas estén anidadas a gran profundidad. Para obtener más información, consulte Uso de expresiones en DynamoDB.
Sets
DynamoDB admite tipos que representan conjuntos de valores de tipo number, string o binary. Todas las entradas de un conjunto deben ser del mismo tipo. Por ejemplo, un conjunto de números solo puede contener números y un conjunto de cadenas solo puede contener cadenas.
No existe ningún límite respecto al número de valores de un conjunto, siempre y cuando el elemento que contenga los valores se ajuste al límite de tamaño de elemento de DynamoDB (400 KB).
Cada valor contenido en un conjunto debe ser único. No se conserva el orden de los valores dentro de un conjunto. Por lo tanto, sus aplicaciones no deben confiar en ningún orden particular de elementos dentro del conjunto. DynamoDB no admite conjuntos vacíos; sin embargo, sí se pueden utilizar valores binarios y de cadena vacíos dentro de un conjunto.
En el siguiente ejemplo se muestra un conjunto de cadenas, un conjunto de números y un conjunto de valores binarios:
["Black", "Green", "Red"] [42.2, -19, 7.5, 3.14] ["U3Vubnk=", "UmFpbnk=", "U25vd3k="]
Descriptores de tipos de datos
El protocolo de bajo nivel de la API de DynamoDB utiliza descriptores de tipo de datos como tokens que indican a DynamoDB cómo interpretar cada atributo.
A continuación se muestra una lista completa de descriptores de tipos de datos de DynamoDB:
-
S
: String -
N
: Number -
B
: Binary -
BOOL
: Boolean -
NULL
: Null -
M
: Map -
L
: List -
SS
: String Set -
NS
: Number Set -
BS
: Binary Set