Based on the SAA-C03 exam guideReport an error
The database services covered in Week 5 were each built to solve a different problem. RDS runs traditional relational DBs without the management burden; Aurora overcomes the limits of relational DBs through storage redesign; DynamoDB serves hundreds of millions of items in milliseconds without a schema; ElastiCache delivers repeated reads at memory speed. Today is the day to firmly organize how these services are tested on the exam.
Most exam questions come in the form "which would you choose in this scenario?" The key is finding the reason one option — while several may look technically possible — is better than the rest. To find that "better reason," you must understand each service's design purpose and constraints from the inside. This is exactly why you need to understand why things were designed the way they were, not just memorize the technology.
RDS's exam core is the difference between Multi-AZ and Read Replicas. These two features were built for completely different purposes, yet they're often confused. Multi-AZ is an HA (high availability) tool that maintains a Standby via synchronous replication and automatically promotes the Standby to Primary on failure. A Read Replica is a tool that creates read-only copies via asynchronous replication to distribute read traffic.
Evidence that the two features serve different purposes: the Standby handles no traffic in normal times. It exists solely for automatic failover (60-120s) on a Primary failure. A Read Replica receives read traffic through a separate endpoint. Its failover requires a manual promote and takes minutes to tens of minutes.
RDS Proxy solves two problems, each in a different way. It provides connection pooling for clients like Lambda that create bursty, high-volume connections, and it shortens the client's connection-switching time during a Multi-AZ failover.
| Feature | Purpose | Replication Method | Failover | Reads | Cost |
|---|---|---|---|---|---|
| Multi-AZ | HA (high availability) | Synchronous | Automatic (60-120s) | Standby can't serve reads | 2× |
| Read Replica | Read scaling | Asynchronous | Manual promote | Possible (separate endpoint) | Additional per Replica |
| RDS Proxy | Connection pooling | N/A | Failover acceleration | N/A | A fraction of instance cost |
💡 Why RDS Multi-AZ synchronous replication works even with 1-2ms lag — The reason RDS Multi-AZ synchronous replication works well despite 1-2ms inter-AZ latency lies in the commit pattern of database transactions. In OLTP systems, most transactions complete in milliseconds. Even adding a 1-2ms inter-AZ RTT, the total transaction completion time stays at the millisecond level, so users don't feel much delay. In contrast, an inter-region RTT (e.g., Seoul-Tokyo about 35ms) seriously affects OLTP transactions. This is the basis for the design decision that "inter-region synchronous replication is impossible," and the reason Aurora Global Database chose asynchronous replication at the storage layer.
Aurora's differentiator is shared distributed storage. 6 copies, 3 AZs, 4/6 Quorum writes. The practical differences this structure creates:
Aurora Global Database replicates across regions at the storage layer to achieve < 1 second lag. RDS Cross-Region Read Replica replicates at the DB engine layer (binlog/WAL), so its lag is longer.
[Aurora shared storage structure]
Writer EC2 (AZ-a) Reader EC2 (AZ-b) Reader EC2 (AZ-c)
│ │ │
└─────────────────────┴─────────────────────┘
│
Shared distributed storage
(6 copies / 3 AZs / automatic recovery)
AZ-a: Copy 1, Copy 2
AZ-b: Copy 3, Copy 4
AZ-c: Copy 5, Copy 6
4/6 Quorum write / 3/6 Quorum read
The single most important concept in DynamoDB is partition key design. If a Hot Partition occurs, you can mitigate it with Adaptive Capacity, but fundamentally you must redesign the partition key.
| Concept | Key Fact |
|---|---|
| Partition key | Even distribution + High Cardinality required |
| WCU | One 1KB write = 1 WCU (transactions are ×2) |
| RCU | One 4KB strongly consistent read = 1 RCU, eventual consistency is ×0.5 |
| LSI | Same PK, different SK. Added only at creation. Strong consistency possible |
| GSI | Different PK. Added any time. Eventual consistency only |
| DAX | DynamoDB-only cache. Applied with just an SDK change. Microseconds |
| Global Tables | Multi-region active-active. LWW conflict resolution. ~1s replication |
| Streams | 24-hour change log. Follow-up processing via Lambda event source mapping |
| On-Demand | When traffic is unpredictable. Per-request billing |
| Provisioned+AS | When traffic is stable. Cost optimization |
| PITR | Second-level recovery within 35 days. Restores only to a new table |
💡 Choosing Week 5 services through the CAP theorem — Database selection is a practical application of the CAP theorem (Brewer, 2000). RDS Multi-AZ chooses CP (Consistency + Partition Tolerance) within the same region. DynamoDB eventual consistency chooses AP (Availability + Partition Tolerance). Aurora Global Database's Primary region is CP, while its Secondary regions are closer to AP with eventual consistency. MemoryDB for Redis strongly guarantees C with its durability guarantee (Multi-AZ WAL). Which trade-off you choose based on business requirements is the core of the architecture decision. A distributed system that always satisfies "CA" is impossible by the CAP theorem.
ElastiCache Redis, Memcached, DAX, and MemoryDB each solve a different problem.
| Tool | Suitable Scenario | Key Distinguishing Keywords |
|---|---|---|
| ElastiCache Redis | Sessions, leaderboards, Pub/Sub, general cache | Rich data structures, Multi-AZ HA |
| ElastiCache Memcached | Simple String cache, multi-threaded CPU efficiency | Simple, no HA needed |
| DAX | Microsecond acceleration of DynamoDB reads | DynamoDB-only, SDK change only |
| MemoryDB for Redis | Lossless durability + Redis API | Durability, Redis as the main DB |
Here we sort out, all at once, the pairs most frequently confused on the exam.
Multi-AZ vs Read Replica:
Aurora vs RDS:
GSI vs LSI:
DAX vs ElastiCache:
MemoryDB vs ElastiCache Redis:
Aurora Global Database vs RDS Cross-Region Read Replica:
DynamoDB Global Tables vs Aurora Global DB:
📚 The Capital One security incident and DB architecture lessons — The 2019 Capital One data breach (exposure of 106 million people's personal information) was an IAM and EC2 metadata-service security problem rather than a database design one. Yet the incident reminded us how important RDS encryption, KMS key management, placement in private subnets within a VPC, and least-privilege principles are. Placing RDS in a public subnet, granting excessive IAM permissions, or disabling encryption became the causes of real incidents. On the SAA-C03 exam too, "put the DB in a private subnet, enable encryption, least-privilege IAM" is always the correct security answer.
In reality, these services aren't used in isolation; they form layers and work together.
[ Multi-layered data architecture of an e-commerce platform ]
Mobile/Web
│
▼
CloudFront (edge cache — static content, some API responses)
│
▼
API Gateway (HTTP API) → Lambda
│
┌────────────────────────┤
│ │
▼ ▼
DAX → DynamoDB ElastiCache Redis
(order/inventory events) (session/real-time inventory)
│ │
│ Streams │ Cache-Aside
▼ │
Lambda → OpenSearch RDS Proxy
(search indexing) │
▼
Aurora Multi-AZ
(user/product relational data)
│ Global DB (<1s replication)
▼
Aurora Secondary (us-east-1)
(read distribution for overseas users)
[ Analytics pipeline ]
Aurora → DMS → Redshift (nightly OLAP analytics)
DDB → S3 Export → Athena (serverless queries)
CloudWatch Logs → Firehose → OpenSearch (real-time log analytics)
The role of each service in this architecture:
🔍 Data access pattern analysis comes first — Questions you must answer before designing an architecture: (1) What's the read-to-write ratio? (2) Is the traffic pattern predictable? (3) What are the response-latency requirements? (4) Is the data model relational or Key-Value? (5) Are there global users? (6) What's the tolerable data-loss level (RPO)? (7) What's the tolerable downtime level (RTO)? Answer these 7 questions and the service choice is almost automatically determined. SAA-C03 exam questions also emphasize one or more of these 7 dimensions to guide you to the answer.
SAA-C03 also covers the Cost Optimization Pillar (20%). Cost perspectives in database selection:
RDS vs Aurora: Aurora costs about 20% more. "Scenarios where Aurora is justified for the same MySQL/PostgreSQL workload" are when the failover requirement is within 30 seconds, many Readers are needed (Aurora allows up to 15 per cluster), global replication is needed, or traffic fluctuates.
On-Demand vs Provisioned: DynamoDB On-Demand is up to 4× more expensive than Provisioned for stable traffic. Workloads with predictable traffic are cost-efficient with Provisioned + Auto Scaling.
ElastiCache cache: If the cache hit rate is 90%+, the cache lets you shrink the DB instance size, so overall cost drops. Setting the TTL too short lowers the hit rate.
Aurora I/O-Optimized: If I/O cost is 25%+ of the total, the I/O-Optimized pricing plan is favorable. It converts to a flat I/O cost.
ElastiCache Reserved Nodes: A 1-year or 3-year reservation saves up to 55% versus on-demand. For a stable cache workload, Reserved is favorable.
⚠️ Why instance upsizing is the last resort — "Upgrade to a bigger instance" isn't always right. Read load is solved more cost-efficiently by a Read Replica, connection-count problems by RDS Proxy, repeated reads by ElastiCache, and DynamoDB reads by DAX. Instance upsizing is the last resort. On the exam, when an "increase the instance size" option appears, first check whether there's a more precise solution (Proxy, Read Replica, Cache).
Here we organize how the Week 5 services play their roles in disaster recovery (DR).
| Service | RPO | RTO | Mechanism |
|---|---|---|---|
| RDS Multi-AZ | ~0 (synchronous) | 60-120s | Automatic DNS Failover |
| Aurora Multi-AZ | ~0 (shared storage) | Within 30s | Reader → Writer promotion |
| Aurora Global DB | < 1s | On the order of minutes | Manual/automatic Promote |
| DynamoDB (single region) | ~0 (PITR) | ~minutes | New-table recovery |
| DynamoDB Global Tables | ~1s | ~0 (other region already serving) | Endpoint switch |
| ElastiCache Redis Multi-AZ | Seconds (async) | Seconds (automatic Failover) | Read Replica promotion |
| MemoryDB for Redis | ~0 (WAL synchronous) | Seconds | Automatic recovery |
Click a choice to reveal the answer and explanation.
Question 1
A startup launches a new social media app. Traffic was 100 RPS a day, then suddenly surged to 50,000 RPS after going viral. The DB is PostgreSQL. To handle this traffic without service interruption:
Question 2
An online banking system stores account transaction records. Every transaction must be recorded immutably for audit purposes, and queries computing the balance at an arbitrary point in the past are needed. What is the most suitable service?
Question 3
You're building a game leaderboard system. You must store millions of scores in real time and handle "look up the top 100" and "look up a specific user's rank" within tens of ms. What is the most suitable service?
Question 4
On an Aurora MySQL cluster, an analytics team frequently runs OLAP queries that affect the OLTP workload. To solve this with minimal additional cost:
Question 5
A company consumes a very large amount of RCU on a DynamoDB table. Analyzing the access pattern reveals that 80% of all reads are concentrated on the same 100 items. What is the most cost-efficient solution?
Question 6
Regular maintenance (OS/engine patching) is scheduled on a Multi-AZ RDS MySQL. To minimize downtime while this work runs:
Question 7
In a message feed app, each user must be able to see the latest messages from the people who follow them. Messages are chronological, and you must quickly fetch "the 50 most recent messages in a specific user's feed." If using DynamoDB, what is the table design?
Question 8
An application currently using RDS PostgreSQL has no DBA and wants to automate OS patching, DB patching, backups, and Multi-AZ setup going forward. Which option reduces the most operational burden while maintaining existing PostgreSQL compatibility?
Question 9
In a delivery app, you must store each rider's current location and handle "look up available riders within a 5km radius" in real time. What is the most suitable service?
Question 10
A Lambda-based microservice uses Aurora MySQL. At peak traffic, Lambda concurrency reaches 500 and Aurora starts emitting "max_connections" errors. What is the most suitable solution?
Question 11
A company collects temperature, pressure, and humidity data from 1 million IoT devices per second. Each device sends 1 record per second. To efficiently store this data and quickly look up "a specific device's temperature trend over the past 24 hours":
Question 12
A SaaS platform accessed by users in 150 countries worldwide stores user settings data. Writes and reads occur simultaneously in each region, and a "last write wins" policy is acceptable on settings conflict. What is the most suitable service?