0Pricing
AWS Solutions Architect · Lektion

Tabellen, Elemente und Primärschlüssel

Entwerfen Sie DynamoDB-Tabellen mit Partition Keys und zusammengesetzten Primärschlüsseln und verstehen Sie die Speicherlimits auf Elementebene.

Tabellen, Elemente und Primärschlüssel ist eine kostenlose AWS Solutions Architect-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des AWS Solutions Architect-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der AWS Solutions Architect-Kurs umfasst insgesamt 4 Lektionen.

DynamoDB: NoSQL-Schlüssel-Wert-Speicher

Amazon DynamoDB ist eine vollständig verwaltete, serverlose Schlüssel-Wert- und Dokumentdatenbank, die bei jeder Skalierung eine Leistung im einstelligen Millisekundenbereich bietet. Anders als relationale Datenbanken ist DynamoDB schemafrei – jedes Element kann über eine andere Menge von Attributen verfügen, solange der primäre Schlüssel vorhanden ist.

DynamoDB speichert Daten in Tabellen. Diese sind der Container der obersten Ebene und entsprechen in etwa einer SQL-Tabelle. Tabellen werden automatisch über mehrere Speicherknoten in verschiedenen AZs verteilt. Dadurch ist Redundanz integriert, ohne dass Sie etwas konfigurieren müssen.

Tabellen und Elemente

Eine DynamoDB-Tabelle enthält eine Sammlung von Elementen, die jeweils eine Sammlung von Attributen umfassen. Attribute sind typisierte Werte: String (S), Number (N), Binary (B), Boolean (BOOL), Null (NULL), List (L), Map (M) und Set-Typen (SS, NS, BS).

Jedes Element einer Tabelle muss die Attribute des primären Schlüssels enthalten. Alle anderen Attribute sind optional und können sich zwischen Elementen unterscheiden. Ein einzelnes Element darf einschließlich aller Attributnamen und -werte höchstens 400 KB groß sein.

# Example DynamoDB item structure (JSON)
{
  'UserId': {'S': 'user-abc-123'},
  'Timestamp': {'N': '1719000000'},
  'Username': {'S': 'alice'},
  'Score': {'N': '4200'},
  'Tags': {'SS': ['premium', 'verified']}
}

Einfacher primärer Schlüssel: nur Partitionsschlüssel

Ein einfacher primärer Schlüssel besteht aus einem einzelnen Attribut, dem Partitionsschlüssel (auch Hash-Schlüssel genannt). DynamoDB wendet eine interne Hash-Funktion auf den Wert des Partitionsschlüssels an, um zu bestimmen, welche Speicherpartition das Element enthält. Alle Elemente mit demselben Partitionsschlüsselwert werden zusammen gespeichert.

Bei einem einfachen primären Schlüssel dürfen zwei Elemente derselben Tabelle nicht denselben Partitionsschlüsselwert haben – er identifiziert jedes Element eindeutig. Dieses Design eignet sich für Tabellen, auf deren Daten Sie immer über eine eindeutige Kennung zugreifen, etwa eine Benutzer-ID oder Bestell-ID.

# Create a table with a simple (partition key only) primary key
aws dynamodb create-table \
  --table-name Users \
  --attribute-definitions AttributeName=UserId,AttributeType=S \
  --key-schema AttributeName=UserId,KeyType=HASH \
  --billing-mode PAY_PER_REQUEST

Zusammengesetzter primärer Schlüssel: Partitions- und Sortierschlüssel

Ein zusammengesetzter primärer Schlüssel verwendet sowohl einen Partitionsschlüssel als auch einen Sortierschlüssel (auch Range Key genannt). Elemente mit demselben Partitionsschlüssel werden zusammen gespeichert und nach dem Wert des Sortierschlüssels sortiert. Dadurch sind Bereichsabfragen innerhalb einer Partition möglich.

Dieses Design ist äußerst flexibel: Mehrere Elemente können denselben Partitionsschlüssel verwenden, solange sich ihre Sortierschlüssel unterscheiden. Eine Tabelle Orders könnte beispielsweise CustomerId als Partitionsschlüssel und OrderDate als Sortierschlüssel verwenden. So können Sie alle Bestellungen eines Kunden nach Datum sortiert abfragen.

# Create a table with a composite primary key
aws dynamodb create-table \
  --table-name Orders \
  --attribute-definitions \
    AttributeName=CustomerId,AttributeType=S \
    AttributeName=OrderDate,AttributeType=S \
  --key-schema \
    AttributeName=CustomerId,KeyType=HASH \
    AttributeName=OrderDate,KeyType=RANGE \
  --billing-mode PAY_PER_REQUEST

Design von Partitionsschlüsseln und Hot-Partitionen

Die Wahl des richtigen Partitionsschlüssels ist die wichtigste Designentscheidung bei DynamoDB. Ein guter Partitionsschlüssel weist eine hohe Kardinalität (viele unterschiedliche Werte) auf und verteilt den Zugriff gleichmäßig auf die Partitionen. Eine schlechte Wahl führt zu Hot-Partitionen, auf die überproportional viel Datenverkehr entfällt und die dadurch eine Drosselung verursachen.

Zu vermeidende Anti-Patterns: ein boolesches Flag (nur zwei Werte), ein Datum, das alle Schreibvorgänge des heutigen Tages bündelt, oder ein Statusfeld mit geringer Kardinalität. Gute Optionen sind Benutzer-ID, Geräte-ID, eine zufällige UUID oder zusammengesetzte Werte wie tenantId#entityType.

PutItem, GetItem und DeleteItem

Die drei grundlegenden DynamoDB-Operationen für Elemente sind:

  • PutItem: schreibt ein neues Element oder ersetzt ein vorhandenes Element mit demselben primären Schlüssel vollständig
  • GetItem: ruft ein einzelnes Element über seinen exakten primären Schlüssel ab (erfordert den vollständigen Schlüssel – den Partitionsschlüssel sowie bei einem zusammengesetzten Schlüssel den Sortierschlüssel)
  • DeleteItem: entfernt ein Element über seinen exakten primären Schlüssel

Alle drei Operationen sind auf Elementebene atomar. Standardmäßig verwendet GetItem eventually konsistente Lesevorgänge. Durch Hinzufügen von --consistent-read erzwingen Sie einen stark konsistenten Lesevorgang, der immer den zuletzt geschriebenen Wert zurückgibt.

# PutItem
aws dynamodb put-item \
  --table-name Users \
  --item '{"UserId":{"S":"user-123"},"Name":{"S":"Alice"}}'

# GetItem
aws dynamodb get-item \
  --table-name Users \
  --key '{"UserId":{"S":"user-123"}}' \
  --consistent-read

UpdateItem und bedingte Ausdrücke

UpdateItem ändert bestimmte Attribute eines vorhandenen Elements, ohne es vollständig zu ersetzen – anders als PutItem. Sie können Attribute hinzufügen oder entfernen und arithmetische Operationen auf Number-Attributen atomar ausführen, etwa einen Zähler erhöhen.

Mit bedingten Ausdrücken können Sie festlegen, dass eine Operation nur erfolgreich sein darf, wenn eine Bedingung erfüllt ist. Sie können beispielsweise den Status eines Elements nur aktualisieren, wenn er derzeit PENDING lautet. Damit lassen sich Muster für optimistisches Sperren ohne Transaktionen umsetzen, was eine wichtige DynamoDB-Designtechnik ist.

# Atomically increment a counter, only if item exists
aws dynamodb update-item \
  --table-name Orders \
  --key '{"CustomerId":{"S":"c-123"},"OrderDate":{"S":"2026-06-20"}}' \
  --update-expression 'SET ItemCount = ItemCount + :inc' \
  --condition-expression 'attribute_exists(CustomerId)' \
  --expression-attribute-values '{":inc":{"N":"1"}}'

Query oder Scan

Query ruft Elemente ab, die denselben Partitionsschlüsselwert haben, und kann optional nach Bedingungen für den Sortierschlüssel filtern. Query ist effizient, da nur die Zielpartition gelesen wird. Sie können Bedingungen für den Sortierschlüssel wie begins_with, between, =, < und > verwenden, um die Ergebnisse innerhalb der Partition einzugrenzen.

Scan liest jedes Element der Tabelle und wendet anschließend einen optionalen Filterausdruck an. Scans sind bei großen Tabellen kostspielig und sollten in Abfragemustern für Produktionsumgebungen vermieden werden. Wenn Sie häufig Scans benötigen, überdenken Sie Ihr Tabellendesign oder fügen Sie einen globalen sekundären Index hinzu.

# Query: get all orders for customer c-123 after a date
aws dynamodb query \
  --table-name Orders \
  --key-condition-expression 'CustomerId = :cid AND OrderDate >= :dt' \
  --expression-attribute-values \
    '{":cid":{"S":"c-123"},":dt":{"S":"2026-01-01"}}'

Stark konsistente und letztlich konsistente Lesevorgänge

DynamoDB speichert drei Kopien Ihrer Daten über mehrere AZs hinweg. Letztlich konsistente Lesevorgänge (die Standardeinstellung) können einen leicht veralteten Wert zurückgeben, wenn ein kürzlich erfolgter Schreibvorgang noch nicht an alle Kopien verteilt wurde – sie verbrauchen jedoch die Hälfte der Read Capacity Units stark konsistenter Lesevorgänge.

Stark konsistente Lesevorgänge geben immer den neuesten bestätigten Schreibvorgang zurück, kosten jedoch doppelt so viele RCUs und sind für Global Secondary Indexes nicht verfügbar. Verwenden Sie letztlich konsistente Lesevorgänge für leseintensive Workloads mit hohem Durchsatz und stark konsistente Lesevorgänge nur dann, wenn Ihre Anwendung zwingend die aktuellsten Daten benötigt.

DynamoDB-Transaktionen

DynamoDB unterstützt ACID-Transaktionen über TransactWriteItems und TransactGetItems. Eine Transaktion kann bis zu 100 Schreiboperationen über mehrere Elemente und sogar mehrere Tabellen hinweg gruppieren und stellt dabei sicher, dass entweder alle Operationen erfolgreich ausgeführt oder atomar zurückgerollt werden.

Verwenden Sie Transaktionen beispielsweise für die Überweisung von Geld zwischen Konten (ein Element belasten, ein anderes gutschreiben) oder für die Buchung eines Sitzplatzes (Verfügbarkeit prüfen und den Platz atomar reservieren). Transaktionen kosten doppelt so viele RCUs/WCUs wie normale Vorgänge. Verwenden Sie sie daher nur, wenn Atomarität über mehrere Elemente hinweg tatsächlich erforderlich ist.

Begrenzung der Elementgröße und Tipps zur Datenmodellierung

Das Limit von 400 KB pro Element in DynamoDB beeinflusst die Datenmodellierung. Speichern Sie große Nutzdaten (z. B. Bilder oder umfangreiche Dokumente) in S3 und hinterlegen Sie in DynamoDB nur den S3-Objektschlüssel. Modellieren Sie tief verschachtelte hierarchische Daten, indem Sie jeden Knotentyp mit einem eigenen Partition-Key-Muster unter Verwendung des Single-Table-Designs abbilden – eine Tabelle enthält dabei mehrere Entitätstypen, die durch das Präfix des Partition Keys und das Muster des Sort Keys unterschieden werden.

Das Single-Table-Design minimiert die Anzahl der Tabellen und ermöglicht effiziente Zugriffsmuster, indem zusammengehörige Elemente in derselben Partition gespeichert werden. Es handelt sich um eine fortgeschrittene Technik, die den betrieblichen Aufwand reduziert und die Leistung bei komplexen Zugriffsmustern verbessert.

Kurze Überprüfung

Testen Sie Ihr Verständnis der AWS-Solutions-Architect-Konzepte (SAA-C03) aus dieser Lektion.

Zusammenfassung der Lektion

In dieser Lektion haben Sie gelernt: DynamoDB-Tabellen enthalten schemafreie Elemente mit einer Größe von maximal 400 KB, einfache Primärschlüssel verwenden ausschließlich einen Partition Key, während zusammengesetzte Schlüssel für Bereichsabfragen einen Sort Key ergänzen, und Partition Keys mit hoher Kardinalität verhindern Hot Partitions. Verwenden Sie für effiziente Zugriffe Query statt Scan. Als Nächstes beschäftigen wir uns mit den Kapazitätsmodi Provisioned und On-Demand.

Häufig gestellte Fragen

Ist die Lektion „Tabellen, Elemente und Primärschlüssel“ kostenlos?

Ja — der vollständige Text von „Tabellen, Elemente und Primärschlüssel“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des AWS Solutions Architect-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der AWS Solutions Architect-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Tabellen, Elemente und Primärschlüssel“?

Entwerfen Sie DynamoDB-Tabellen mit Partition Keys und zusammengesetzten Primärschlüsseln und verstehen Sie die Speicherlimits auf Elementebene. Du übst AWS Solutions Architect mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um AWS Solutions Architect zu starten?

Keine Vorkenntnisse erforderlich. AWS Solutions Architect auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „Tabellen, Elemente und Primärschlüssel“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser AWS Solutions Architect-Lektion Code schreiben und ausführen?

Ja. Jede AWS Solutions Architect-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Tabellen, Elemente und Primärschlüssel
  2. Bereitgestellte vs. On-Demand-Kapazität
  3. Globale und lokale sekundäre Indizes
  4. DynamoDB Streams und globale Tabellen
← Zurück zu AWS Solutions Architect