

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Kernkomponenten von Amazon DynamoDB
<a name="HowItWorks.CoreComponents"></a>

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](ServiceQuotas.md).

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

[Tabellen, Elemente und Attribute](https://www.youtube.com/embed/Mw8wCj0gkRc)

## Tabellen, Elemente und Attribute
<a name="HowItWorks.CoreComponents.TablesItemsAttributes"></a>

![\[Jede DynamoDB-Tabelle enthält null oder mehr Elemente, die aus einem oder mehreren Attributen bestehen.\]](http://docs.aws.amazon.com/de_de/amazondynamodb/latest/developerguide/images/HowItWorksTables-2024.png)


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 *Personentabelle* Attribute mit der Bezeichnung *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 *Musik* besteht aus zwei Attributen (*Künstler* 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 hat ein verschachteltes Attribut (*PromotionInfo*), das andere verschachtelte Attribute enthält. DynamoDB unterstützt bis zu 32 Ebenen verschachtelter Attribute.

 Weitere Informationen finden Sie unter [Arbeiten mit Tabellen und Daten in DynamoDB](WorkingWithTables.md).

## Primärschlüssel
<a name="HowItWorks.CoreComponents.PrimaryKey"></a>

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, sodass keine zwei Elemente denselben Schlüssel haben können.

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](#HowItWorks.CoreComponents.TablesItemsAttributes) beschrieben wird, ist ein Beispiel für eine Tabelle mit einem einfachen Primärschlüssel (*PersonID*). Sie können direkt auf jedes Element in der Tabelle *Personen* zugreifen, indem Sie den *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 unter beschriebene Tabelle *Music* [Tabellen, Elemente und Attribute](#HowItWorks.CoreComponents.TablesItemsAttributes) ist ein Beispiel für eine Tabelle mit einem zusammengesetzten Primärschlüssel (*Artist* und *SongTitle*). Sie können direkt auf jedes Element in der Tabelle *Musik* zugreifen, wenn Sie den *Interpreten* und die *SongTitle*Werte 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. Um nur eine Teilmenge der Songs eines bestimmten Interpreten abzurufen, können Sie einen Wert für *Artist* zusammen mit einem Wertebereich für *SongTitle*angeben.

**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
<a name="HowItWorks.CoreComponents.SecondaryIndexes"></a>

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 sind globale Sekundärindizes (GSIs) Indizes, die sich über die gesamte Tabelle erstrecken, sodass Sie Abfragen über alle Partitionsschlüssel durchführen können. Lokale sekundäre Indizes (LSIs) sind Indizes, die denselben Partitionsschlüssel wie die Basistabelle, aber einen anderen Sortierschlüssel haben.

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 „*Musik*“ können Sie Datenelemente nach *Künstler* (Partitionsschlüssel) oder nach *Künstler* und *SongTitle*(Partitionsschlüssel und Sortierschlüssel) abfragen. Was ist, wenn Sie die Daten auch nach *Genre* und abfragen möchten *AlbumTitle*? Dazu könnten Sie einen Index für *Genre* und erstellen und den Index dann auf die gleiche Weise abfragen *AlbumTitle*, wie Sie die *Musiktabelle* abfragen würden.

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


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

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 *GenreAlbumTitle*Index.
+ 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 *GenreAlbumTitle*Index abfragen, um alle Alben eines bestimmten Genres zu finden (z. B. alle *Rock-Alben*). 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](SecondaryIndexes.md).

## DynamoDB Streams
<a name="HowItWorks.CoreComponents.Streams"></a>

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 verwenden, AWS Lambda um einen *Triggercode* zu erstellen, der automatisch ausgeführt wird, wenn ein interessierendes 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\]](http://docs.aws.amazon.com/de_de/amazondynamodb/latest/developerguide/images/HowItWorksStreams.png)


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

Neben Triggern ermöglicht DynamoDB Streams leistungsstarke Lösungen wie Datenreplikation innerhalb und zwischen AWS Regionen, 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](Streams.md).