Nesta lição, você seguirá alguns exemplos simples de entrada e recuperação de dados com o DynamoDB. Você criará uma tabela do DynamoDB usando a API CreateTable e, em seguida, fará a entrada de alguns itens usando a chamada de API BatchWriteItem. Por fim, você recuperará itens individuais usando a chamada de API GetItem. Antes de trabalhar nesses exemplos, discutiremos o modelo de dados a ser usado no exemplo de aplicativo de livraria online.

Em módulos subsequentes, você aprenderá a recuperar vários itens ao mesmo tempo usando a chamada de API Query e a habilitar padrões de consulta adicionais usando índices secundários. Você também verá como atualizar itens existentes na sua tabela.

Tempo de conclusão do módulo: 15 minutos


Os seguintes conceitos do DynamoDB são fundamentais neste módulo:

  • Tabela: um conjunto de registros de dados do DynamoDB.
  • Item: um único registro de dados em uma tabela do DynamoDB. É comparável a uma linha em um banco de dados relacional.
  • Atributo: um único elemento de dado em um item. É comparável a uma coluna em um banco de dados relacional. No entanto, ao contrário das colunas em um banco de dados relacional, os atributos não precisam ser especificados na criação da tabela, com exceção da chave primária discutida mais adiante neste módulo. Os atributos podem ser simples, como strings, números inteiros ou booleanos, ou podem ser complexos, como listas ou mapas.
  • Chave primária: uma chave primária é um identificador exclusivo para um único item em uma tabela do DynamoDB. O nome e o tipo da chave primária devem ser especificados na criação da tabela, e uma chave primária do tipo especificado deve ser incluída com cada item gravado em uma tabela. Uma chave primária simples consiste em um único atributo, enquanto uma composta consiste em dois atributos: uma chave de partição e uma chave de classificação. Por exemplo, você pode criar uma chave primária simples usando “UserID” como identificador ou pode criar uma chave primária composta combinando “UserID” e “Creation_Date” como um identificador de item.

Ao criar um aplicativo, você deve sempre dedicar algum tempo para projetar os modelos de dados necessários à sua lógica. O design do modelo de dados deve considerar as necessidades de acesso a dados no aplicativo, tanto para leitura quanto para gravação.

O DynamoDB é um banco de dados não relacional. Com bancos de dados não relacionais, você não precisa especificar o esquema completo com antecedência ao criar uma tabela. Basta declarar a chave primária da tabela, que identifica cada registro da tabela. Isso reduz o custo inicial para o projeto do modelo de dados, pois você pode modificar facilmente o esquema à medida que as necessidades do aplicativo mudam.

Como mencionado na seção “Histórico do aplicativo” na “Introdução” deste tutorial, seu aplicativo precisa recuperar um livro individual por título e autor. Como a combinação de título e autor é um identificador exclusivo do livro, você poderá usar esses atributos como a chave primária da tabela. O aplicativo também precisa armazenar informações sobre a categoria do livro, como história ou biografia, bem como os formatos disponíveis — capa dura, brochura ou audiolivro — que são mapeados para os números de item no seu sistema de inventário.

Com essas necessidades em mente, você poderá usar o seguinte esquema para a tabela:

  • Title (string): o título do livro
  • Author (string): o autor do livro
  • Category (string): a categoria do livro, como História, Biografia ou Ficção Científica
  • Formats (mapa): os diferentes formatos que você tem disponíveis para venda (como capa dura, brochura e audiolivro) e os respectivos números de item no sistema de inventário

Nas etapas a seguir, você criará a tabela especificando a chave primária composta (Author e Title) da tabela. Em seguida, carregará alguns itens na tabela e lerá itens individuais nela.


  • Etapa 1. Crie uma tabela do DynamoDB

    O diretório transferido por download inclui um script create_table.py que cria uma tabela Books usando a API CreateTable. Você pode executar esse script inserindo o comando a seguir no terminal do AWS Cloud9.

    $ python create_table.py

    Se você abrir o script create_table.py com o editor do AWS Cloud9, notará o seguinte:

    • O script especifica a chave primária composta da tabela com o argumento KeySchema na chamada de API CreateTable. A tabela usa Author (Autor) como chave de hash e Title (Título) como chave de intervalo.
    • O script especifica a taxa de transferência provisionada para a tabela, definindo unidades de capacidade de leitura e unidades de capacidade de gravação. O DynamoDB permite definir as capacidades de leitura e gravação separadamente, possibilitando o ajuste da configuração para atender às necessidades do aplicativo sem pagar caro pelo excesso de provisionamento.
  • Etapa 2. Carregue itens na tabela

    Nesta etapa, você carregará alguns livros na tabela. No terminal do AWS Cloud9, execute o comando a seguir.
    $ python insert_items.py
    Esse comando executa o script a seguir.
    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 mostra o script anterior, você usou a API BatchWriteItem para carregar cinco livros na tabela. Cada livro inclui os atributos Author (Autor) e Title (Título) da chave primária, e os atributos Category (Categoria) e Formats (Formatos) para obter informações adicionais sobre os livros. Cada atributo tem um tipo, que pode ser simples, como uma string para o atributo Category (Categoria), ou complexo, como um mapa para o atributo Formats (Formatos).

    Observe que você inseriu dados em uma API HTTP usando a biblioteca de cliente Boto 3. Todas as solicitações de acesso e manipulação de dados são feitas por meio de solicitações HTTP, em vez de manter uma conexão persistente com o banco de dados, comum para sistemas de gerenciamento de banco de dados relacional.

  • Etapa 3. Recupere itens da tabela

    Você pode recuperar um único livro usando a solicitação de API GetItem e especificando a chave primária do item desejado.

    No terminal do AWS Cloud9, execute o comando a seguir.

    $ python get_item.py

    Isso executa o script a seguir para recuperar um único item, que é o livro The RainMaker 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'])

    Seu terminal deve imprimir os dados completos do livro recuperados da tabela.

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

    Como cada item na tabela é identificado exclusivamente pela chave primária, a chamada de API GetItem sempre retornará no máximo um item da tabela.


    No próximo módulo, você aprenderá a recuperar vários itens de uma tabela do DynamoDB com uma única chamada de API. Também aprenderá a habilitar vários padrões de acesso a dados na tabela usando índices secundários.