En esta lección, se presentan algunos ejemplos sencillos sobre cómo insertar y recuperar datos con DynamoDB. Usted se encarga de crear una tabla de DynamoDB con la API CreateTable y luego inserta algunos elementos mediante la llamada a la API BatchWriteItem. Por último, recupera elementos individuales mediante la llamada a la API GetItem. Antes de analizar los ejemplos, se aborda el modelo de datos que se utilizará en el ejemplo de aplicación para la librería en línea.

En modelos posteriores, aprende a recuperar múltiples elementos a la vez con la llamada a la API Query, así como a habilitar patrones de consulta adicionales mediante índices secundarios. También descubre cómo actualizar elementos existentes en la tabla.

Tiempo de realización del módulo: 15 minutos


Los siguientes conceptos de DynamoDB son importantes para este módulo:

  • Tabla: un conjunto de registros de datos de DynamoDB.
  • Elemento: un solo registro de datos en una tabla de DynamoDB. Es similar a una fila en una base de datos relacional.
  • Atributo: un único componente de datos que corresponde a un elemento. Es similar a una columna en una base de datos relacional. Sin embargo, a diferencia de las columnas de las bases de datos relacionales, no es necesario especificar los atributos al momento de crear la tabla, salvo la clave principal que se aborda más adelante en este módulo. Los atributos pueden ser de tipo simple, como cadenas, valores enteros o booleanos, así como de tipo complejo, tales como listas o mapas.
  • Clave principal:: una clave principal es un identificador único de un solo elemento en una tabla de DynamoDB. Tanto el nombre de la clave principal como el tipo se deben especificar al momento de crear la tabla. Además, se debe incluir una clave principal del tipo especificado con cada elemento incluido en la tabla. Una clave principal simple está compuesta por un único atributo, mientras que una clave principal compuesta cuenta con dos atributos: una clave de partición y una clave de ordenación. Por ejemplo, puede crear una clave principal simple con “UserID” como identificador o crear una clave principal compuesta con la combinación de “UserID” y “Creation_Date” como identificador de un elemento.

Al momento de crear una aplicación, siempre debe dedicar tiempo al diseño de los modelos de datos necesarios para la lógica de la aplicación. El diseño del modelo de datos debe tener en cuenta las necesidades de acceso a los datos que la aplicación requerirá, tanto para leer como para escribir datos.

DynamoDB es una base de datos no relacional. Si se utilizan bases de datos no relacionales, no es necesario especificar el esquema completo de forma anticipada al crear la tabla. Solo es necesario presentar la clave principal para su tabla, la cual identifica cada registro de la tabla de forma exclusiva. Esto reduce el monto de los costos iniciales correspondientes al diseño del modelo de datos, ya que es posible modificar el esquema fácilmente a medida que cambian las necesidades de la aplicación.

Como se mencionó en la sección “Contexto de la aplicación” de la “Introducción” a este tutorial, la aplicación debe recuperar un libro específico según el título y el autor. Debido a que la combinación del título y el autor representan el identificador único de un libro, puede utilizar esos atributos como la clave principal de la tabla. La aplicación también debe almacenar información sobre la categoría del libro, como historia o biografía, así como información acerca de los formatos disponibles (encuadernación de tapa dura y tapa blanda, o audiolibro). Esa información se asigna a los números del elemento en el sistema que funciona como inventario.

En este contexto, puede utilizar el siguiente esquema para la tabla:

  • Título (una cadena): el título del libro
  • Autor (una cadena): el autor del libro
  • Categoría (una cadena): la categoría a la que pertenece el libro, por ejemplo, historia, biografía y ciencia ficción
  • Formatos (un mapa): los diferentes formatos que están disponibles para la venta (por ejemplo, encuadernación de tapa dura y tapa blanda, o audiolibro) y los números del elemento correspondientes en el sistema que funciona como inventario

En los siguientes pasos, crea la tabla mediante la especificación de la clave principal compuesta (Autor y Título) de la tabla. A continuación, carga algunos elementos a la tabla y lee los elementos individuales de la tabla.


  • Paso 1. Cree una tabla de DynamoDB

    El directorio descargado incluye un script create_table.py que crea una tabla Libros a través de la API CreateTable. Puede ejecutar este script al escribir el siguiente comando en el terminal de AWS Cloud9.

    $ python create_table.py

    Si abre el script create_table.py en el editor de AWS Cloud9, debería observar las siguientes características:

    • El script especifica la clave principal compuesta de la tabla con el argumento KeySchema en la llamada a la API CreateTable. La tabla utiliza el Autor como la clave hash y el Título como la clave de rango.
    • El script especifica el rendimiento aprovisionado para la tabla mediante la definición de las unidades de capacidad de lectura y las unidades de capacidad de escritura. DynamoDB le permite configurar la capacidad de lectura y la capacidad de escritura por separado. Por lo tanto, es posible ajustar la configuración a fin de satisfacer las necesidades de la aplicación sin tener que pagar el alto precio del aprovisionamiento excesivo.
  • Paso 2. Cargue los elementos en la tabla

    En este paso, carga algunos libros en la tabla. Ejecute el siguiente comando en el terminal de AWS Cloud9.
    $ python insert_items.py
    Este comando ejecuta el siguiente script.
    import boto3
    
    dynamodb = boto3.resource('dynamodb', region_name='us-east-1')
    table = dynamodb.Table('Books')
    
    with table.batch_writer() as batch:
        batch.put_item(Item={"Author": "John Grisham", "Title": "The Rainmaker",
            "Category": "Suspense", "Formats": { "Hardcover": "J4SUKVGU", "Paperback": "D7YF4FCX" } })
        batch.put_item(Item={"Author": "John Grisham", "Title": "The Firm",
            "Category": "Suspense", "Formats": { "Hardcover": "Q7QWE3U2",
            "Paperback": "ZVZAYY4F", "Audiobook": "DJ9KS9NM" } })
        batch.put_item(Item={"Author": "James Patterson", "Title": "Along Came a Spider",
            "Category": "Suspense", "Formats": { "Hardcover": "C9NR6RJ7",
            "Paperback": "37JVGDZG", "Audiobook": "6348WX3U" } })
        batch.put_item(Item={"Author": "Dr. Seuss", "Title": "Green Eggs and Ham",
            "Category": "Children", "Formats": { "Hardcover": "GVJZQ7JK",
            "Paperback": "A4TFUR98", "Audiobook": "XWMGHW96" } })
        batch.put_item(Item={"Author": "William Shakespeare", "Title": "Hamlet",
            "Category": "Drama", "Formats": { "Hardcover": "GVJZQ7JK",
            "Paperback": "A4TFUR98", "Audiobook": "XWMGHW96" } })
    

    Como se muestra en el script anterior, utilizó la API BatchWriteItem para cargar cinco libros en la tabla. Cada libro incluye los atributos Autor y Título de la clave principal, así como los atributos Categoría y Formatos que brindan información adicional acerca de los libros. A cada atributo le corresponde un tipo. Este puede ser simple, como una cadena para el atributo Categoría, o también puede ser complejo, como un mapa para el atributo Formatos.

    Tenga en cuenta que los datos se insertaron a través de una API HTTP con la biblioteca cliente Boto 3. Todas las solicitudes para manipular los datos y obtener acceso a ellos se realizan a través de solicitudes HTTP, en lugar de mantener una conexión persistente a la base de datos como ocurre habitualmente en los sistemas de administración de bases de datos relacionales.

  • Paso 3. Recupere elementos de la tabla

    Puede recuperar un libro específico a través de la solicitud a la API GetItem y la especificación de la clave principal del elemento que desea.

    Ejecute el siguiente comando en el terminal de AWS Cloud9.

    $ python get_item.py

    Esto ejecuta el siguiente script para recuperar un elemento específico. En este caso, se trata del libro llamado Legítima defensa de John Grisham.

    import boto3
    
    dynamodb = boto3.resource('dynamodb', region_name='us-east-1')
    table = dynamodb.Table('Books')
    
    resp = table.get_item(Key={"Author": "John Grisham", "Title": "The Rainmaker"})
    
    print(resp['Item'])

    El terminal debería presentar todos los datos del libro que se recuperaron de la tabla.

    $ python get_item.py
    {'Title': 'The Rainmaker', 'Formats': {'Hardcover': 'J4SUKVGU', 'Paperback': 'D7YF4FCX'}, 'Author': 'John Grisham', 'Category': 'Suspense'}

    Como cada elemento de la tabla se identifica de forma exclusiva con su clave principal, la llamada a la API GetItem siempre devolverá como máximo un elemento de la tabla.


    En el siguiente módulo, aprenderá a recuperar varios elementos de una tabla de DynamoDB con una sola llamada a la API. También aprenderá a habilitar varios patrones de acceso a los datos en la tabla a través de índices secundarios.