Kernkomponenten von Amazon DynamoDB - Amazon-DynamoDB

Kernkomponenten von Amazon DynamoDB

In DynamoDB sind Tabellen, Elemente und Attribute die zentralen Komponenten, mit denen Sie arbeiten. Eine Tabelle ist eine Sammlung von Elementen und jedes Element wiederum eine Sammlung von Attributen. DynamoDB nutzt Primärschlüssel, um jedes Element in einer Tabelle eindeutig zu identifizieren. Sie können DynamoDB Streams verwenden, um Datenänderungsereignisse in DynamoDB-Tabellen zu erfassen.

Es gibt Beschränkungen in DynamoDB. Weitere Informationen finden Sie unter Kontingente in Amazon DynamoDB.

Das folgende Video gibt Ihnen einen einführenden Einblick in Tabellen, Elemente und Attribute.

Tabellen, Elemente und Attribute

Tabellen, Elemente und Attribute

Jede DynamoDB-Tabelle enthält null oder mehr Elemente, die aus einem oder mehreren Attributen bestehen.

Folgendes sind die grundlegenden DynamoDB-Komponenten:

  • Tabellen – Ähnlich wie bei anderen Datenbankmanagementsystemen werden auch die Daten von DynamoDB in Tabellen gespeichert. Eine Tabelle ist eine Sammlung von Daten. Ein Beispiel ist die folgende Tabelle People, die Sie zum Speichern von persönlichen Kontaktinformationen zu Freunden, Familienmitgliedern oder anderen Personen verwenden könnten. Sie könnten auch eine Tabelle namens Cars haben, um Informationen über Fahrzeuge zu pflegen.

  • Elemente - Jede Tabelle enthält keine oder mehrere Elemente. Ein Element ist eine Gruppe von Attributen, die unter allen anderen Elementen eindeutig identifizierbar ist. In einer People-Tabelle stellt jedes Element eine Person dar. In einer Cars-Tabelle stellt jedes Element ein Fahrzeug dar. Elemente in DynamoDB gleichen in vielerlei Hinsicht Zeilen, Datensätzen oder Tupel in anderen Datenbanksystemen. Bei DynamoDB gibt es keine Beschränkungen hinsichtlich Anzahl der Elemente, die in einer Tabelle gespeichert werden können.

  • Attribute – Jedes Element besteht aus einem oder mehreren Attributen. Ein Attribut ist ein grundlegendes Datenelement, das nicht weiter untergliedert werden muss. Beispielsweise enthält ein Element in einer People-Tabelle Attribute namens PersonID, LastName, FirstName usw. In einer Department-Tabelle könnte ein Element Attribute wie beispielsweise DepartmentID, Name, Manager usw. aufweisen. In DynamoDB gleichen Attribute in vielerlei Hinsicht Feldern oder Spalten in anderen Datenbanksystemen.

Das folgende Diagramm zeigt eine Tabelle mit dem Namen People mit einigen Beispielelementen und -attributen.

People { "PersonID": 101, "LastName": "Smith", "FirstName": "Fred", "Phone": "555-4321" } { "PersonID": 102, "LastName": "Jones", "FirstName": "Mary", "Address": { "Street": "123 Main", "City": "Anytown", "State": "OH", "ZIPCode": 12345 } } { "PersonID": 103, "LastName": "Stephens", "FirstName": "Howard", "Address": { "Street": "123 Main", "City": "London", "PostalCode": "ER3 5K8" }, "FavoriteColor": "Blue" }

Beachten Sie im Hinblick auf die Tabelle People Folgendes:

  • Jedes Element in der Tabelle verfügt über einen eindeutigen Bezeichner oder Primärschlüssel, der das Element von allen anderen Elementen in der Tabelle unterscheidet. In der Tabelle People besteht der Primärschlüssel aus einem Attribut (PersonID).

  • Mit Ausnahme des Primärschlüssels ist die Tabelle People schemalos. Dies bedeutet, dass weder die Attribute noch deren Datentypen im Vorfeld definiert werden müssen. Jedes Element kann über eigene eindeutige Attribute verfügen.

  • Die meisten Attribute sind skalar, das heißt, sie können nur einen Wert annehmen. Zeichenfolgen und Zahlen sind allgemeine Beispiele für skalare Werte.

  • Einige Elemente verfügen über ein verschachteltes Attribut (Address). DynamoDB unterstützt verschachtelte Attribute bis zu einer Tiefe von 32 Ebenen.

Im Folgenden finden Sie eine weitere Beispieltabelle mit dem Namen Music, die Sie verwenden können, um Ihre Musiksammlung zu erfassen.

Music { "Artist": "No One You Know", "SongTitle": "My Dog Spot", "AlbumTitle": "Hey Now", "Price": 1.98, "Genre": "Country", "CriticRating": 8.4 } { "Artist": "No One You Know", "SongTitle": "Somewhere Down The Road", "AlbumTitle": "Somewhat Famous", "Genre": "Country", "CriticRating": 8.4, "Year": 1984 } { "Artist": "The Acme Band", "SongTitle": "Still in Love", "AlbumTitle": "The Buck Starts Here", "Price": 2.47, "Genre": "Rock", "PromotionInfo": { "RadioStationsPlaying": [ "KHCR", "KQBX", "WTNR", "WJJH" ], "TourDates": { "Seattle": "20150622", "Cleveland": "20150630" }, "Rotation": "Heavy" } } { "Artist": "The Acme Band", "SongTitle": "Look Out, World", "AlbumTitle": "The Buck Starts Here", "Price": 0.99, "Genre": "Rock" }

Beachten Sie im Hinblick auf die Tabelle Music Folgendes:

  • Der Primärschlüssel für Music besteht aus zwei Attributen (Artist und SongTitle). Jedes Element in der Tabelle muss über diese beiden Attribute verfügen. Die Kombination von Artist und SongTitle unterscheidet jedes Element in der Tabelle von allen anderen.

  • Mit Ausnahme des Primärschlüssels ist die Tabelle Music schemalos. Dies bedeutet, dass weder die Attribute noch deren Datentypen im Vorfeld definiert werden müssen. Jedes Element kann über eigene eindeutige Attribute verfügen.

  • Eines der Elemente verfügt über ein verschachteltes Attribut (PromotionInfo), das weitere verschachtelte Attribute enthält. DynamoDB unterstützt verschachtelte Attribute bis zu einer Tiefe von 32 Ebenen.

Weitere Informationen finden Sie unter Arbeiten mit Tabellen und Daten in DynamoDB.

Primärschlüssel

Wenn Sie eine Tabelle erstellen, müssen Sie außer dem Tabellennamen auch den Primärschlüssel der Tabelle angeben. Der Primärschlüssel identifiziert jedes Element in der Tabelle eindeutig, es gibt also nicht zwei Elemente mit identischem Schlüsselwert.

DynamoDB unterstützt zwei verschiedene Arten von Primärschlüsseln:

  • Partitionsschlüssel – Ein einfacher Primärschlüssel bestehend aus einem Attribut, das als Partitionsschlüssel bezeichnet wird.

    DynamoDB verwendet den Wert des Partitionsschlüssels als Eingabe für eine interne Hash-Funktion. Die Ausgabe der Hash-Funktion bestimmt die Partition (physischer interner Speicher von DynamoDB), in der das Element gespeichert wird.

    In einer Tabelle mit nur einem Partitionsschlüssel können zwei Elemente in einer Tabelle nicht den gleichen Partitionsschlüsselwert haben.

    Die Tabelle People, die in Tabellen, Elemente und Attribute beschrieben wird, ist ein Beispiel für eine Tabelle mit einem einfachen Primärschlüssel (PersonID). Sie können auf jedes Element in der Tabelle People direkt zugreifen, indem Sie die PersonId-Wert für dieses Element angeben.

  • Partitionsschlüssel und Sortierschlüssel – Diese Schlüssel werden als zusammengesetzter Primärschlüssel bezeichnet, da er aus zwei Attributen besteht. Das erste Attribut ist der Partitionsschlüssel und das zweite der Sortierschlüssel.

    DynamoDB verwendet den Wert des Partitionsschlüssels als Eingabe für eine interne Hash-Funktion. Die Ausgabe der Hash-Funktion bestimmt die Partition (physischer interner Speicher von DynamoDB), in der das Element gespeichert wird. Alle Elemente mit dem gleichen Partitionsschlüsselwert werden zusammen gespeichert, und zwar sortiert nach Sortierschlüsselwert.

    In einer Tabelle, die über einen Partitionsschlüssel und einen Sortierschlüssel verfügt, ist es möglich, dass mehrere Elemente denselben Partitionsschlüsselwert aufweisen. Diese Elemente müssen aber verschiedene Sortierschlüsselwerte aufweisen.

    Die Tabelle Music, die in Tabellen, Elemente und Attribute beschrieben wird, ist ein Beispiel für eine Tabelle mit einem zusammengesetzten Primärschlüssel (Artist und SongTitle). Sie können auf jedes Element in der Tabelle Music direkt zugreifen, wenn Sie die Werte Artist und SongTitle für dieses Element angeben.

    Mit einem zusammengesetzten Primärschlüssel erhalten Sie noch mehr Flexibilität bei der Abfrage von Daten. Wenn Sie beispielsweise nur den Wert für Artist angeben, ruft DynamoDB alle Songs dieses Interpreten ab. Sie können auch einen Wert für Artist und einen SongTitle-Wertebereich angeben, um nur eine Teilmenge der Musiktitel eines bestimmten Interpreten abzurufen.

Anmerkung

Der Partitionsschlüssel eines Elements wird auch als Hash-Attribut bezeichnet. Der Begriff Hash-Attribut leitet sich von der Verwendung einer internen Hash-Funktion in DynamoDB ab, durch die Datenelemente basierend auf ihren Partitionsschlüsselwerten gleichmäßig auf die Partitionen verteilt werden.

Der Sortierschlüssel eines Elements wird auch als Bereichsattribut bezeichnet. Der Begriff Bereichsattribut bezieht sich auf die Art und Weise, wie DynamoDB Elemente mit demselben Partitionsschlüssel physisch nah beieinander speichert, und zwar sortiert nach dem Sortierschlüsselwert.

Jedes Primärschlüsselattribut muss ein Skalarwert sein (das bedeutet, dass es nur einen einzigen Wert annehmen kann). Die einzigen Datentypen, die für Primärschlüsselattribute zulässig sind, sind Zeichenfolge, Zahl oder Binärwert. Es gibt keine Einschränkungen für andere Nicht-Schlüsselattribute.

Sekundäre Indizes

Sie können einen oder mehrere sekundäre Indizes für eine Tabelle erstellen. Ein Sekundärindex ermöglicht – ergänzend zu Abfragen über den Primärschlüssel – das Abfragen der Daten in der Tabelle über einen alternativen Schlüssel. Für DynamoDB ist die Verwendung von Indexen nicht erforderlich. Sie ermöglichen Ihren Anwendungen jedoch mehr Flexibilität beim Abfragen der Daten. Nachdem Sie einen sekundären Index für eine Tabelle erstellt haben, können Sie Daten aus dem Index ähnlich wie aus der Tabelle lesen.

DynamoDB unterstützt zwei Arten von Indexen:

  • Globaler sekundärer Index – Ein Index mit einem Partitionsschlüssel und einem Sortierschlüssel, die sich von denen in der Tabelle unterscheiden können. Die Primärschlüsselwerte in globalen sekundären Indizes müssen nicht eindeutig sein.

  • Lokaler sekundärer Index – Ein Index, der denselben Partitionsschlüssel wie die Tabelle hat, aber einen anderen Sortierschlüssel.

In DynamoDB erstrecken sich globale sekundäre Indizes (GSIs) über die gesamte Tabelle, sodass Sie Abfragen über alle Partitionsschlüssel hinweg durchführen können. Lokale sekundäre Indizes (LSIs) weisen denselben Partitionsschlüssel wie die Basistabelle auf, haben aber einen anderen Sortierschlüssel.

Jede Tabelle in DynamoDB verfügt über ein Kontingent von 20 globalen sekundären Indizes (Standardkontingent) und 5 lokalen sekundären Indizes.

In der zuvor gezeigten Beispieltabelle Music können Sie Datenelemente nach Artist (Partitionsschlüssel) oder nach Artist und SongTitle (Partitions- und Sortierschlüssel) abfragen. Und wenn Sie die Daten auch nach Genre und AlbumTitle abfragen möchten? In diesem Fall könnten Sie einen Index für Genre und AlbumTitle erstellen und den Index dann ähnlich wie die Tabelle Music abfragen.

Das folgende Diagramm zeigt die Beispieltabelle Music mit einem neuen Index namens GenreAlbumTitle. In dem Index ist der Partitionsschlüssel Genre und der Sortierschlüssel AlbumTitle.

Tabelle „Musik“ GenreAlbumTitle
{ "Artist": "No One You Know", "SongTitle": "My Dog Spot", "AlbumTitle": "Hey Now", "Price": 1.98, "Genre": "Country", "CriticRating": 8.4 }
{ "Genre": "Country", "AlbumTitle": "Hey Now", "Artist": "No One You Know", "SongTitle": "My Dog Spot" }
{ "Artist": "No One You Know", "SongTitle": "Somewhere Down The Road", "AlbumTitle": "Somewhat Famous", "Genre": "Country", "CriticRating": 8.4, "Year": 1984 }
{ "Genre": "Country", "AlbumTitle": "Somewhat Famous", "Artist": "No One You Know", "SongTitle": "Somewhere Down The Road" }
{ "Artist": "The Acme Band", "SongTitle": "Still in Love", "AlbumTitle": "The Buck Starts Here", "Price": 2.47, "Genre": "Rock", "PromotionInfo": { "RadioStationsPlaying": { "KHCR", "KQBX", "WTNR", "WJJH" }, "TourDates": { "Seattle": "20150622", "Cleveland": "20150630" }, "Rotation": "Heavy" } }
{ "Genre": "Rock", "AlbumTitle": "The Buck Starts Here", "Artist": "The Acme Band", "SongTitle": "Still In Love" }
{ "Artist": "The Acme Band", "SongTitle": "Look Out, World", "AlbumTitle": "The Buck Starts Here", "Price": 0.99, "Genre": "Rock" }
{ "Genre": "Rock", "AlbumTitle": "The Buck Starts Here", "Artist": "The Acme Band", "SongTitle": "Look Out, World" }

Beachten Sie im Hinblick auf den Index GenreAlbumTitle Folgendes:

  • Jeder Index gehört zu einer Tabelle, die als Basistabelle für den Index bezeichnet wird. Im vorherigen Beispiel ist Music die Basistabelle für den Index GenreAlbumTitle.

  • DynamoDB verwaltet Indexe automatisch. Beim Hinzufügen, Aktualisieren und Löschen eines Elements in der Basistabelle fügt DynamoDB das entsprechende Element in allen Indexen hinzu, die zu dieser Tabelle gehören, bzw. aktualisiert oder löscht sie.

  • Wenn Sie einen Index erstellen, geben Sie an, welche Attribute aus der Basistabelle in den Index kopiert oder projiziert werden. DynamoDB projiziert mindestens die Schlüsselattribute aus der Basistabelle in den Index. Dies ist der Fall bei GenreAlbumTitle, da hier nur die Schlüsselattribute aus der Tabelle Music in den Index projiziert werden.

Sie können den Index GenreAlbumTitle zum Auffinden aller Alben eines bestimmten Genres (beispielsweise aller Rock-Alben) abfragen. Sie können den Index auch abfragen, um alle Alben in einem bestimmten Genre mit bestimmten Albumtiteln zu finden (z. B. alle Country-Alben mit Titeln, die mit dem Buchstaben H beginnen).

Weitere Informationen finden Sie unter Verbessern des Datenzugriffs mit sekundären Indizes in DynamoDB.

DynamoDB Streams

DynamoDB Streams ist eine optionale Funktion, die Datenänderungsereignisse in DynamoDB-Tabellen erfasst. Die Daten über diese Ereignisse erscheinen nahezu in Echtzeit und in der Reihenfolge, in der die Ereignisse aufgetreten sind, im Stream.

Jedes Ereignis wird durch einen Stream-Datensatz repräsentiert. Wenn Sie einen Stream für eine Tabelle aktivieren, schreibt DynamoDB Streams einen Stream-Datensatz, sobald eines der folgenden Ereignisse eintritt:

  • Ein neues Element wird der Tabelle hinzugefügt: Der Stream erfasst ein Image des gesamten Elements, einschließlich aller Attribute.

  • Ein Element wird aktualisiert: Der Stream erfasst das Image von Attributen, die im Element modifiziert wurden, vor und nach der Änderung.

  • Ein Element wird aus der Tabelle gelöscht: Der Stream erfasst ein Image des gesamten Elements, bevor es gelöscht wurde.

Jeder Stream-Datensatz enthält auch den Namen der Tabelle, den Ereigniszeitstempel und andere Metadaten. Stream-Datensätze haben eine Lebensdauer von 24 Stunden. Danach werden sie automatisch aus dem Stream entfernt.

Sie können DynamoDB Streams zusammen mit AWS Lambda verwenden, um einen Auslöser zu erstellen – Code, der automatisch ausgeführt wird, wenn ein interessantes Ereignis in einem Stream auftritt. Nehmen wir als Beispiel eine Customers-Tabelle mit Kundeninformationen für ein Unternehmen. Angenommen, Sie möchten eine Willkommens-E-Mail an jeden neuen Kunden senden. Sie können einen Stream für diese Tabelle aktivieren und den Stream anschließend einer Lambda-Funktion zuordnen. Die Lambda-Funktion wird immer dann ausgeführt, wenn ein neuer Stream-Datensatz erscheint. Es werden jedoch nur neue Elemente verarbeitet, die der Tabelle Kunden hinzugefügt wurden. Für ein Element mit einem EmailAddress-Attribut ruft die Lambda-Funktion den Amazon Simple Email Service (Amazon SES) auf, um eine E-Mail an diese Adresse zu senden.

Integration von DynamoDB Streams und Lambda, um automatisch eine Willkommens-E-Mail an neue Kunden zu senden
Anmerkung

In diesem Beispiel erhält der letzte Kunde, Craig Roe, keine E-Mail-Nachricht, da kein Wert für EmailAddress vorhanden ist.

Zusätzlich zu Auslösern ermöglicht DynamoDB Streams leistungsstarke Lösungen wie Datenreplikation innerhalb von und über AWS-Regionen hinweg, materialisierte Ansichten von Daten in DynamoDB-Tabellen, Datenanalyse mit materialisierten Kinesis-Ansichten und vieles mehr.

Weitere Informationen finden Sie unter Ändern Sie die Datenerfassung für DynamoDB Streams.