Démarrer avec AWS

Créer et gérer une base de données non relationnelle

avec Amazon DynamoDB

Module 2 : insertion et extraction des données

Vous allez étudier quelques exemples simples d'insertion et d'extraction de données avec DynamoDB.

Présentation

Dans cette leçon, vous allez étudier quelques exemples simples d'insertion et d'extraction de données avec DynamoDB. 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 à utiliser ces exemples, nous allons parler du modèle de données à 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, et à activer des modèles de requêtes supplémentaires en utilisant des index secondaires. Vous découvrirez également comme mettre à jour des éléments existants de votre table.

 Durée

15 minutes

Terminologie

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 d'une table DynamoDB. Cela équivaut à une ligne dans une base de données relationnelle.
  • Attribut : un élément de données unique relatif à un élément. Cela équivaut à une colonne dans 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 simples, comme des chaînes, des entiers ou des booléens, ou complexes, comme 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, et une clé primaire du type indiqué doit être incluse avec chaque élément é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.

Modèle de données

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éclarer 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 références 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 charger certains éléments dans votre table, puis lire des éléments individuels à partir de celle-ci.

Implémentation

  • Créer une table DynamoDB

    Le répertoire que vous avez téléchargé inclut un script create_table.py qui crée une table Livres avec 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 remarquez 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. En vous laissant paramétrer séparément la capacité en lecture et la capacité en écriture, DynamoDB vous aide à affiner votre configuration pour répondre aux besoins de votre application sans payer le coût élevé du sur-approvisionnement.
  • 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 les livres. Un type est associé à chaque attribut. Il peut être simple, comme une chaîne pour l'attribut Catégorie, ou complexe, 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 via des demandes HTTP, et non en conservant une connexion permanente à la base de données comme c'est souvent le cas pour les systèmes de gestion des bases de données relationnelles.

  • 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 doit 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'}

    Comme chaque élément d'une table est identifié de façon unique par sa clé primaire, l'appel d'API GetItem renvoie 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 à activer plusieurs modèles d'accès aux données dans votre table en utilisant des index secondaires.

Ce module vous a-t-il été utile ?

Merci
Merci de nous indiquer ce que vous avez aimé.
Fermer
Nous sommes désolés de vous décevoir.
Quelque chose est-il obsolète, déroutant ou inexact ? Aidez-nous à améliorer ce didacticiel en fournissant des commentaires.
Fermer

Interrogation et index secondaires globaux