Dans cette leçon, vous allez étudier des exemples simples d'insertion et d'extraction de données avec Dynamo DB. Créez votre table DynamoDB à l'aide de l'API CreateTable, puis insérez des éléments en utilisant l'appel d'API BatchWriteItem. Enfin, extrayez des éléments individuels en utilisant l'appel d'API GetItem. Avant de commencer à étudier ces exemples, nous allons parler du modèle de données que vous devez utiliser dans votre exemple d'application de libraire en ligne.

Dans les modules suivants, vous apprendrez à extraire plusieurs éléments en même temps en utilisant l'appel d'API Query, ainsi qu'à autoriser des modèles de requêtes supplémentaires grâce aux index secondaires. Vous découvrirez également comme mettre à jour des éléments existants dans votre table.

Durée du module : 15 minutes


Les concepts DynamoDB suivants jouent un rôle clé dans ce module :

  • Table : un ensemble d'enregistrements de données DynamoDB.
  • Élément : un enregistrement de données unique dans la table DynamoDB. Cela est comparable à une ligne d'une base de données relationnelle.
  • Attribut : un élément de données unique au sujet d'un élément. Cela est comparable à une colonne d'une base de données relationnelle. Cependant, contrairement aux colonnes d'une base de données relationnelle, les attributs n'ont pas besoin d'être spécifiés lors de la création de la table, hormis la clé primaire dont nous parlerons plus tard dans ce module. Les attributs peuvent être des règles simples telles que des chaînes, des entiers ou des booléens, ou bien ils peuvent être des règles compliquées telles que des listes ou des cartes.
  • Clé primaire : une clé primaire est l'identifiant unique d'un élément simple d'une table DynamoDB. Le nom et le type de la clé primaire doivent être précisés au moment de la création de la table. De plus, une clé primaire du type indiqué doit être incluse avec chaque élément qui est écrit dans une table. Une clé primaire simple se compose d'un attribut unique, et une clé primaire composite est constituée de deux attributs : une clé de partition et une clé de tri. Par exemple, vous pouvez créer une clé primaire simple en utilisant « UserID » comme identifiant, ou alors créer une clé primaire composite en associant « UserID » et « Creation_Date » comme identifiant d'élément.

Lorsque vous créez une application, vous devez toujours prendre le temps de concevoir les modèles de données nécessaires à votre logique d'application. Cette phase de conception des modèles de données doit prendre en compte les besoins en matière d'accès aux données qui seront nécessaires à votre application, à la fois pour lire et pour écrire les données.

DynamoDB est une base de données non relationnelle. Avec les bases de données non relationnelles, vous n'avez pas besoin de préciser le schéma initial complet au moment de créer une table. Il vous suffit de déclare la clé primaire de votre table, qui identifie de façon unique chaque enregistrement de la table. Cela permet de réduire les coûts initiaux de conception de votre modèle de données, car vous pouvez facilement modifier votre schéma selon l'évolution des besoins de votre application.

Comme mentionné dans la section « Contexte de l'application » de l'introduction de ce didacticiel, votre application doit extraire un livre à l'aide de son titre et du nom de son auteur. Puisque l'association du titre et de l'auteur représente l'identifiant unique d'un livre, vous pouvez utiliser ces deux attributs comme clé primaire de votre table. Votre application doit également stocker les informations concernant la catégorie de notre livre (par exemple, livre historique ou biographie), ainsi que les formats disponibles (livre relié, livre de poche ou livre audio) qui sont mappés aux numéros des éléments de votre système d'inventaire.

En gardant tout cela à l'esprit, vous pouvez utiliser le schéma suivant pour votre table :

  • Titre (une chaîne) : le titre d'un livre
  • Auteur (une chaîne) : l'auteur d'un livre
  • Catégorie (une chaîne) : la catégorie d'un livre, comme livre historique, biographie ou science-fiction
  • Formats (une carte) : les différents formats disponibles à la vente (par exemple, livre relié, livre de poche ou livre audio) et leurs numéros dans votre système d'inventaire

Dans les étapes suivantes, vous allez créer une table en précisant la clé primaire composite (Auteur et Titre) de votre table. Ensuite, vous allez téléchargez certains éléments dans votre table, puis lire des éléments individuels à partir de cette table.


  • Étape 1. Créer une table DynamoDB

    Le répertoire que vous avez téléchargé inclus un script create_table.py permettant de créer une table Livres grâce à l'API CreateTable . Vous pouvez exécuter ce script en saisissant la commande suivante dans le terminal AWS Cloud9.

    $ python create_table.py

    Si vous ouvrez le script create_table.py avec l'éditeur AWS Cloud9, vous remarquerez que :

    • Le script indique la clé primaire composite de votre table avec l'argument KeySchema dans l'appel d'API CreateTable. Votre table utilise Auteur comme clé de hachage et Titre comme clé d'intervalle.
    • Le script précise le débit alloué à votre table en définissant à la fois les unités de capacité en lecture et les unités de capacité en écriture. DynamoDB vous laisse paramétrer séparément la capacité en lecture et la capacité en écriture, ce qui vous permet d'affiner votre configuration afin de répondre aux besoins de votre application sans payer pour les onéreux coûts de sur-approvisionnement.
  • Étape 2. Charger des éléments dans la table

    Dans cette étape, vous allez charger quelques livres dans la table. Exécutez la commande suivante dans le terminal AWS Cloud9.
    $ python insert_items.py
    Cette commande permet d'exécuter le script qui suit.
    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" } })
    

    Comme le montre le script précédent, vous avez utilisé l'API BatchWriteItem pour charger cinq livres dans la table. Chaque livre inclut les attributs Auteur et Titre pour la clé primaire, ainsi les attributs Catégorie et Formats pour les informations supplémentaires sur le livre. Chaque attribut possède sa propre règle. Cela peut être une règle simple comme une chaîne pour l'attribut Catégorie, ou une règle compliquée comme une carte pour l'attribut Formats.

    Notez que vous avez inséré des données par-dessus une API HTTP en utilisant la bibliothèque client Boto 3. Toutes les demandes d'accès aux données et de manipulation sont faites par le biais de demandes HTTP, et non en conservant une connexion permanente à la base de données comme cela est souvent le cas pour les systèmes de gestion des bases de données relationnelles.

  • Étape 3. Extraire des éléments de la table

    Vous pouvez extraire un seul livre en utilisant la demande d'API GetItem et en précisant la clé primaire de l'élément que vous souhaitez extraire.

    Exécutez la commande suivante dans le terminal AWS Cloud9.

    $ python get_item.py

    Cela exécute le script qui permet d'extraire un seul élément, qui est dans ce cas L'Idéaliste 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'])

    Votre terminal devrait imprimer toutes les données du livre extraites de la table.

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

    Étant donné que chaque élément d'une table est identifié de façon unique grâce à sa clé primaire, l'appel d'API GetItem remontera toujours au moins un élément de la table.


    Dans le prochain module, vous apprendrez à extraire plusieurs éléments d'une table DynamoDB avec un seul appel d'API. Vous apprendrez également à autoriser plusieurs modèles d'accès aux données dans votre table en utilisant des index secondaires.