In dieser Lektion werden einige einfache Beispiele zum Einfügen und Abrufen von Daten mit DynamoDB vorgestellt. Sie erstellen Ihre DynamoDB-Tabelle mithilfe der CreateTable-API und fügen anschließend einige Elemente mithilfe des BatchWriteItem-API-Aufrufs ein. Zum Abschluss rufen Sie einzelne Elemente mit dem GetItem-API-Aufruf ab. Bevor Sie diese Beispiele durcharbeiten, diskutieren wir das Datenmodell, das in Ihrer Beispiel-Anwendung für Ihren Online-Buchladen verwendet werden soll.

In den folgenden Modulen erfahren Sie, wie Sie mithilfe des Abfrage-API-Aufrufs mehrere Elemente gleichzeitig abrufen und mithilfe von Sekundärindizes zusätzliche Abfragemuster aktivieren können. Sie werden ebenfalls erfahren, wie Sie vorhandene Elemente in Ihrer Tabelle aktualisieren.

Veranschlagte Zeit für das Modul: 15 Minuten


Die folgenden DynamoDB-Konzepte spielen in diesem Modul eine Schlüsselrolle:

  • Tabelle: eine Sammlung von DynamoDB-Datensätzen.
  • Element: ein einzelner Datensatz in einer DynamoDB-Tabelle. Es ist mit einer Zeile in einer relationalen Datenbank vergleichbar.
  • Attribut: ein einzelnes Datenelement für ein Element. Es ist mit einer Spalte in einer relationalen Datenbank vergleichbar. Im Gegensatz zu Spalten in einer relationalen Datenbank müssen bei der Tabellenerstellung jedoch mit Ausnahme des später in diesem Modul beschriebenen Primärschlüssels keine Attribute angegeben werden. Attribute können einfache Typen, wie etwa Zeichenfolgen, Integer oder Boolesche Werte, oder komplexe Typen, wie etwa Listen oder Karten, sein.
  • Primärschlüssel: Ein Primärschlüssel ist eine eindeutige Kennung für ein einzelnes Element in einer DynamoDB-Tabelle. Name und Typ des Primärschlüssels müssen bei der Tabellenerstellung angegeben werden und ein Primärschlüssel des angegebenen Typs muss in jedem Element enthalten sein, das in eine Tabelle geschrieben wird. Ein einfacher Primärschlüssel besteht aus einem einzelnen Attribut, ein zusammengesetzter Primärschlüssel besteht aus zwei Attributen: einem Partitionsschlüssel und einem Sortierschlüssel. Sie können beispielsweise einen einfachen Primärschlüssel mit „UserID“ als Kennung oder einen zusammengesetzten Primärschlüssel erstellen, indem Sie „UserID“ und „Creation_Date“ als Elementidentifikator kombinieren.

Wenn Sie eine Anwendung erstellen, sollten Sie sich immer Zeit nehmen, um die in Ihrer Anwendungslogik benötigten Datenmodelle zu entwerfen. Bei diesem Datenmodelldesign sollten die Datenzugriffsanforderungen berücksichtigt werden, die in Ihrer Anwendung sowohl zum Lesen als auch zum Schreiben von Daten erforderlich sind.

DynamoDB ist eine nicht-relationale Datenbank. Bei nicht-relationalen Datenbanken müssen Sie beim Erstellen einer Tabelle nicht im Voraus das vollständige Schema angeben. Sie müssen nur den Primärschlüssel für Ihre Tabelle deklarieren, der jeden Datensatz in Ihrer Tabelle eindeutig identifiziert. Dies senkt die Vorabkosten für das Entwerfen Ihres Datenmodells, da Sie Ihr Schema problemlos ändern können, sobald sich die Anforderungen Ihrer Anwendung ändern.

Wie im Abschnitt „Hintergrund der Anwendung“ in der „Einführung“ dieses Tutorials erwähnt, muss Ihre Anwendung in der Lage sein, ein einzelnes Buch anhand seines Titels und Autors abzurufen. Da die Kombination aus Titel und Autor eine eindeutige Kennung eines Buches ist, können Sie diese Attribute als Primärschlüssel Ihrer Tabelle verwenden. Ihre Anwendung muss außerdem Informationen über die Kategorie des Buches speichern, die den Artikelnummern in Ihrem Inventarsystem zugeordnet sind, zum Beispiel Geschichte oder Biografie, sowie die verfügbaren Formate Ihres Buches: Hardcover, Taschenbuch oder Hörbuch.

Unter Berücksichtigung dieser Anforderungen können Sie das folgende Schema für Ihre Tabelle verwenden:

  • Titel (eine Zeichenfolge): Der Titel des Buches
  • Autor (eine Zeichenfolge): Der Autor des Buches
  • Kategorie (eine Zeichenfolge): Die Kategorie des Buches, wie Geschichte, Biografie oder Science-Fiction
  • Formate (eine Karte): Die verschiedenen Formate, die Sie zum Verkauf anbieten (z. B. Hardcover, Taschenbuch oder Hörbuch), und ihre Artikelnummern in Ihrem Inventarsystem

In den folgenden Schritten erstellen Sie die Tabelle, indem Sie den zusammengesetzten Primärschlüssel (Autor und Titel) Ihrer Tabelle angeben. Anschließend laden Sie einige Elemente in Ihre Tabelle und lesen einzelne Elemente aus der Tabelle.


  • Schritt 1: Eine DynamoDB-Tabelle erstellen

    Das heruntergeladene Verzeichnis enthält ein Skript create_table.py, welches mithilfe der CreateTable-API eine Bücher-Tabelle erstellt. Sie können dieses Skript ausführen, indem Sie den folgenden Befehl im AWS Cloud9-Terminal eingeben.

    $ python create_table.py

    Wenn Sie das Skript create_table.py mit dem AWS Cloud9-Editor öffnen, sollten Sie Folgendes erkennen:

    • Das Skript gibt den zusammengesetzten Primärschlüssel Ihrer Tabelle mit dem Argument KeySchema im API-Aufruf CreateTable an. Ihre Tabelle verwendet Autor als Hash-Schlüssel und Titel als Bereichsschlüssel.
    • Das Skript gibt den bereitgestellten Throughput für Ihre Tabelle an, indem sowohl Lese- als auch Schreibkapazitätseinheiten definiert werden. Mit DynamoDB können Sie die Lese- und Schreibkapazität separat einstellen und so Ihre Konfiguration an die Anforderungen Ihrer Anwendung anpassen, ohne für kostspielige Überprovisionierung bezahlen zu müssen.
  • Schritt 2: Elemente in die Tabelle laden

    In diesem Schritt laden Sie einige Bücher in die Tabelle. Führen Sie im AWS Cloud9-Terminal den folgenden Befehl aus.
    $ python insert_items.py
    Dieser Befehl führt das folgende Skript aus.
    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" } })
    

    Wie das vorhergehende Skript zeigt, haben Sie die BatchWriteItem-API verwendet, um fünf Bücher in die Tabelle zu laden. Jedes Buch enthält die Attribute Autor und Titel für den Primärschlüssel sowie die Attribute Kategorie und Formate für zusätzliche Informationen zu den Büchern. Jedes Attribut besitzt einen Typ. Dieser kann einfach ausfallen, wie etwa eine Zeichenfolge für das Attribut Kategorie, oder komplex, wie etwa eine Zuordnung für das Attribut Formate.

    Beachten Sie, dass Sie Daten über eine HTTP-API mithilfe der Boto 3-Client-Bibliothek eingefügt haben. Alle Datenzugriffs- und Manipulationsanforderungen werden über HTTP-Anforderungen ausgeführt, anstatt eine dauerhafte Verbindung zur Datenbank aufrechtzuerhalten, wie dies bei relationalen Datenbankverwaltungssystemen üblich ist.

  • Schritt 3: Die Elemente aus der Tabelle abrufen

    Sie können ein einzelnes Buch abrufen, indem Sie die GetItem-API-Anforderung verwenden und den Primärschlüssel des gewünschten Elements angeben.

    Führen Sie im AWS Cloud9-Terminal den folgenden Befehl aus.

    $ python get_item.py

    Dadurch wird das folgende Skript ausgeführt, um ein einzelnes Element abzurufen, nämlich das Buch Der Regenmacher von 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'])

    Ihr Terminal sollte die vollständigen Buchdaten drucken, die aus der Tabelle abgerufen wurden.

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

    Da jedes Element in einer Tabelle durch seinen Primärschlüssel eindeutig identifiziert wird, gibt der GetItem-API-Aufruf immer maximal ein Element aus Ihrer Tabelle zurück.


    Im nächsten Modul erfahren Sie, wie Sie mit einem einzigen API-Aufruf mehrere Elemente aus einer DynamoDB-Tabelle abrufen. Außerdem erfahren Sie, wie Sie mithilfe von Sekundärindizes mehrere Datenzugriffsmuster in Ihrer Tabelle aktivieren.