Amazon SAA-C03: Datenbanken & Caching — Lernleitfaden

Teil des AWS SAA-C03 — Vollständiger Lernleitfaden. Üben Sie mit verifizierten Antworten im Amazon-Prüfungscenter, oder absolvieren Sie zeitlich begrenzte Übungstests auf ExamRoll.io.

Amazon RDS: Verwaltete relationale Engines

Amazon RDS bietet sechs verwaltete Engines – MySQL, PostgreSQL, MariaDB, Oracle, SQL Server und Amazon Aurora (MySQL- und PostgreSQL-kompatibel) – und abstrahiert dabei Patching, Backups, Replikationstopologie und Failover. Die Wahl der Engine bestimmt die Lizenzierung, die Backup-Semantik und die Verfügbarkeit von Funktionen: Bei Oracle und SQL Server gibt es die Unterscheidung zwischen BYOL (Bring Your Own License) und „Lizenz inklusive“, SQL Server unterstützt bis zu fünf Read Replicas über native Replikation, und Oracle Read Replicas erfordern die Enterprise Edition mit Active Data Guard.

Die beiden RDS-Funktionen, die am häufigsten für Verfügbarkeit und Skalierung genutzt – und am häufigsten verwechselt – werden, sind Multi-AZ-Bereitstellungen und Read Replicas. Sie sind orthogonal, komplementär und nicht austauschbar.

Multi-AZ stellt eine synchrone Standby-Replik in einer zweiten Availability Zone bereit. Jeder Schreibvorgang wird sowohl auf der primären als auch auf der Standby-Instanz committet, bevor er bestätigt wird. Dies ergibt einen RPO von praktisch null und einen RTO von 60–120 Sekunden bei einem automatischen Failover. Die Standby-Instanz akzeptiert keinen Datenverkehr – sie existiert ausschließlich für den Failover. Wenn die primäre Instanz ausfällt, eine AZ beeinträchtigt ist oder Wartungsarbeiten einen Neustart erfordern, schwenkt RDS den DNS-CNAME auf die Standby-Instanz um, und Anwendungen verbinden sich transparent über denselben Endpunkt neu. Multi-AZ ist die einfachste Lösung für einen Single Point of Failure in einer einzelnen AZ: Es ist eine reine Konfigurationsoption, erfordert keine Schema- oder Anwendungsänderungen und behält den Endpunkt bei. Die neuere Multi-AZ-Cluster-Bereitstellung ist eine Drei-Knoten-Topologie (ein Writer, zwei lesbare Standbys), die eine semi-synchrone Replikation mit einer Commit-Latenz von etwa einer Sekunde verwendet und so HA plus begrenzten Lese-Offload bietet.

Read Replicas verwenden die native asynchrone Replikation der Engine (MySQL binlog, PostgreSQL WAL-Streaming). Sie sind das richtige Werkzeug für die Leseskalierung – analytische Abfragen, Reporting-Dashboards, Ad-hoc-SELECTs –, die andernfalls die OLTP-Leistung auf der primären Instanz beeinträchtigen würden. Das klassische Szenario: Eine Datenbank für die Auftragsabwicklung erleidet Timeouts, weil Mitarbeiter lange Monatsabschlussberichte ausführen. Das Hinzufügen einer Read Replica und das Verweisen des Reporting-Tools auf deren Endpunkt isoliert die analytische Last, ohne die primäre Instanz hochskalieren zu müssen. Read Replicas können regionenübergreifend sein und manuell zu eigenständigen Datenbanken hochgestuft werden, aber die Hochstufung erfolgt niemals automatisch, und alle Transaktionen, die zum Zeitpunkt des Ausfalls noch nicht repliziert wurden, gehen verloren.

In diesem Bereich gibt es zwei wiederkehrende Fallen. Erstens ist es aus mehreren Gründen falsch, Read Replicas als HA-Lösung zu behandeln: Replikate sind asynchron (potenzieller Datenverlust), haben keine automatische Hochstufung, der Endpunkt ändert sich bei der Hochstufung, und laufende Transaktionen gehen verloren. Wenn ein Design „keinen Datenverlust“ verspricht und auf eine Read Replica als Failover-Ziel verweist, ist dieses Versprechen falsch. Zweitens ist die Bereitstellung von Multi-AZ zur Bedienung von Leseverkehr Geldverschwendung, da die Standby-Instanz in der Standardtopologie nicht lesbar ist. Multi-AZ löst das Verfügbarkeitsproblem; Read Replicas lösen das Problem der Leseskalierung; oft will man beides.

Read Replicas tragen auch nichts zur Schreibskalierung bei – jeder Schreibvorgang trifft weiterhin die primäre Instanz, und die Replikate müssen ihn wiederholen. Für die Schreibskalierung nutzt man Sharding, wechselt zu Aurora (entkoppelter Speicher) oder gestaltet das System in Richtung DynamoDB um.

Richtige Dimensionierung von Read Replicas

Eine Replik muss nicht dieselbe Instanzklasse wie die primäre Instanz haben. Die primäre Instanz bewältigt die volle Schreiblast plus Lesezugriffe; eine Replik bewältigt nur die Lesezugriffe, die sie erreichen. Eine primäre

TargetTrackingScalingPolicyConfiguration:
  TargetValue: 70.0
  PredefinedMetricSpecification:
    PredefinedMetricType: DynamoDBReadCapacityUtilization
  ScaleInCooldown: 60
  ScaleOutCooldown: 60

-Instanz in Kombination mit einer

TTLSpecification:
  AttributeName: expireAt
  Enabled: true

-Replik für einen nächtlichen Reporting-Job ist durchaus sinnvoll – vorausgesetzt, die Replik kann mit der Replikations-I/O Schritt halten. Die Methodik lautet: Messen Sie die tatsächliche CPU- und Speicherauslastung sowie den Replica Lag der Replik und dimensionieren Sie sie dann entsprechend dieser Arbeitslast. Die einzige Einschränkung: Wenn Sie beabsichtigen, eine Replik während eines DR-Szenarios zur primären Instanz hochzustufen, muss sie so dimensioniert sein, dass sie die Schreiblast bewältigen kann. Unterdimensionierte Replikate sind keine geeigneten Ziele für eine Hochstufung.

Blue/Green-Deployments und Speicher

RDS Blue/Green-Deployments erstellen eine vollständige Staging-Kopie der Produktionsumgebung (Green), die über logische Replikation synchron gehalten wird. Sie können die Engine-Version aktualisieren, Parametergruppen ändern oder Schemata in der Green-Umgebung anpassen, diese testen und die Umschaltung in weniger als einer Minute mit automatischer Umbenennung des Endpunkts durchführen. Dies eliminiert das klassische Risiko eines In-Place-Upgrades, bei dem ein fehlgeschlagenes Major-Version-Upgrade ein Snapshot-Rollback erzwingt.

Die Speicherauswahl ist für schreibintensive OLTP-Workloads genauso wichtig wie die Instanzklasse. Die gp3/io2-Taxonomie:

TypBasisMax. IOPSAnwendungsfall
gp33.000 IOPS / 125 MB/s (größenunabhängig)16.000Allzweck; IOPS/Durchsatz von Kapazität entkoppelt
io2 Block ExpressProvisioned256.000Unternehmenskritisches OLTP, SAP, große Oracle-Instanzen
io2 Multi-AttachProvisioned256.000Shared-Disk-Cluster (ähnlich Oracle RAC)

Die Verbesserung von gp3 gegenüber gp2 ist die Entkopplung der IOPS von der Größe – Sie müssen nicht mehr Kapazität überprovisionieren, um die Leistung zu steigern. Wählen Sie io2, wenn die dauerhaften IOPS die Obergrenze von gp3 überschreiten oder wenn eine Beständigkeit von 99,999 % erforderlich ist. Multi-Attach ermöglicht es, ein einzelnes io2-Volume an bis zu 16 Nitro-Instanzen anzuhängen, aber das Dateisystem oder die Anwendung muss clusterfähig sein; es ist kein Ersatz für Replikation. Eine latente Ausfallfalle: die Bereitstellung von festem Speicher ohne aktiviertes Speicher-Autoscaling oder einen CloudWatch-Alarm für

import amazondax
dax = amazondax.AmazonDaxClient(
    endpoint_url='dax://cluster.abc.dax-clusters.us-east-1.amazonaws.com')
table = dax.Table('Products')
resp = table.get_item(Key={'sku': '1234'})  # microsecond hit path

. Wenn der freie Speicherplatz auf null sinkt, geht RDS in den Zustand

import redis, json
r = redis.Redis(host='sessions.abc123.ng.0001.use1.cache.amazonaws.com',
                port=6379, ssl=True)

def save_session(sid, data, ttl=1800):
    r.setex(f"sess:{sid}", ttl, json.dumps(data))

und lehnt Schreibvorgänge ab.

Amazon Aurora: Architektur und Endpunkte

Aurora implementiert die Speicherschicht unter MySQL und PostgreSQL als verteiltes, log-strukturiertes, sechsfach repliziertes Volume neu, das sich über drei AZs erstreckt. Rechenknoten sind in Bezug auf den Speicher zustandslos, sodass eine Aurora Replica vom selben zugrunde liegenden Volume liest wie der Writer, anstatt ein Protokoll wiederzugeben. Die Replikationsverzögerung beträgt typischerweise 10–20 ms, im Vergleich zu Sekunden bei Standard-RDS-Replicas, und ein Cluster unterstützt bis zu 15 Replicas, die in etwa 30 Sekunden zum Writer hochgestuft werden können.

Aurora stellt vier Endpunkttypen bereit:

EndpunktZweck
Cluster (Writer)-EndpunktZeigt immer auf die aktuelle primäre Instanz
Reader-EndpunktVerteilt Verbindungen per Load-Balancing auf alle Replicas
Benutzerdefinierter EndpunktLeitet zu einer bestimmten, von Ihnen gewählten Teilmenge von Instanzen weiter
Instanz-EndpunktDirekter Zugriff auf einen einzelnen Knoten

Benutzerdefinierte Endpunkte sind wichtig, wenn Replicas heterogen sind. Wenn drei von sechs Replicas vom Typ db.r6g.8xlarge für analytisches Reporting sind, während der Rest OLTP-Lesezugriffe bedient, leitet der allgemeine Reader-Endpunkt gelegentlich Reporting-Anfragen an kleinere Knoten weiter, was die Vorhersagbarkeit beeinträchtigt. Ein benutzerdefinierter Endpunkt, der nur auf die großen Replicas beschränkt ist, bietet eine deterministische Workload-Isolierung:

aws rds create-db-cluster-endpoint \
  --db-cluster-identifier prod-aurora \
  --db-cluster-endpoint-identifier reporting \
  --endpoint-type READER \
  --static-members reporting-node-1 reporting-node-2 reporting-node-3

Beachten Sie, dass die DNS-TTLs von Aurora-Endpunkten 5 Sekunden betragen; ein längeres Caching von Verbindungszeichenfolgen hebt das Failover-Verhalten aus.

Aurora Auto Scaling fügt Reader basierend auf Ziel-CPU- oder Verbindungsmetriken hinzu und entfernt sie. Dies ist die Standardantwort für unvorhersehbare, leselastige Workloads, die hochverfügbar bleiben müssen:

TargetTrackingScalingPolicyConfiguration:
  PredefinedMetricSpecification:
    PredefinedMetricType: RDSReaderAverageCPUUtilization
  TargetValue: 60.0
  ScaleInCooldown: 300
  ScaleOutCooldown: 60

Wenn RDS MySQL Read Replicas die Replikationsverzögerung zu Spitzenzeiten nicht unter einer Sekunde halten können, ist die Low-Code-Antwort die Migration zu Aurora MySQL – die Verbindungszeichenfolgen ändern sich kaum, und die Replikation auf Speicherebene eliminiert die Verzögerung.

Aurora Serverless v2 und Klonen

Aurora Serverless v2 skaliert die Rechenleistung vertikal in feingranularen Aurora Capacity Units (ACUs, je 2 GiB Arbeitsspeicher) in etwa einer halben Sekunde, ohne Sitzungen zu trennen. Es eignet sich für variable Workloads mit einem bekannten Grundbedarf an Arbeitsspeicher – zum Beispiel eine On-Premises-MySQL-Migration, die immer mindestens 2 GiB verbraucht. Setzen Sie das Minimum auf 1 ACU und das Maximum auf 32 ACUs, und der Cluster passt sich ohne Administration an. Provisioned Aurora bleibt vorzuziehen, wenn die Last konstant und vorhersagbar ist, da Serverless v2 einen Aufschlag pro ACU mit sich bringt.

Das Klonen von Aurora erstellt einen neuen Cluster, der die Speicherseiten der Quelle mittels Copy-on-Write teilt. Klone erscheinen in Sekunden und kosten nichts, bis die Daten divergieren, was sie ideal für Staging-Umgebungen, riskante Migrationen oder um Analysten eine Produktionskopie intensiv nutzen zu lassen, macht. Eine Snapshot-Wiederherstellung stellt die Daten physisch wieder her und kann Stunden dauern; Klonen ist die bessere Wahl, wenn es auf Geschwindigkeit ankommt.

Aurora Global Database

Aurora Global Database erweitert einen Cluster auf bis zu fünf sekundäre Regionen über eine dedizierte Replikationsinfrastruktur auf Speicherebene – nicht durch Binlog-Shipping. Die typische Replikationsverzögerung liegt unter einer Sekunde, der RPO liegt unter einer Sekunde, und ein verwaltetes Failover stuft eine sekundäre Region in weniger als einer Minute hoch.

MerkmalRegionsübergreifende Read ReplicaAurora Global Database
Typischer RPO~1 Minute< 1 Sekunde
Typischer RTO15–60 Minuten< 1 Minute (verwaltetes Failover)
ReplikationspfadBinärprotokoll über das NetzwerkDedizierte Infrastruktur auf Speicherebene
Verwaltetes FailoverNeinJa

Zwei wichtige semantische Aspekte: sekundäre Regionen sind im Normalbetrieb schreibgeschützt, und Global Database ist für DR mit niedrigem RPO und Lesezugriffe mit geringer Latenz aus der Ferne konzipiert, nicht für Aktiv-Aktiv-Multi-Master. Die Annahme, eine Global Database würde „Schreibvorgänge in der sekundären Region automatisch handhaben“, ist falsch – Schreibvorgänge dort erfordern ein explizites verwaltetes Failover oder ein „Detach-and-Promote“ (Trennen und Hochstufen). Für eine angegebene Anforderung von 5 Minuten RPO / 20 Minuten RTO über Regionen hinweg mit minimalem Betriebsaufwand ist Global Database die Standardantwort.

RDS Proxy und Verbindungsmanagement

Serverless- und hochgradig nebenläufige Workloads verschärfen ein klassisches Problem: Verbindungsstürme (Connection Storms). Eine Lambda-Funktion, die auf 3.000 gleichzeitige Ausführungen skaliert, öffnet 3.000 Sockets, sprengt max_connections und verursacht kaskadierende Ausfälle – genau dann, wenn das System unter Last steht. Pools innerhalb der Funktion helfen nicht, da jede nebenläufige Ausführungsumgebung isoliert ist.

RDS Proxy befindet sich zwischen den Clients und der Datenbank, unterhält einen warmen Pool von Verbindungen und multiplext Client-Sitzungen auf diese. Er löst zwei Probleme:

  1. Verbindungsstürme. Tausende von Client-Sitzungen werden auf einen kleinen Backend-Pool gemultiplext.
  2. Failover-Zeit. Der Proxy hält die Client-Verbindungen offen, während er die Backend-Verbindung wiederherstellt. Dies reduziert die wahrgenommene Failover-Zeit um bis zu 66 % und eliminiert die clientseitige Wiederherstellung von TCP/TLS und die erneute DNS-Auflösung.

Er lässt sich für die Handhabung von Anmeldeinformationen in IAM und Secrets Manager integrieren, wodurch hartcodierte Secrets aus dem Anwendungscode entfernt werden.

DBProxy:
  Type: AWS::RDS::DBProxy
  Properties:
    EngineFamily: POSTGRESQL
    RequireTLS: true
    IdleClientTimeout: 1800
    Auth:
      - AuthScheme: SECRETS
        SecretArn: !Ref DBSecret
        IAMAuth: REQUIRED

Anwendungen verbinden sich mit dem Proxy-Endpunkt, nicht mit dem Cluster-Endpunkt. Jede Lambda-zu-RDS- oder High-Fan-Out-Architektur sollte RDS Proxy verwenden, es sei denn, es gibt einen bestimmten Grund, dies nicht zu tun. Den Betrieb eines eigenen Poolers (PgBouncer, ProxySQL) auf EC2 ist möglich, bringt aber den zusätzlichen Betriebsaufwand mit sich, zu dessen Beseitigung der Proxy dient.

DynamoDB: Kapazitätsmodi

DynamoDB ist ein verwalteter Schlüssel-Wert-/Dokumentenspeicher mit einer Latenz im einstelligen Millisekundenbereich bei jeder Skalierungsstufe, der horizontal nach einem Hash-Schlüssel partitioniert wird. Es bietet zwei Kapazitätsmodi:

ModusOptimal fürAbrechnungVerhalten bei Lastspitzen
BereitgestelltVorhersehbaren, gleichmäßigen DatenverkehrRCU/WCU pro StundeDrosselt, wenn kein Auto-Scaling konfiguriert ist
On-DemandUnbekannte, unregelmäßige oder neue WorkloadsPro AnfrageAbsorbiert Datenverkehr sofort bis zu den Tabellengrenzen

On-Demand ist wesentlich einfacher, kostet aber pro Anfrage etwa 6- bis 7-mal mehr als gut ausgelastete bereitgestellte Kapazität. Für einen nächtlichen 4-Stunden-Batch mit 500 WCU ist On-Demand deutlich zu teuer – bereitgestellte Kapazität mit geplanter Skalierung oder reservierte Kapazität ist weitaus günstiger. Umgekehrt führt die Verwendung von bereitgestellter Kapazität für einen unvorhersehbaren Workload bei einem öffentlichen Launch zu Throttling. Für gleichmäßige Workloads mit moderater Varianz ist bereitgestellte Kapazität mit Auto-Scaling mit Zielverfolgung bei etwa 70 % Auslastung erheblich günstiger als On-Demand – oft um 50–70 %:

TargetTrackingScalingPolicyConfiguration:
  TargetValue: 70.0
  PredefinedMetricSpecification:
    PredefinedMetricType: DynamoDBReadCapacityUtilization
  ScaleInCooldown: 60
  ScaleOutCooldown: 60

Sie können den Modus einmal alle 24 Stunden wechseln. Die Annahme, dass On-Demand generell günstiger ist, ist ein kostspieliger Fehler; ebenso die Annahme, dass bereitgestellte Kapazität für unregelmäßigen Datenverkehr immer die richtige Wahl ist.

DynamoDB: Konsistenz, Streams, Globale Tabellen

Lesezugriffe sind standardmäßig eventuell konsistent (können innerhalb von ca. 1 Sekunde veraltete Daten zurückgeben, kostet 0,5 RCU). Das Setzen von ConsistentRead=true gibt den neuesten committeten Wert zu doppelten Kosten zurück. Stark konsistente Lesezugriffe werden nicht über globale sekundäre Indizes oder über DAX unterstützt – diese Pfade geben immer eventuell konsistente Daten zurück.

DynamoDB Streams erfassen Änderungen auf Elementebene als geordnetes Protokoll, das 24 Stunden lang aufbewahrt wird. Sie lösen Lambda für nachgelagerte Verarbeitungen aus (Suchindizierung, Benachrichtigungen, tabellenübergreifende Denormalisierung), ohne dass ein Polling erforderlich ist.

Globale Tabellen bauen auf Streams auf, um eine Multi-Aktiv-, Multi-Region-Replikation mit Last-Writer-Wins-Konfliktlösung bereitzustellen. Sie sind die richtige Antwort, wenn Lese- und Schreibvorgänge in mehreren Regionen lokal erfolgen müssen. Sie verdoppeln jedoch ungefähr die Speicher- und Schreibkosten – jeder Schreibvorgang ist eine WCU in jeder Replikatregion – und schwächen die Konsistenz zwischen den Regionen. Die Falle besteht darin, Globale Tabellen zu aktivieren, wenn eine einzelne Region die Verfügbarkeitsanforderungen erfüllt: DynamoDB in einer einzelnen Region wird bereits über drei AZs mit einer Verfügbarkeit von 99,99 % repliziert. Kosteneffektive Hochverfügbarkeit in einer einzelnen Region wird durch eine Tabelle in einer einzelnen Region mit aktiviertem PITR und, falls gewünscht, bereitgestellter Kapazität mit Auto-Scaling erreicht.

Point-in-Time Recovery (PITR) bietet kontinuierliche Backups mit einer Wiederherstellungsgranularität im Sekundenbereich für die letzten 35 Tage bei vernachlässigbarem Overhead. Aktivieren Sie es für jede Produktionstabelle – es erfüllt typische RPO-Anforderungen von Minuten statt Stunden. Für eine längere Aufbewahrung (regulatorische Anforderungen) integrieren Sie AWS Backup für geplante, über den Lebenszyklus verwaltete und regionsübergreifend kopierbare Backups.

TTL ermöglicht die Angabe eines Attributs, das einen Unix-Epochen-Ablaufzeitpunkt enthält; DynamoDB löscht abgelaufene Elemente asynchron und kostenlos, was ideal für Session-Speicher, kurzlebige Token oder Event-Caches ist. TTL-Löschungen fließen zur nachgelagerten Archivierung durch Streams:

TTLSpecification:
  AttributeName: expireAt
  Enabled: true

Für Analysen erzeugt der Export nach S3 einen Point-in-Time-Snapshot, der von Athena, Redshift Spectrum oder EMR gelesen werden kann, ohne die Tabellenkapazität zu verbrauchen – ein weitaus besseres Muster als das Scannen der Tabelle.

DAX: DynamoDB Accelerator

DAX ist ein vollständig verwalteter In-Memory-Cache mit Write-Through speziell für DynamoDB, der eine Leselatenz im Mikrosekundenbereich im Vergleich zum Basiswert von DynamoDB im einstelligen Millisekundenbereich liefert. Sein Unterscheidungsmerkmal ist die API-Kompatibilität: Der DAX-Client ist ein direkter Ersatz für den DynamoDB-SDK-Client, sodass Anwendungen ihn durch Ändern der Endpunktkonfiguration anstelle des Umschreibens der Abfragelogik übernehmen:

import amazondax
dax = amazondax.AmazonDaxClient(
    endpoint_url='dax://cluster.abc.dax-clusters.us-east-1.amazonaws.com')
table = dax.Table('Products')
resp = table.get_item(Key={'sku': '1234'})  # microsecond hit path

DAX unterhält zwei Caches: einen Item-Cache für GetItem/BatchGetItem-Ergebnisse und einen Query-Cache für Query/Scan-Ergebnisse. Schreibvorgänge erfolgen per Write-Through – DAX leitet sie an DynamoDB weiter und aktualisiert bei Erfolg seinen Item-Cache – aber der Query-Cache basiert auf TTL, sodass Abfrageergebnisse selbst bei frisch geschriebenen Elementen veraltet sein können.

Zwei Einschränkungen sind wichtig. Erstens beschleunigt DAX nur eventuell konsistente Lesezugriffe; stark konsistente Lesezugriffe umgehen den Cache. Zweitens verursachen andere Schreibvorgänge, die DAX umgehen, veraltete Daten. Für eine Produktdetailseite, die täglich millionenfach aufgerufen wird, ist DAX der Beschleuniger mit dem geringsten Betriebsaufwand – kein Code zur Cache-Invalidierung, keine separate Cluster-Verwaltung. ElastiCache vor DynamoDB würde funktionieren, erfordert aber eine Cache-Aside-Logik, die DAX überflüssig macht.

ElastiCache: Redis und Memcached

ElastiCache bietet als Managed Service, der Redis oder Memcached ausführt, In-Memory-Datenzugriff im Sub-Millisekundenbereich. Die Wahl der Engine hängt von den benötigten Funktionen ab:

Zwei kanonische Muster dominieren.

Zentralisierter Session-Speicher. Wenn ein ALB den Datenverkehr auf zustandslose EC2- oder ECS-Instanzen verteilt, erzwingt die lokale Speicherung von Sessions Sticky Sessions, was zu unausgeglichener Lastverteilung führt und bei Scale-In, Deployments und AZ-Ausfällen Probleme verursacht. Die Auslagerung von Sessions in Redis ermöglicht es jeder Instanz, jede Anfrage zu bedienen, und die Sessions überleben einen Host-Ausfall:

import redis, json
r = redis.Redis(host='sessions.abc123.ng.0001.use1.cache.amazonaws.com',
                port=6379, ssl=True)

def save_session(sid, data, ttl=1800):
    r.setex(f"sess:{sid}", ttl, json.dumps(data))

Entlastung von Lesezugriffen für aufwendige Abfragen – Ranglisten (Redis Sorted Sets über ZADD/ZREVRANGE), Katalogabfragen, Aggregationen. Caching-Strategien müssen den Konsistenzanforderungen entsprechen:

data = r.get(f"product:{sku}")
if data is None:
    data = db.query("SELECT * FROM products WHERE sku=%s", sku)
    r.setex(f"product:{sku}", 300, serialize(data))

Sich auf eine Caching-Schicht ohne Invalidierungsstrategie zu verlassen – TTL, explizites DEL bei Updates oder Write-Through – führt zu veralteten Lesezugriffen (Stale Reads). Der Fehlermodus ist schleichend: Die Anwendung scheint korrekt zu funktionieren, bis Benutzer Abweichungen bemerken. Caching ist oft auch die kostengünstigste Methode, um Lesezugriffe über das hinaus zu skalieren, was Read Replicas problemlos bewältigen können, und schützt die primäre Instanz bei Lastspitzen.

Im Gegensatz zu DAX ist ElastiCache Engine-agnostisch – Sie sind für die Invalidierungslogik verantwortlich –, weshalb DAX in puncto betrieblicher Einfachheit gewinnt, wenn der Backing Store DynamoDB ist.

Migration: DMS und SCT

Der AWS Database Migration Service (DMS) repliziert Daten zwischen homogenen Engines (Oracle→Oracle, MySQL→Aurora MySQL) oder heterogenen Engines (Oracle→Aurora PostgreSQL, SQL Server→RDS MySQL, On-Prem→DynamoDB). Eine DMS-Task hat drei Phasen:

  1. Full Load – Massenkopie vorhandener Zeilen.
  2. CDC (Change Data Capture) – Verfolgt das Transaktionsprotokoll der Quelle und wendet laufende Änderungen an.
  3. Full Load + CDC – das gängige Muster für minimale Ausfallzeiten: Die Quelle bleibt online, DMS hält das Ziel synchron, die Umstellung (Cutover) ist ein kurzer DNS-Wechsel.
aws dms create-replication-task \
  --replication-task-identifier ora-to-aurora \
  --source-endpoint-arn $SRC --target-endpoint-arn $TGT \
  --migration-type full-load-and-cdc \
  --table-mappings file://mappings.json \
  --replication-instance-arn $RI

DMS Serverless macht die Dimensionierung und Verwaltung von Replikationsinstanzen überflüssig – die Kapazität wird automatisch an die Arbeitslast angepasst, was sich für variable oder langlaufende CDC eignet. Quell-Engines müssen Supplemental Logging (Oracle) oder binäres Logging im ROW-Format (MySQL) aktiviert haben. Für sehr große Startdatenmengen (Seeds) integriert DMS mit Snowball Edge für Offline-Ladevorgänge.

DMS verschiebt Daten, nicht das Schema. Für heterogene Migrationen kombinieren Sie es mit dem AWS Schema Conversion Tool (SCT), das Stored Procedures, Views, Trigger, Sequenzen und dialektspezifische Typen konvertiert – zum Beispiel Oracle PL/SQL zu PostgreSQL PL/pgSQL oder T-SQL zu Aurora MySQL. SCT erstellt einen Bewertungsbericht, der Objekte kennzeichnet, die eine manuelle Nachbearbeitung erfordern (typischerweise 5–20 % bei komplexen Codebasen). DMS allein für eine engine-übergreifende Migration zu verwenden, ist ein häufiger Fehler: DMS kann zwar rudimentäre Zieltabellen erstellen, übersetzt aber Prozeduren oder proprietäre Typen nicht korrekt. Bei homogenen Migrationen ist SCT nicht erforderlich – native Tools (mysqldump, pg_dump, RMAN) plus DMS CDC sind ausreichend.

Das vollständige engine-übergreifende Muster:

1. SCT: convert schema, apply to target RDS/Aurora
2. DMS full-load task: bulk copy existing data
3. DMS CDC task: capture ongoing changes from source
4. Cutover: stop writes at source, wait for CDC lag = 0, redirect app

Backups und Point-in-Time Recovery

Automatisierte RDS-Backups kombinieren tägliche Snapshots mit 5-minütigen Transaktionsprotokoll-Backups und ermöglichen so eine PITR (Point-in-Time Recovery) auf die Sekunde genau innerhalb des Aufbewahrungszeitraums (1–35 Tage, Standard 7). Die Wiederherstellung erstellt eine neue Instanz – Sie können nicht direkt auf der bestehenden Instanz wiederherstellen (in-place) –, daher müssen Anwendungs-Endpunkte oder CNAMEs aktualisiert werden. Manuelle Snapshots bleiben über den Aufbewahrungszeitraum hinaus bestehen und überleben das Löschen der Instanz (abhängig von der Einstellung für den finalen Snapshot), können für DR über Regionen hinweg kopiert und über Konten hinweg geteilt werden.

Fast Snapshot Restore (FSR) für EBS-gestützte Snapshots eliminiert die Latenz durch Lazy Loading und verleiht wiederhergestellten Volumes sofort die volle Leistung – nützlich, wenn unter Zeitdruck mehrere Umgebungen aus einem Snapshot erstellt werden. Das Klonen von Aurora umgeht Snapshots für Kopien innerhalb derselben Region vollständig. DynamoDB PITR ist eine parallele Funktion, die pro Tabelle aktiviert werden muss und bei der Wiederherstellung eine neue Tabelle erzeugt.

Zweckgebundene Datenbanken

Die Auswahl einer zweckgebundenen Engine, wenn die Zugriffsmuster es erfordern, verhindert eine teure Neuarchitektur. Amazon Neptune ist eine verwaltete Graph-Datenbank, die Gremlin, openCypher und SPARQL unterstützt – geeignet, wenn Abfragen Beziehungen durchlaufen (Betrugsnetzwerke, soziale Graphen, Wissensgraphen), bei denen rekursive Joins in einer relationalen Engine unerschwinglich teuer wären. Amazon QLDB ist ein unveränderliches, kryptographisch verifizierbares Ledger mit einem reinen Anhänge-Journal (Append-only), geeignet für Aufzeichnungssysteme (Systems of Record), die eine manipulationssichere Auditierung erfordern – Lieferketten-Herkunft, Finanztransaktionen, Kfz-Zulassungsdaten. DynamoDB ist der Standard für Key-Value- oder Dokumentenzugriff im einstelligen Millisekundenbereich bei jeder Skalierung, unter Verwendung von Mustern wie Single-Table-Design, zusammengesetzten Sortierschlüsseln für hierarchischen Zugriff und GSIs für alternative Zugriffspfade. Das Erzwingen dieser Workloads in RDS führt zu Lock Contention (Ledger-Schreibvorgänge), Abfragekomplexität (Graph-Traversal) oder Skalierungsgrenzen (Key-Value mit hohem Durchsatz) – jeder dieser Punkte ist in der späteren Behebung weitaus kostspieliger als die richtige Wahl zum Zeitpunkt des Designs.

Zusammenfassung der Fallstricke



Inhaltsbereitstellung · Alle Domänen · Analytik

Diese Fragen üben → · Zeitlich begrenzte Übung auf ExamRoll.io →

Pass the whole exam — not just this question

You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.

Bestehe deine Prüfung →

Amazon durchsuchen →

Related guides

All-in-One Zugang

Ein Abonnement. Jede Prüfung.

Jeder Plan schaltet unbegrenzte Antwortsuche, Übungstests, KI-Erklärungen und die vollständige Ressourcenbibliothek frei – in über 20 Sprachen.

Monatlich
24.87
Just €0.83/day
Alles inklusive:
  • Unbegrenzte Antwortsuche
  • Unbegrenzte Übungstests
  • KI-gestützte Erklärungen
  • Vollständige Ressourcenbibliothek
  • Über 20 Sprachen
  • Wöchentliche Inhaltsaktualisierungen
  • Belohnungen & Empfehlungen
  • Priorisierter Support
Kostenlose Testphase starten

Keine Kreditkarte erforderlich*

Bestes Preis-Leistungs-Verhältnis
12 Monate
179.87
Just €0.49/daySave 40%
Alles inklusive:
  • Unbegrenzte Antwortsuche
  • Unbegrenzte Übungstests
  • KI-gestützte Erklärungen
  • Vollständige Ressourcenbibliothek
  • Über 20 Sprachen
  • Wöchentliche Inhaltsaktualisierungen
  • Belohnungen & Empfehlungen
  • Priorisierter Support
Kostenlose Testphase starten

Keine Kreditkarte erforderlich*

✓ Kostenloser Plan enthalten · ✓ Jederzeit kündbar · ✓ Alle Pläne schalten das vollständige Produkt frei