DynamoDB Einordnung
- Managed Service von AWS
- NoSQL-Datenbank - unterstützt Key-Value und Dokumentendaten
- Serverless: keine Serververwaltung notwendig
- Automatische Skalierung und hohe Verfügbarkeit
- Multi-Region-Replikation möglich (Global Tables)
- SLA: 99,999 % Verfügbarkeit
Tabellen, Items, Attribute
Grundstruktur
- Tabelle: Sammlung von Items (kein festes Schema)
- Item: einzelner Datensatz, schemalos
- Attribut: typisiertes Feld (String, Number, Binary, List, Map, …)
- JSON-ähnliche Struktur
- Maximale Item-Größe: 400 KB
Primärschlüssel: Partition Key
- Einfacher Primärschlüssel aus einem einzigen Attribut
- DynamoDB berechnet einen Hash-Wert → bestimmt physische Partition
- Jedes Item muss einen eindeutigen Partition Key besitzen
{
"UserId": "U-1001", <-- PK
"Name": "Alice",
"Email": "alice@example.com"
}
Primärschlüssel: Composite Key
- Partition Key + Sort Key
- Mehrere Items mit gleichem Partition Key möglich
- Sort Key ermöglicht Bereichsabfragen (begins_with, between, <, >, …)
{
"UserId": "U-1001", <-- PK
"OrderId": "O-2024-01", <-- SK
"Total": 149.99
}
Local Secondary Index (LSI)
- Gleicher Partition Key wie Basistabelle, aber anderer Sort Key
- Alternative Sortierung und Filterung innerhalb einer Partition
- Muss beim Erstellen der Tabelle definiert werden
- Maximal 5 LSIs pro Tabelle
- Starke Konsistenz möglich
- Teilt Kapazität mit der Basistabelle
Global Secondary Index (GSI)
- Eigener Partition Key und optionaler Sort Key
- Abfragen nach beliebigen Attributen möglich
- Kann jederzeit erstellt oder gelöscht werden
- Eigene Lese- und Schreibkapazität
- Nur Eventually Consistent Reads
- Maximal 20 GSIs pro Tabelle (Standard-Limit)
Kapazitätsmodi
Provisioned
- Feste Anzahl Read Capacity Units (RCU) und Write Capacity Units (WCU)
- 1 RCU = 1 strongly consistent Read (4 KB) oder 2 eventually consistent Reads
- 1 WCU = 1 Write bis 1 KB
- Auto-Scaling möglich
- Günstiger bei vorhersehbarer Last
On-Demand
- Keine Kapazitätsplanung notwendig
- Bezahlung pro Request (Pay-per-request)
- Automatische Skalierung auf jede Last
- Geeignet für unbekannte oder stark schwankende Last
- Höhere Kosten pro Request als Provisioned
Lese- und Schreiboperationen
- GetItem: einzelnes Item über Primary Key abrufen
- PutItem: Item einfügen oder vollständig ersetzen
- UpdateItem: einzelne Attribute eines Items ändern
- DeleteItem: einzelnes Item löschen
- Query: effiziente Abfrage über Partition Key (+ optionaler Sort Key Bedingung)
- Scan: vollständiger Tabellen-Scan, alle Items werden gelesen (ineffizient)
- BatchGetItem / BatchWriteItem: mehrere Items auf einmal lesen / schreiben
Konsistenz
- Eventually Consistent Read (Standard): geringere Kosten (0,5× RCU), Daten ggf. kurz veraltet
- Strongly Consistent Read: aktuellste Daten, 1× RCU, höhere Latenz
- GSI-Lesezugriffe sind immer eventually consistent
- Transaktionen möglich für ACID-Anforderungen
Transaktionen
- TransactWriteItems: atomares Schreiben über mehrere Items / Tabellen
- TransactGetItems: konsistentes Lesen mehrerer Items in einer Operation
- ACID-Garantien: Atomarität, Konsistenz, Isolation, Dauerhaftigkeit
- Bis zu 100 Items oder 4 MB pro Transaktion
- Kosten: 2× WCU bzw. 2× RCU im Vergleich zu nicht-transaktionalen Operationen
- Kein Cross-Region-Support (nur innerhalb einer Region)
DynamoDB Streams
- Change Data Capture (CDC): Protokoll aller Änderungen
- Ereignisse: INSERT, MODIFY, REMOVE
- Aufbewahrungsdauer: 24 Stunden
- Integration mit AWS Lambda
- TTL (Time to Live): automatisches Löschen abgelaufener Items
- Grundlage für Global Tables
Global Tables
- Multi-Region-Replikation: Tabelle in mehreren AWS-Regionen aktiv
- Active-Active: Lese- und Schreibzugriffe in jeder Region
- Eventual Consistency zwischen Regionen (< 1 Sekunde)
- Konfliktauflösung: Last-Write-Wins
- Basiert auf DynamoDB Streams
- Niedrige Latenz für globale Nutzer
Links zu AWS Videos