imagen

Introducción a DynamoDB

Conceptos previos a Amazon DynamoDB de manera (muy) resumida y con las referencias a la documentación oficial para profundizar en los conceptos.

¿Qué es Amazon DynamoDB?

Amazon DynamoDB es un servicio de bases de datos NoSQL totalmente administrado que ofrece un desempeño rápido y previsible, así como una escalabilidad óptima. AWS

Conceptos previos

  • Tablas (tables) – Una tabla es una colección de datos.
  • Elementos (items) – Cada elemento (item) que se almacena en una tabla contiene. Un elemento es un grupo de atributos que puede identificarse de forma exclusiva entre todos los demás elementos. Si vienes de MySQL, podría ser similar a las filas pero con algunas diferencias importantes que podremos ver mas adelante.
  • Atributos (attributes) – Cada elemento (item) se compone de uno o varios atributos (propiedades). Un atributo es un componente fundamental de los datos, que no es preciso dividir más. Si vienes de MySQL, podría ser similar a las columnas pero también con algunas diferencias importantes.

Cada elemento (item) de la tabla tiene un identificador único, que lo distingue de todos los demás, de manera que no puede haber dos elementos con la misma clave.

DynamoDB admite dos tipos distintos de clave principal:

  • Clave de partición (PartitionKey) – Una clave principal simple que consta de un solo atributo denominado clave de partición.
  • Clave de partición + clave de ordenación (partitionKey + sortKey) – Este tipo de clave se denomina clave principal compuesta y consta de dos atributos.

    El primer atributo es la clave de partición y el segundo, la clave de ordenación.

Con lo anterior, ya tenemos una estructura donde almacenar elementos que tendrán un identificador único, y para acceder a ellos, también lo haremos usando este identificador único.

En caso que necesitemos obtener un elemento usando una propiedad diferente a su identificador único, podemos usar indices secundarios.

  • Índice secundario global (GSI) – Índice con una clave de partición (PK) y una clave de ordenación (SK) que puede diferir de las claves de la tabla.
  • Índice secundario local (LSI) – Índice que usa la misma clave de partición (PK) que la tabla, pero una clave de ordenación (SK) distinta.

Todo lo anterior se explica en detalle por AWS en los conceptos básicos de la documentación oficial.

Reglas de nomenclatura y tipos de datos

  • 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 medio)
    • . (punto)
  • Los nombres de los atributos deben tener entre 1 y 255 caracteres.

Tipos de datos

Las propiedades de un item pueden ser de tipo:

  • Tipos escalares – Un tipo escalar es aquel que puede representar exactamente un valor.

    • Number: positivos, negativos o cero, con hasta 38 dígitos.
    • String: Unicode con codificación binaria UTF-8. Tiene un límite de tamaño máximo de 400 KB (400.000 caracteres)

      Las siguientes restricciones adicionales son aplicables a atributos de clave principal (PK y SK) definidos como tipo string:

      • Para una clave principal simple, la longitud máxima del valor del primer atributo (clave de partición) es 2048 bytes.
      • Para una clave principal compuesta, la longitud máxima del valor del segundo atributo (clave de ordenación) es 1024 bytes.
    • Binary: Cualquier tipo de datos binarios. Tiene un límite de tamaño máximo de 400 KB.
    • Boolean: true o false
    • Null: Atributo con estado desconocido o sin definir (null).
  • Tipos de documentos: un tipo de documento puede representar una estructura compleja con atributos anidados ( hasta 32 niveles de profundidad ) , como los que se encontraría en un documento JSON.

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

    • List (array): Almacena una colección ordenada de valores. Las listas deben ir entre corchetes: [ ... ].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. Ej: ["cookies", 3.14,{name:"jhon",age:56}]
    • Map (JSON): Un atributo de tipo Map puede almacenar una colección desordenada de pares nombre-valor. Los mapas deben ir entre llaves: { ... }. 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.
    {
      "Day": "Monday",
      "UnreadEmails": 42,
      "ItemsOnMyDesk": [
        "Coffee Cup",
        "Telephone",
        {
          "Pens": {
            "Quantity": 3
          },
          "Pencils": {
            "Quantity": 2
          },
          "Erasers": {
            "Quantity": 1
          }
        }
      ]
    }
  • Tipos de conjuntos – Un tipo de conjunto puede representar varios valores escalares, todos del mismo tipo.

    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.

    • String Set: ["Black", "Green", "Red"]
    • Number Set: [42.2, -19, 7.5, 3.14]
    • Binary Set: ["U3Vubnk=", "UmFpbnk=", "U25vd3k="]

Todo lo anterior se explica en detalle por AWS en Reglas de nomenclatura y tipos de datos de la documentación oficial.