RDS vs Aurora vs DynamoDB – Database Selection Guide

RDS vs Aurora vs DynamoDB – AWS Database Selection Guide

Choosing the right AWS database service is one of the most impactful architectural decisions you’ll make. Amazon RDS, Amazon Aurora, and Amazon DynamoDB serve fundamentally different needs, and selecting the wrong one leads to performance bottlenecks, cost overruns, or painful migrations. This guide provides a structured decision framework — not just feature comparisons — to help you choose correctly the first time.

This post is designed as a selection/decision guide with clear criteria, decision flowcharts, and tradeoff analysis for each service.

🎯 Quick Decision Rule:

  • Need SQL, complex joins, existing relational schema? → RDS or Aurora
  • Need SQL + high availability + auto-scaling + performance? → Aurora
  • Need unlimited scale, single-digit ms latency, simple access patterns? → DynamoDB

Decision Framework: When to Choose Each

Choose Amazon RDS When:

  • You need a specific database engine not supported by Aurora (Oracle, SQL Server, MariaDB)
  • Your workload is predictable and steady with well-understood capacity needs
  • You want the lowest cost for a managed relational database with moderate performance needs
  • You’re doing a lift-and-shift migration from on-premises with minimal changes
  • Your application requires engine-specific features (e.g., Oracle RAC alternatives, SQL Server Always On)
  • Storage needs are under 64 TB and you want direct control over IOPS provisioning

Choose Amazon Aurora When:

  • You need MySQL or PostgreSQL compatibility with significantly better performance
  • Your workload requires high availability with fast automated failover (<30 seconds)
  • You need auto-scaling storage up to 128 TB without manual provisioning
  • Your traffic is variable or unpredictable (Aurora Serverless v2 scales to zero)
  • You need cross-region disaster recovery with <1 second replication lag (Global Database)
  • You need horizontal write scaling for relational data (Aurora Limitless Database)
  • Performance requirements exceed what standard RDS can deliver (5x MySQL, 3x PostgreSQL throughput)

Choose Amazon DynamoDB When:

  • Your access patterns are well-defined and predictable (key-value lookups, simple queries)
  • You need single-digit millisecond latency at any scale (or microseconds with DAX)
  • Your application must scale to millions of requests per second without capacity planning
  • You want zero infrastructure management — no instances, no patching, no maintenance windows
  • You need active-active multi-region writes with Global Tables
  • Your data model is denormalized or fits key-value/document patterns
  • You need event-driven architectures with DynamoDB Streams triggering Lambda

Architecture Differences

Amazon RDS – Traditional Managed Architecture

  • Compute + Storage coupled — EC2 instance with attached EBS volumes (gp3 or io2)
  • Storage limited to 64 TB (gp3) with manual IOPS provisioning
  • Multi-AZ: synchronous standby replica for failover (30-60 second failover)
  • Multi-AZ DB Clusters: 1 writer + 2 readable standbys, ~35 second failover
  • Read Replicas: asynchronous, up to 15 (MySQL/MariaDB) or 5 (PostgreSQL/Oracle/SQL Server)
  • Supports 6 engines: MySQL, PostgreSQL, MariaDB, Oracle, SQL Server, Db2
  • RDS Custom: Full OS/database access for Oracle and SQL Server customization
  • RDS Proxy: Connection pooling for serverless/Lambda workloads

Amazon Aurora – Cloud-Native Relational Architecture

  • Compute and storage decoupled — storage is a shared distributed volume across 3 AZs
  • 6 copies of data across 3 AZs; writes acknowledged with 4/6 quorum
  • Tolerates loss of 2 copies for writes, 3 copies for reads — without interruption
  • Storage auto-scales from 10 GB to 128 TB, no provisioning needed
  • Up to 15 read replicas sharing the same storage (near-zero replication lag)
  • Failover to replica in <30 seconds (no data copy required — shared storage)
  • Aurora Serverless v2: scales in ACUs, scales to zero, up to 30% better performance (2026 platform v4)
  • Aurora Global Database: cross-region with <1 second replication, RPO <1 second
  • Aurora Limitless Database (GA Oct 2024): automated horizontal write scaling via sharding, millions of writes/sec
  • Aurora DSQL (GA May 2025): distributed SQL, active-active multi-region, 99.999% availability
  • Supports: MySQL and PostgreSQL only

Amazon DynamoDB – Serverless Distributed NoSQL

  • Fully serverless — no instances, no storage provisioning, no maintenance windows
  • Data automatically replicated across 3 AZs
  • Horizontally partitioned by partition key — unlimited scaling
  • Supports key-value and document data models
  • Global Tables: active-active multi-region with multi-region strong consistency (MRSC, 2025)
  • DynamoDB Streams: ordered change data capture for event-driven patterns
  • DAX: in-memory cache providing microsecond read latency
  • Zero-ETL with Redshift: real-time analytics without data movement
  • Standard and Standard-IA table classes for cost optimization

Comprehensive Comparison Table

Criteria Amazon RDS Amazon Aurora Amazon DynamoDB
Database Type Relational (SQL) Relational (SQL) – cloud-native NoSQL (Key-Value / Document)
Engines MySQL, PostgreSQL, MariaDB, Oracle, SQL Server, Db2 MySQL-compatible, PostgreSQL-compatible Proprietary (API + PartiQL)
Max Storage 64 TB (gp3) 128 TB (auto-scaling) Unlimited (per table)
Performance Standard engine performance; dependent on instance + EBS IOPS 5x MySQL, 3x PostgreSQL throughput; optimized I/O paths Single-digit ms latency; microseconds with DAX; consistent at any scale
Scaling – Vertical Instance resize (downtime); up to 128 vCPUs Instance resize or Serverless v2 auto-scaling (0.5–256 ACUs) N/A – fully managed, scales automatically
Scaling – Horizontal (Reads) Up to 15 read replicas (async) Up to 15 replicas (shared storage, near-zero lag) Automatic partitioning; unlimited read throughput
Scaling – Horizontal (Writes) Single writer only (manual sharding needed) Single writer; Limitless Database for automated sharding (PG) Automatic partitioning; unlimited write throughput
Availability SLA 99.95% (Multi-AZ) 99.99%; 99.999% (DSQL multi-region) 99.99% (standard); 99.999% (Global Tables)
Failover Time 30-60 sec (Multi-AZ); ~35 sec (DB Clusters) <30 sec (replica promotion); instant (Serverless) N/A – multi-AZ by default, no failover concept
Multi-Region Cross-region read replicas (manual promotion) Global Database (<1s lag); DSQL (active-active) Global Tables (active-active, MRSC for strong consistency)
Serverless Option No (always provisioned instances) Yes – Serverless v2 (scales to zero) Yes – fully serverless by default
Backup/Recovery Automated backups (35 days); manual snapshots; PITR Continuous backup to S3; PITR; Backtrack (MySQL, in-place rewind) Continuous backup; PITR (35 days); on-demand backup
Encryption At-rest (KMS) + in-transit (SSL/TLS) At-rest (KMS) + in-transit (SSL/TLS) At-rest (KMS, default) + in-transit (TLS)
Authentication DB native + IAM DB Auth + Kerberos/AD DB native + IAM DB Auth + Kerberos/AD IAM policies + fine-grained access control
Pricing Model Instance hours + EBS storage + IOPS (if io2) + data transfer Instance/ACU hours + storage ($0.10/GB) + I/O or I/O-Optimized On-demand (per request) or Provisioned (WCU/RCU) + storage ($0.25/GB)
Cost Optimization Reserved Instances (1yr/3yr) Reserved Instances; I/O-Optimized tier; Serverless Reserved Capacity; Standard-IA class; on-demand vs provisioned
Maintenance Maintenance windows required for patching Maintenance windows (less frequent); zero-downtime patching available Zero maintenance — no windows, no patching, no downtime
Best For Lift-and-shift; Oracle/SQL Server workloads; steady predictable loads High-performance MySQL/PostgreSQL; variable traffic; mission-critical apps Massive scale; gaming/IoT/mobile; simple access patterns; event-driven

Scaling Approaches Compared

RDS Scaling

  • Vertical: Change instance class (requires brief downtime for single-AZ; rolling for Multi-AZ DB Clusters)
  • Storage: Increase EBS volume size (online, but cannot decrease); up to 80,000 IOPS with gp3 (2026)
  • Read scale-out: Add read replicas (async replication means eventual consistency for reads)
  • Write scale-out: Not supported natively — requires application-level sharding
  • Limitation: Write throughput bound by single instance capacity

Aurora Scaling

  • Vertical: Instance resize or Serverless v2 auto-scaling (0.5 to 256 ACUs, increments of 0.5)
  • Storage: Automatic — grows in 10 GB increments, up to 128 TB, never shrinks below high-water mark
  • Read scale-out: Up to 15 replicas with shared storage (no replication lag penalty)
  • Write scale-out: Aurora Limitless Database (PostgreSQL) — automated sharding across multiple writer instances, petabyte scale
  • Serverless: Scales to zero when idle; responds in milliseconds; ideal for dev/test and variable traffic
  • Advantage: Scaling doesn’t require data copying — shared storage architecture

DynamoDB Scaling

  • Fully automatic: No instance sizing or storage provisioning — scales horizontally by adding partitions
  • On-demand mode: Instantly accommodates up to 2x previous peak; no throttling for gradual increases
  • Provisioned mode: Set WCU/RCU with auto-scaling policies (target utilization-based)
  • No practical limits: Handles millions of requests/second, unlimited storage per table
  • Consideration: Requires good partition key design — hot partitions can cause throttling
  • 2025 update: More frequent mode switches between provisioned and on-demand now allowed

Pricing Comparison

Amazon RDS Pricing

  • Instance hours: Pay per hour for chosen instance type (e.g., db.r6g.large ~$0.26/hr in us-east-1)
  • Storage: gp3 at $0.115/GB/month (includes 3,000 IOPS baseline); io2 for high-performance
  • Additional IOPS: gp3 provisioned IOPS $0.08/IOPS/month above baseline
  • Backup: Free up to 100% of DB size; additional at $0.095/GB/month
  • Data transfer: Standard AWS rates
  • Savings: Reserved Instances (up to 60% discount for 3-year all-upfront)
  • Lowest entry cost among the three for relational workloads

Amazon Aurora Pricing

  • Instance hours: ~20% premium over equivalent RDS instances
  • Storage: $0.10/GB/month (auto-provisioned, slightly cheaper per-GB than RDS gp3)
  • I/O (Standard tier): $0.20 per million I/O requests — can be significant for write-heavy workloads
  • I/O-Optimized tier: 30-40% higher instance + storage cost, but zero I/O charges — breaks even at ~500K I/Os per instance hour
  • Serverless v2: $0.12 per ACU-hour (billed per second); scales to zero = $0 when idle
  • Savings: Reserved Instances; choose I/O-Optimized for high-throughput; Serverless for variable loads
  • Cost trap: I/O charges in Standard tier can double the bill for read-heavy/high-throughput workloads

Amazon DynamoDB Pricing

  • On-demand: $1.25 per million write request units (WRU); $0.25 per million read request units (RRU)
  • Provisioned: $0.00065 per WCU/hour; $0.00013 per RCU/hour (~$0.47/WCU/month)
  • Storage: $0.25/GB/month (Standard); $0.10/GB/month (Standard-IA for infrequent access)
  • Global Tables: Replicated writes cost 1.5x (rWRU/rWCU) + cross-region transfer
  • Transactions: 2x cost (each transactional operation counts double)
  • Savings: Reserved Capacity (up to 77% for 3-year); provisioned mode for steady workloads
  • Cost insight: On-demand is ~7x more expensive than provisioned for sustained throughput — switch to provisioned once patterns stabilize
💰 Cost Decision Matrix:

  • Lowest cost, steady relational workload: RDS with Reserved Instances
  • Variable traffic, pay-for-what-you-use: Aurora Serverless v2 or DynamoDB on-demand
  • High-throughput relational: Aurora I/O-Optimized with Reserved Instances
  • Massive scale NoSQL, steady traffic: DynamoDB Provisioned + Reserved Capacity
  • Unpredictable/spiky NoSQL: DynamoDB on-demand

Availability and Disaster Recovery

Feature RDS Aurora DynamoDB
Data Replication Synchronous to 1 standby (Multi-AZ) 6 copies across 3 AZs (automatic) 3 copies across 3 AZs (automatic)
RPO (Data Loss) 0 (Multi-AZ sync); seconds (read replicas) 0 (same region); <1 sec (Global Database) 0 (same region); 0 with MRSC (Global Tables)
RTO (Recovery Time) 30-60 sec (Multi-AZ); minutes (replica promotion) <30 sec (replica); <1 min (Global failover) Instant (multi-AZ built-in); seconds (Global Tables failover)
Cross-Region DR Cross-region read replicas (manual failover) Global Database (managed failover); DSQL (automatic) Global Tables (automatic active-active)
Point-in-Time Recovery Yes (up to 35 days) Yes (up to 35 days) + Backtrack (MySQL, no new cluster) Yes (up to 35 days)
Maintenance Downtime Required (maintenance windows) Minimal (zero-downtime patching for many updates) Zero (no maintenance windows ever)

Security Features

Security Feature RDS Aurora DynamoDB
Network Isolation VPC, Security Groups, private subnets VPC, Security Groups, private subnets VPC Endpoints (Gateway); no VPC placement needed
Encryption at Rest AES-256 via KMS (must enable at creation) AES-256 via KMS (must enable at creation) AES-256 via KMS (enabled by default)
Encryption in Transit SSL/TLS (configurable, can enforce) SSL/TLS (configurable, can enforce) TLS (HTTPS endpoints, always encrypted)
Authentication Database native; IAM DB Auth; Kerberos/AD; Secrets Manager rotation Database native; IAM DB Auth; Kerberos/AD; Secrets Manager rotation IAM policies only (no DB-level users)
Fine-Grained Access Database GRANT/REVOKE (table/column level) Database GRANT/REVOKE (table/column level) IAM conditions on partition keys, attributes
Audit Logging Engine-native audit logs + CloudTrail (API) Engine-native audit logs + CloudTrail (API) CloudTrail (API); no query-level audit natively
Connection Management RDS Proxy for pooling RDS Proxy for pooling N/A — HTTP/HTTPS API (no persistent connections)

Decision Flowchart: Selecting Your Database

Step 1: What’s Your Data Model?

  • Relational (tables, joins, foreign keys, complex queries) → Go to Step 2
  • Key-value, document, or denormalized → Go to Step 5

Step 2: Which Database Engine Do You Need?

  • Oracle, SQL Server, MariaDB, or Db2Choose RDS
  • MySQL or PostgreSQL → Go to Step 3

Step 3: What Are Your Performance/Scale Requirements?

  • Standard performance is sufficient; cost is primary concernChoose RDS
  • Need high throughput (5x MySQL/3x PG), auto-scaling storage, fast failover → Go to Step 4
  • Need horizontal write scaling (millions of writes/sec)Choose Aurora Limitless Database
  • Need active-active multi-region SQL with 99.999% availabilityChoose Aurora DSQL

Step 4: What’s Your Traffic Pattern?

  • Steady, predictable trafficChoose Aurora Provisioned
  • Variable/spiky traffic or dev/test environmentsChoose Aurora Serverless v2
  • Infrequent use with cost sensitivityChoose Aurora Serverless v2 (scales to zero)

Step 5: DynamoDB Fit Assessment

  • Access patterns are known and can be modeled with partition/sort keysChoose DynamoDB
  • Need ad-hoc queries, complex joins, or flexible querying → Go back to Step 2 (use relational)
  • Need <1ms reads with cachingChoose DynamoDB + DAX
  • Need active-active multi-region with zero RPOChoose DynamoDB Global Tables (MRSC)

Common Use Case Mapping

Use Case Recommended Service Why
E-commerce product catalog + orders Aurora (orders) + DynamoDB (catalog/cart) ACID for transactions; low-latency reads for catalog
Gaming leaderboard / session store DynamoDB Unlimited scale, single-digit ms, simple access patterns
SaaS multi-tenant application Aurora (Limitless for large scale) or DynamoDB SQL for complex queries; DynamoDB for per-tenant isolation
Legacy Oracle migration to AWS RDS for Oracle or RDS Custom Full Oracle compatibility; minimal code changes
IoT sensor data ingestion DynamoDB Massive write throughput; time-series via sort key; TTL for expiry
Financial transaction processing Aurora or Aurora DSQL (global) Strong ACID; high throughput; cross-region consistency
Content management system (WordPress-style) RDS MySQL/PostgreSQL Standard performance sufficient; lowest cost; proven compatibility
Real-time mobile app backend DynamoDB + DynamoDB Streams Serverless; event-driven; scales with users
Enterprise reporting with complex joins Aurora PostgreSQL Complex SQL; parallel query; high read throughput
Globally distributed app (multi-region writes) DynamoDB Global Tables or Aurora DSQL Active-active; conflict resolution; low-latency global access

Key Tradeoffs to Consider

Tradeoff Winner Explanation
Lowest cost (small relational workload) RDS ~20% cheaper instances than Aurora; no I/O charges with gp3
Best price-performance (relational) Aurora 5x MySQL throughput offsets 20% cost premium; I/O-Optimized eliminates surprise bills
Zero operational overhead DynamoDB No instances, no patching, no maintenance windows, no version upgrades
Query flexibility RDS / Aurora Full SQL — ad-hoc queries, joins, aggregations; DynamoDB requires pre-planned access patterns
Unlimited horizontal scale DynamoDB Automatic partitioning; no upper bound on throughput or storage
Multi-region active-active (NoSQL) DynamoDB Global Tables with MRSC for zero-RPO multi-region strong consistency
Multi-region active-active (SQL) Aurora DSQL Only AWS relational option with true active-active multi-region writes
Engine diversity (Oracle, SQL Server) RDS Aurora only supports MySQL/PostgreSQL; RDS supports 6 engines

AWS Certification Exam Tips

📝 Key Exam Concepts:

  • If the question mentions “millisecond latency at any scale” or “millions of requests/second” → DynamoDB
  • If the question mentions “complex queries,” “joins,” or “ACID transactions” with high performance → Aurora
  • If the question mentions “Oracle,” “SQL Server,” or “lift-and-shift” → RDS
  • If the question mentions “serverless” + “relational” → Aurora Serverless v2
  • If the question mentions “globally distributed” + “active-active” → DynamoDB Global Tables or Aurora DSQL
  • If the question mentions “no maintenance windows” → DynamoDB
  • Aurora’s 6 copies across 3 AZs and shared storage architecture are frequent exam topics
  • DynamoDB partition key design and hot partition issues are common scenario questions

Practice Questions

Question 1:

A company is building a new e-commerce platform that requires complex SQL queries for inventory management, order processing with ACID transactions, and must handle Black Friday traffic spikes that are 10x normal load. The team uses PostgreSQL. Which database solution provides the best combination of SQL support, performance, and automatic scaling?

  1. Amazon RDS for PostgreSQL with Multi-AZ
  2. Amazon Aurora PostgreSQL with Serverless v2
  3. Amazon DynamoDB with on-demand capacity
  4. Amazon RDS for PostgreSQL with read replicas
Show Answer

Answer: B –

Explanation: Aurora PostgreSQL Serverless v2 provides full PostgreSQL SQL compatibility (complex queries, ACID transactions), delivers 3x PostgreSQL throughput, and automatically scales compute capacity to handle traffic spikes without manual intervention. It scales to zero during low-traffic periods and scales up instantly during Black Friday peaks. RDS would require manual instance resizing or over-provisioning. DynamoDB doesn’t support complex SQL queries or joins needed for inventory management.

Question 2:

A gaming company needs a database for their global leaderboard that must handle 5 million writes per second during peak hours, provide single-digit millisecond read latency, and be available in 4 AWS regions simultaneously with active-active writes. Which solution meets these requirements?

  1. Amazon Aurora Global Database with write forwarding
  2. Amazon DynamoDB with Global Tables
  3. Amazon RDS Multi-AZ with cross-region read replicas
  4. Amazon Aurora DSQL in multi-region configuration
Show Answer

Answer: B –

Explanation: DynamoDB Global Tables provide active-active multi-region replication with single-digit millisecond latency and can handle millions of requests per second with automatic scaling. Gaming leaderboards are a classic DynamoDB use case — simple access patterns (get/put by player ID, query by score) with massive scale requirements. Aurora Global Database doesn’t support active-active writes (only forwarding). Aurora DSQL supports active-active but is optimized for OLTP transactions, not the extreme write throughput needed here. RDS doesn’t support active-active multi-region.

Question 3:

A financial services company is migrating their Oracle-based core banking application to AWS. The application uses PL/SQL stored procedures extensively, requires full ACID compliance, and the team wants minimal code changes. Which is the most appropriate migration path?

  1. Amazon Aurora PostgreSQL with Babelfish
  2. Amazon RDS for Oracle
  3. Amazon DynamoDB with transactions
  4. Amazon Aurora MySQL
Show Answer

Answer: B –

Explanation: RDS for Oracle provides full Oracle engine compatibility including PL/SQL stored procedures, requiring minimal or zero code changes. The requirement explicitly states “minimal code changes” with heavy PL/SQL usage, which rules out Aurora (only MySQL/PostgreSQL compatible). DynamoDB doesn’t support SQL or stored procedures. Babelfish is for SQL Server T-SQL compatibility, not Oracle PL/SQL. For lift-and-shift of Oracle workloads, RDS for Oracle (or RDS Custom for Oracle with OS access) is the correct choice.

Question 4:

A startup is building an IoT platform that ingests sensor data from 100,000 devices. Each device sends readings every 5 seconds. The data must be stored for 30 days, after which it should be automatically deleted. The team needs to query recent data by device ID and time range. Which database solution is most cost-effective and operationally efficient?

  1. Amazon Aurora PostgreSQL with table partitioning
  2. Amazon RDS for MySQL with scheduled deletion jobs
  3. Amazon DynamoDB with TTL enabled
  4. Amazon Aurora Serverless v2 with scheduled scaling
Show Answer

Answer: C –

Explanation: DynamoDB with TTL (Time to Live) is ideal for this scenario. The access pattern is simple (device_id as partition key, timestamp as sort key), enabling efficient range queries. TTL automatically deletes expired items at no cost — no scheduled jobs needed. The write volume (~20,000 writes/second from 100K devices at 5-sec intervals) is easily handled by DynamoDB’s automatic scaling. DynamoDB’s serverless model means zero operational overhead for the startup. Aurora or RDS would require instance management, manual partition pruning or deletion jobs, and would be more expensive for this write-heavy, simple-query workload.

Question 5:

A company runs a MySQL-based application on Amazon RDS. They are experiencing performance issues during peak hours and their DBA reports that read replica lag is causing stale data problems. They need to improve read performance with minimal replication lag while keeping MySQL compatibility. The budget allows for a 20% cost increase. What should they do?

  1. Upgrade to a larger RDS instance class
  2. Migrate to Amazon Aurora MySQL
  3. Add more RDS read replicas
  4. Migrate to Amazon DynamoDB
Show Answer

Answer: B –

Explanation: Aurora MySQL provides 5x throughput improvement over standard MySQL, and its shared storage architecture means read replicas have near-zero replication lag (typically <10ms vs seconds/minutes for RDS async replicas). This directly addresses both problems: performance issues and stale read data. Aurora instances cost ~20% more than RDS (within budget). Adding more RDS replicas doesn’t fix the lag issue. A larger instance helps writes but doesn’t fix replica lag. DynamoDB would require a complete application rewrite and doesn’t maintain MySQL compatibility.

Summary

  • Amazon RDS is the right choice for traditional relational workloads requiring specific engines (Oracle, SQL Server, MariaDB, Db2), lift-and-shift migrations, or when cost is the primary concern for steady, predictable workloads.
  • Amazon Aurora excels for MySQL/PostgreSQL workloads needing superior performance, high availability, automatic storage scaling, and modern features like Serverless v2, Limitless Database, and DSQL for distributed SQL.
  • Amazon DynamoDB is the answer for applications requiring unlimited scale, single-digit millisecond latency, zero operational overhead, and well-defined access patterns that fit a key-value or document model.
  • Many real-world architectures use multiple services together — e.g., Aurora for transactional data and DynamoDB for session stores or high-velocity data streams.
  • The selection decision should be driven by access patterns, scale requirements, and data model — not team familiarity or historical precedent.

Frequently Asked Questions

How do I choose between RDS, Aurora, and DynamoDB?

Start with your data model: if you need key-value/document access patterns, choose DynamoDB. For relational data, choose Aurora for high performance and scaling needs, or standard RDS for simple workloads where cost is the priority.

Is Aurora worth the extra cost over RDS?

Aurora costs ~20% more than standard RDS but delivers up to 5x MySQL / 3x PostgreSQL throughput, 6-way storage replication, faster failover (30s vs 60-120s), and auto-scaling storage up to 128TB. Worth it for production workloads needing high availability.

Can DynamoDB replace a relational database?

DynamoDB can replace relational databases for access-pattern-driven workloads, but not for complex ad-hoc queries, multi-table joins, or analytics. It excels at single-digit millisecond key-value lookups at any scale but requires careful data modeling upfront.

References

Spanner vs Firestore vs Cloud SQL – GCP Databases

📋 Post Overview

This comprehensive comparison covers Google Cloud’s three primary database services — Cloud Spanner, Firestore, and Cloud SQL — analyzing their data models, scaling capabilities, consistency guarantees, pricing, availability, global distribution, and transaction support to help you choose the right database for your workload.

Last updated: June 2026

Overview

  • Cloud Spanner is a fully managed, globally distributed, horizontally scalable relational database with strong (external) consistency, designed for mission-critical OLTP workloads requiring unlimited scale.
  • Firestore is a fully managed, serverless NoSQL document database with real-time synchronization, offline support, and automatic scaling — ideal for mobile/web apps and rapid development.
  • Cloud SQL is a fully managed relational database service supporting MySQL, PostgreSQL, and SQL Server — best suited for traditional applications needing familiar RDBMS capabilities within a single region.

Data Model

Cloud Spanner

  • Relational data model with schemas, tables, rows, and columns
  • Supports both GoogleSQL and PostgreSQL interface (dialect)
  • Multi-model support (2024-2025): relational, graph (Spanner Graph), key-value, vector search (ANN with ScaNN), and full-text search in a single database
  • Interleaved tables for parent-child relationships with data co-location
  • Secondary indexes, JSON columns, and JSON indexing
  • Maximum row size: 100 MB; maximum database size: virtually unlimited

Firestore

  • NoSQL document-oriented data model with collections and documents
  • Schema-flexible: documents contain fields with various data types (strings, numbers, booleans, arrays, maps, references, timestamps, geopoints)
  • Hierarchical data with subcollections and nested documents
  • Two modes: Native mode (document DB with real-time) and Datastore mode (backward compatible)
  • MongoDB compatibility mode (2025-2026) with support for documents up to 16 MiB
  • Enterprise edition adds pipeline queries, full-text search, JOINs via subqueries, and geospatial queries (2025-2026)

Cloud SQL

  • Traditional relational data model (tables, rows, columns, foreign keys)
  • Supports MySQL (up to 8.4), PostgreSQL (up to 17), and SQL Server (up to 2025)
  • Full SQL support including JOINs, stored procedures, triggers, views
  • Maximum storage: 64 TB per instance
  • Enterprise edition (up to 96 vCPUs, 624 GB RAM) and Enterprise Plus edition (up to 128 vCPUs, 864 GB RAM)

Scaling

Cloud Spanner

  • Horizontal scaling — add nodes/processing units to scale reads and writes linearly
  • Compute measured in processing units (PUs): 1 node = 1000 PUs; minimum 100 PUs
  • Automatic sharding (splits) distributes data across nodes; manual split points available for anticipated traffic spikes
  • Managed autoscaler (GA 2025) scales nodes automatically based on load, including independent read-only replica scaling
  • Handles 6+ billion queries per second at peak (Google internal)
  • No practical upper limit on database size or throughput

Firestore

  • Automatic serverless scaling — scales to zero during inactivity and up elastically during spikes
  • No capacity planning or provisioning required
  • Scales to millions of concurrent connections
  • Write throughput: up to 10,000 writes/second per database (can be increased)
  • Read throughput: virtually unlimited with proper data modeling
  • Sub-second provisioning for new databases

Cloud SQL

  • Vertical scaling — scale up by increasing vCPUs, memory, and storage
  • Read scaling via up to 20 read replicas (cross-region supported)
  • No automatic horizontal write scaling — single primary instance handles all writes
  • Maximum: 128 vCPUs, 864 GB RAM (Enterprise Plus)
  • Storage auto-resize available
  • Fast clone operations (GA 2026) for creating copies within the same zone

Consistency Model

Cloud Spanner

  • External consistency (strongest possible) — stronger than serializable isolation
  • All reads see the latest committed data, globally
  • Bounded staleness and exact staleness reads available for reduced latency
  • Repeatable read isolation (Preview 2025) for workloads with low read-write contention
  • Read leases improve read latency in multi-region configs by trading off some write performance

Firestore

  • Strong consistency for all reads (Native mode, since 2021 upgrade)
  • All queries return the most recent data at the time of the query
  • Real-time listeners receive updates with strong consistency
  • Search indexes are strongly consistent with transactional data (unlike eventual consistency in separate search systems)
  • Multi-region deployments maintain strong consistency

Cloud SQL

  • Strong consistency on the primary instance (standard RDBMS guarantees)
  • Read replicas use asynchronous replication — eventual consistency with slight lag
  • Consistency level depends on the underlying database engine (MySQL, PostgreSQL, SQL Server)
  • Synchronous replication available within a region for HA configurations

Pricing Model

Cloud Spanner

  • Provisioned capacity pricing — pay per node/processing unit per hour
  • Three editions: Standard, Enterprise, Enterprise Plus (different capabilities and prices)
  • Compute: starts at ~$0.90/hour per node (regional, varies by edition and region)
  • Storage: per GB/month (SSD); tiered storage offers HDD at ~80% less for cold data
  • Minimum cost: ~$65/month for a production-ready 100 PU instance
  • Free 90-day trial instance available
  • Committed Use Discounts: 20% (1-year), 40% (3-year)
  • Data Boost for analytics charged separately per GB processed

Firestore

  • Pay-per-use (serverless) pricing — pay only for operations performed
  • Document reads, writes, and deletes each have per-operation costs
  • Storage: per GB/month
  • Free tier: 50,000 reads, 20,000 writes, 20,000 deletes, 1 GB storage per day
  • Enterprise edition: additional pricing for advanced features (pipelines, full-text search)
  • Network egress charges for data transfer
  • Scales to zero cost during inactivity

Cloud SQL

  • Instance-based pricing — pay per vCPU-hour + memory-hour + storage
  • Two editions: Enterprise (~$0.0413/vCPU-hour) and Enterprise Plus (higher cost, better performance)
  • Storage: per GB/month (SSD or HDD)
  • Backup storage: per GB/month
  • Network egress charges apply
  • Committed Use Discounts available
  • Shared-core instances available for dev/test (f1-micro, g1-small) at lower cost
  • No free tier (use $300 free trial credits)

Availability & SLA

Cloud Spanner

  • Regional: 99.99% SLA (Standard and Enterprise editions)
  • Multi-region: 99.999% SLA (Enterprise Plus edition)
  • Automatic failover with zero downtime
  • No planned maintenance downtime
  • Drop protection for schema objects (2025) prevents accidental deletions
  • Default backup schedules ensure data protection from day one

Firestore

  • Multi-region: 99.999% SLA
  • Regional: 99.99% SLA
  • Automatic replication across zones/regions
  • Offline support for mobile/web — apps continue working without network
  • Zero operational overhead — fully serverless

Cloud SQL

  • Enterprise Plus with HA: 99.99% SLA (includes maintenance)
  • Enterprise with HA: 99.95% SLA
  • Regional availability only (no multi-region active-active)
  • High Availability via regional persistent disk and automatic failover
  • Planned maintenance windows required for updates
  • Cross-region read replicas for disaster recovery

Global Distribution

Cloud Spanner

  • Native multi-region support with synchronous replication across continents
  • Pre-defined multi-region configurations (nam6, eur6, nam-eur-asia1, etc.)
  • Custom configurations with read-only replicas in additional regions
  • Spanner Omni (2026 Preview): run Spanner on-premises, across clouds (AWS EKS, etc.), or on a laptop
  • Geo-partitioning to keep data in specific regions for compliance
  • Consistent reads globally with TrueTime technology

Firestore

  • Multi-region locations available (e.g., nam5, eur3)
  • Data automatically replicated across multiple zones within the chosen configuration
  • Cannot selectively place data in specific regions (entire database in one location config)
  • Real-time sync to global clients via SDKs
  • No active-active multi-region write support

Cloud SQL

  • Single region only for primary instance
  • Cross-region read replicas for read distribution
  • Cross-region replica promotion for disaster recovery (manual)
  • No native multi-region write capability
  • Available in 35+ Google Cloud regions

Transactions

Cloud Spanner

  • Full ACID transactions across rows, tables, and even across regions
  • Distributed transactions with external consistency
  • Read-write and read-only transaction types
  • Partitioned DML for large-scale data changes
  • No practical limit on transaction scope — can span the entire database globally

Firestore

  • ACID transactions within a single database
  • Supports up to 500 documents per transaction
  • Batched writes for atomic operations on multiple documents
  • Optimistic concurrency control
  • Transactions limited to 60 seconds
  • Cannot span multiple databases

Cloud SQL

  • Full ACID transactions per database engine capabilities
  • Standard SQL transaction isolation levels (READ COMMITTED, REPEATABLE READ, SERIALIZABLE)
  • Transactions limited to a single instance
  • No distributed transactions across instances
  • Supports savepoints, nested transactions (where engine supports)

Comparison Table

Feature Cloud Spanner Firestore Cloud SQL
Type Distributed Relational NoSQL Document Managed Relational (MySQL/PostgreSQL/SQL Server)
Data Model Relational + Graph + Vector + Full-text Document (Collections/Documents) Relational (Tables/Rows/Columns)
Query Language GoogleSQL, PostgreSQL interface Client SDKs, Pipeline queries, MongoDB-compatible queries MySQL/PostgreSQL/T-SQL (native)
Scaling Horizontal (virtually unlimited) Automatic serverless Vertical (up to 128 vCPUs)
Max Storage Unlimited (10 TB per node) Unlimited (1 MB/doc, 16 MiB MongoDB mode) 64 TB per instance
Consistency External (strongest) Strong Strong (primary), Eventual (replicas)
Availability SLA 99.99% (regional) / 99.999% (multi-region) 99.99% (regional) / 99.999% (multi-region) 99.99% (Enterprise Plus HA)
Global Distribution Multi-region with synchronous replication Multi-region (pre-defined configs) Single region (cross-region read replicas)
Transactions Distributed ACID (global scope) ACID (up to 500 documents) ACID (single instance)
Pricing Model Provisioned (per node-hour + storage) Pay-per-use (per operation + storage) Instance-based (per vCPU-hour + memory + storage)
Minimum Cost ~$65/month (100 PUs) Free tier available (scales to zero) ~$7/month (shared-core f1-micro)
Schema Schema-required (with flexible JSON support) Schema-flexible Schema-required
Real-time Sync No (use Change Streams) Yes (built-in real-time listeners) No
Offline Support No Yes (mobile/web SDKs) No
Maintenance Downtime None None Required (maintenance windows)
AI/ML Integration Built-in (ML.PREDICT, Vertex AI, Vector Search, Graph) Vector search, AI Studio integration, MCP support pgvector (PostgreSQL), AlloyDB integration
Multi-cloud / On-prem Yes (Spanner Omni, 2026 Preview) No (Google Cloud only) No (Google Cloud only)

When to Choose Each

Choose Cloud Spanner When:

  • You need globally distributed transactions with strong consistency
  • Your workload requires horizontal scaling beyond a single node’s capacity (>100,000 reads/writes per second)
  • You need 99.999% availability for mission-critical applications
  • Your application serves users across multiple continents with low-latency requirements
  • You’re running financial services, gaming, or supply chain workloads requiring both relational structure and massive scale
  • You need multi-model capabilities (graph, vector, full-text search) in a single transactional database
  • You’re migrating from Cassandra or sharded MySQL and want to eliminate operational complexity

Choose Firestore When:

  • You’re building mobile or web applications requiring real-time data synchronization
  • You need offline support for mobile apps
  • Your data model is hierarchical or document-oriented (user profiles, product catalogs, content management)
  • You want serverless scaling to zero with no capacity planning
  • You’re in the rapid prototyping / MVP phase and need schema flexibility
  • Your budget requires pay-per-use pricing with a free tier
  • You’re building with Firebase ecosystem (Authentication, Cloud Functions, Hosting)
  • You need agentic AI application backends with AI Studio integration

Choose Cloud SQL When:

  • You have existing applications using MySQL, PostgreSQL, or SQL Server and want managed infrastructure
  • Your workload fits within a single region and a single instance’s capacity (up to 128 vCPUs)
  • You need full SQL compatibility including stored procedures, triggers, and complex JOINs
  • You’re performing a lift-and-shift migration from on-premises RDBMS
  • Your application requires specific database engine features (e.g., PostGIS, MySQL full-text, SQL Server CLR)
  • Budget is constrained and workload is predictable — instance-based pricing is cost-effective
  • You need third-party tool compatibility (ORMs, admin tools, connectors) without modification

Key Differences Summary

  • Scale direction: Spanner scales horizontally (add nodes), Cloud SQL scales vertically (bigger instance), Firestore scales automatically (serverless)
  • Cost at low scale: Firestore is cheapest (free tier, pay-per-use); Cloud SQL moderate (small instances from ~$7/month); Spanner highest minimum (~$65/month)
  • Cost at high scale: Spanner provides best price-performance for high-throughput global workloads; Cloud SQL becomes expensive when hitting vertical limits; Firestore operation costs can grow with high read volumes
  • Global writes: Only Spanner supports consistent multi-region writes natively
  • Developer experience: Firestore offers the fastest path from idea to production with real-time SDKs; Cloud SQL offers familiar tooling; Spanner requires understanding distributed database concepts
  • Migration path: Cloud SQL → Spanner is natural when outgrowing regional limits; Firestore is a different paradigm (NoSQL) and typically chosen at project start

GCP Certification Exam Tips

  • If the question mentions “global,” “multi-region,” “horizontal scale,” and “relational” → Cloud Spanner
  • If the question mentions “mobile app,” “real-time sync,” “offline,” “document,” or “serverless database” → Firestore
  • If the question mentions “MySQL,” “PostgreSQL,” “lift-and-shift,” “existing application,” or “single region” → Cloud SQL
  • If the question mentions “99.999% availability” with relational data → Cloud Spanner (multi-region)
  • If the question mentions “schema flexibility” with automatic scaling → Firestore
  • Cloud Spanner is NOT a good fit for small, single-region workloads where Cloud SQL suffices (over-engineering)
  • Firestore is NOT a good fit for complex relational queries with multiple JOINs or strict schemas

Practice Questions

Question 1

A global e-commerce company needs a database to manage inventory across 5 regions. The application requires strongly consistent reads after writes, support for complex SQL queries, and the ability to handle 500,000 transactions per second during peak sales events. Which Google Cloud database service should they use?

  1. Cloud SQL with read replicas in each region
  2. Cloud Spanner with a multi-region configuration
  3. Firestore in Native mode with multi-region location
  4. Cloud SQL Enterprise Plus with cross-region failover
Show Answer

Answer: B –

Explanation: Cloud Spanner is the only Google Cloud database that provides globally distributed, strongly consistent relational transactions with horizontal scaling to handle 500,000+ TPS. Cloud SQL cannot scale horizontally and is limited to a single region for writes. Firestore is NoSQL and doesn’t support complex SQL queries natively. Spanner’s multi-region configuration (Enterprise Plus) provides 99.999% availability with synchronous replication across regions.

Question 2

A startup is building a mobile application that needs to sync user data in real-time across devices, work offline when connectivity is poor, and scale automatically during viral growth — all while minimizing operational costs during the early stages. Which database should they choose?

  1. Cloud Spanner with managed autoscaler
  2. Cloud SQL for PostgreSQL with pgpool
  3. Firestore in Native mode
  4. Cloud Bigtable with single-cluster routing
Show Answer

Answer: C –

Explanation: Firestore in Native mode provides built-in real-time synchronization, offline support for mobile SDKs, automatic serverless scaling (including scaling to zero), and a generous free tier — making it ideal for startups with unpredictable growth. Cloud Spanner’s minimum cost (~$65/month) and Cloud SQL’s always-on instances are overkill for early-stage apps. Bigtable doesn’t provide real-time sync or offline support.

Question 3

A company is migrating an on-premises PostgreSQL application to Google Cloud. The application uses stored procedures, triggers, PostGIS extensions, and serves a single-region user base with predictable traffic of about 5,000 queries per second. They need minimal code changes. Which service is most appropriate?

  1. Cloud Spanner with PostgreSQL interface
  2. Cloud SQL for PostgreSQL
  3. Firestore in Datastore mode
  4. AlloyDB for PostgreSQL
Show Answer

Answer: B –

Explanation: Cloud SQL for PostgreSQL provides full compatibility with PostgreSQL including stored procedures, triggers, and extensions like PostGIS. It’s ideal for lift-and-shift migrations with minimal code changes. Cloud Spanner’s PostgreSQL interface is a compatibility layer that doesn’t support all PostgreSQL features (no stored procedures, limited extensions). Firestore is NoSQL and incompatible. AlloyDB could work but isn’t the most straightforward lift-and-shift for a standard workload already within Cloud SQL’s capacity limits.

Question 4

An organization needs to choose a database for a new application with the following requirements: schema-flexible data model, ACID transactions across multiple documents, 99.999% availability, built-in full-text search, and integration with AI development tools. Which combination of service and edition meets ALL requirements?

  1. Cloud Spanner Enterprise Plus edition
  2. Firestore Enterprise edition in a multi-region location
  3. Cloud SQL Enterprise Plus with Cloud Search integration
  4. Cloud Spanner Enterprise edition with managed autoscaler
Show Answer

Answer: B –

Explanation: Firestore Enterprise edition in a multi-region location satisfies all requirements: schema-flexible document model, ACID transactions (up to 500 documents), 99.999% SLA for multi-region deployments, built-in full-text search (GA 2026), and native integration with AI Studio and MCP tools. Cloud Spanner requires schemas. Cloud SQL doesn’t offer 99.999% availability or built-in full-text search as a managed feature. Spanner Enterprise edition is regional only (99.99%).

Question 5

A financial services company currently uses Cloud SQL for PostgreSQL but is experiencing issues with write throughput during peak trading hours and needs to expand to serve users in Asia-Pacific while maintaining ACID compliance and strong consistency for all transactions globally. What is the recommended migration path?

  1. Add more read replicas in Asia-Pacific regions
  2. Migrate to Cloud Spanner with a multi-region instance configuration
  3. Migrate to Firestore for automatic scaling
  4. Upgrade to Cloud SQL Enterprise Plus and increase vCPUs
Show Answer

Answer: B –

Explanation: Cloud Spanner is the appropriate choice for scaling beyond Cloud SQL’s single-region write limits while maintaining ACID transactions and strong consistency globally. Read replicas (A) only help with read scaling and don’t provide strong consistency or solve write throughput issues. Firestore (C) is NoSQL and unsuitable for financial transaction processing requiring complex SQL and strict relational integrity. Upgrading Cloud SQL (D) has a vertical scaling ceiling and doesn’t solve multi-region write requirements.

Frequently Asked Questions

What is the difference between Cloud Spanner and Firestore?

Cloud Spanner is a horizontally-scalable relational database with SQL, strong consistency, and global distribution for mission-critical transactional workloads. Firestore is a serverless document database optimized for mobile/web apps with offline sync, real-time listeners, and automatic scaling.

When should I use Cloud SQL instead of Spanner?

Use Cloud SQL for traditional relational workloads under 64TB that don’t need horizontal scaling or global distribution. Cloud SQL costs significantly less for small-to-medium databases and supports MySQL, PostgreSQL, and SQL Server with minimal migration effort.

Is Cloud Spanner expensive?

Spanner starts at ~$0.90/node-hour (approximately $657/month per node minimum). It’s cost-effective for large-scale global workloads but expensive for small databases. For workloads under 10GB, Firestore or Cloud SQL are significantly cheaper options.

References

Aurora vs RDS vs DynamoDB – Database Services Compared

AWS Aurora vs RDS vs DynamoDB – Database Services Compared

AWS offers multiple database services, each designed for different workloads. Amazon Aurora, Amazon RDS, and Amazon DynamoDB are three of the most widely used options. Understanding their architecture, scaling capabilities, pricing models, and ideal use cases is critical for both real-world implementations and AWS certification exams.

Overview

  • Amazon RDS – Managed relational database service supporting MySQL, PostgreSQL, MariaDB, Oracle, and SQL Server. Handles provisioning, patching, backup, and failover.
  • Amazon Aurora – Cloud-native relational database compatible with MySQL and PostgreSQL. Part of the RDS family but with a fundamentally redesigned storage architecture delivering up to 5x MySQL and 3x PostgreSQL throughput.
  • Amazon DynamoDB – Fully managed, serverless NoSQL key-value and document database delivering single-digit millisecond performance at any scale.

Architecture

Amazon RDS Architecture

  • Traditional database architecture with compute and storage tightly coupled on a single instance
  • Uses Amazon EBS (gp3 or io2) for storage, attached to a single DB instance
  • Multi-AZ deployment creates a synchronous standby replica in another AZ for failover
  • Multi-AZ DB Clusters (MySQL/PostgreSQL) provide one writer + two readable standbys across 3 AZs with faster failover (~35 seconds)
  • Read Replicas use asynchronous replication (up to 15 for MySQL/MariaDB, 5 for PostgreSQL/Oracle/SQL Server)
  • Supports ENA Express for improved Multi-AZ replication (2026)

Amazon Aurora Architecture

  • Separation of compute and storage – fundamentally different from RDS
  • Shared distributed storage volume spanning 3 AZs with 6 copies of data
  • Writes acknowledged when 4 of 6 copies confirm (quorum-based)
  • Tolerates loss of 2 copies without write impact, 3 copies without read impact
  • Storage auto-scales from 10 GB up to 128 TB with no provisioning
  • Up to 15 low-latency read replicas sharing the same storage volume (replication lag typically <10ms)
  • Failover to read replica in <30 seconds (shared storage means no data copy needed)
  • Aurora Serverless – auto-scales compute capacity in ACU (Aurora Capacity Units); scales to zero; up to 30% better performance with enhanced scaling (2026)
  • Aurora Global Database – cross-region replication with <1 second lag, RPO <1 second
  • Aurora DSQL (GA May 2025) – distributed SQL with active-active multi-region writes, 99.999% availability, PostgreSQL-compatible

Amazon DynamoDB Architecture

  • Fully serverless – no instances to provision or manage
  • Distributed across multiple AZs automatically (data replicated 3 times)
  • Partitioned by partition key for horizontal scalability
  • Supports key-value and document data models
  • Global Tables – active-active multi-region replication with multi-region strong consistency (MRSC, GA 2025) enabling zero RPO
  • Cross-account replication for Global Tables (2026)
  • DAX (DynamoDB Accelerator) provides microsecond read latency via in-memory caching

Data Model

Feature RDS Aurora DynamoDB
Type Relational (SQL) Relational (SQL) NoSQL (Key-Value / Document)
Schema Fixed schema, structured data Fixed schema, structured data Flexible schema, semi-structured
Query Language SQL SQL (MySQL/PostgreSQL compatible) PartiQL, API-based access
Transactions Full ACID Full ACID ACID (up to 100 items, 4 MB)
Joins Yes (complex queries) Yes (complex queries) No native joins (denormalized design)
Secondary Indexes Standard SQL indexes Standard SQL indexes GSI and LSI (max 20 GSI, 5 LSI)

Scaling

Vertical Scaling

Aspect RDS Aurora DynamoDB
Compute scaling Instance class change (requires downtime/failover) Instance class change OR Aurora Serverless (auto-scales ACUs in seconds) N/A – fully serverless, automatic
Storage scaling Manual increase (up to 64 TB); auto-scaling with threshold Automatic (10 GB to 128 TB, no action needed) Unlimited – fully managed
Max storage 64 TB (io2), 16 TB (gp3) 128 TB Virtually unlimited

Horizontal Scaling

Aspect RDS Aurora DynamoDB
Read scaling Up to 5-15 Read Replicas (async) Up to 15 Read Replicas (shared storage, <10ms lag); Auto Scaling Automatic partitioning; DAX for caching
Write scaling Single writer (vertical only) Single writer (Aurora DSQL supports multi-region active-active writes) Automatic horizontal partitioning; virtually unlimited write throughput
Global distribution Cross-Region Read Replicas Aurora Global Database (<1s replication); Aurora DSQL (active-active) Global Tables (active-active, multi-region strong consistency)

Pricing

Component RDS Aurora DynamoDB
Compute Per-hour instance pricing Per-hour (provisioned) or per-ACU-second (serverless) No compute charges (serverless)
Storage EBS: ~$0.115/GB/month (gp3) $0.10/GB/month (includes replication) $0.25/GB/month (Standard); $0.10/GB (IA)
I/O Included in EBS pricing (gp3: 3000 IOPS free) $0.20/million I/O requests (Standard); Aurora I/O-Optimized eliminates I/O charges for +30% compute cost On-demand: $1.25/million WRU, $0.25/million RRU; Provisioned: ~$0.00065/WCU/hour
Savings options Reserved Instances (1yr/3yr) Reserved Instances (1yr/3yr) Reserved Capacity (up to 77% savings, 3yr); On-demand 50% price reduction (2024)
Free Tier 750 hrs/month db.t2.micro or db.t3.micro (12 months) $100 credits at sign-up for Aurora Serverless 25 GB storage + 25 WCU + 25 RCU (always free)

Cost Comparison Note: Aurora instances cost ~20% more per vCPU than equivalent RDS instances. However, Aurora’s shared storage and automatic replication often result in lower total cost for high-availability workloads. DynamoDB is most cost-effective for simple access patterns with predictable traffic (provisioned mode) or highly variable traffic (on-demand mode).

Performance

Metric RDS Aurora DynamoDB
Throughput Standard MySQL/PostgreSQL performance Up to 5x MySQL, 3x PostgreSQL throughput Virtually unlimited (scales with partitions)
Latency Low milliseconds Low milliseconds (optimized I/O path) Single-digit milliseconds; microseconds with DAX
Read Replica lag Seconds to minutes (async) <10ms (shared storage) Eventually consistent reads return latest; strongly consistent available
Connection model Connection-based (limited by instance) Connection-based; RDS Proxy for pooling HTTP API (connectionless, unlimited concurrent)

Availability & Durability

Feature RDS Aurora DynamoDB
SLA 99.95% (Multi-AZ) 99.99% (Multi-AZ) 99.99% (single region); 99.999% (Global Tables)
Failover time ~60 seconds (Multi-AZ instance); ~35 seconds (Multi-AZ cluster) <30 seconds (shared storage) Automatic, transparent (no failover concept)
Data replication Synchronous to 1-2 standbys 6 copies across 3 AZs (quorum writes) 3 copies across multiple AZs
Cross-region DR Cross-Region Read Replicas (manual promotion) Aurora Global Database (managed failover, RPO <1s) Global Tables (active-active, zero RPO with MRSC)

Backup & Disaster Recovery

Feature RDS Aurora DynamoDB
Automated backups Daily snapshots + transaction logs; retention 0-35 days Continuous backup to S3; retention 1-35 days Continuous backups with PITR (35-day retention)
Point-in-time recovery Yes (to any second within retention) Yes (to any second); Backtrack for in-place rewind (MySQL only) Yes (to any second within 35 days)
Manual snapshots Yes (retained until deleted) Yes (retained until deleted) On-demand backups (retained until deleted)
Cross-region backup Copy snapshots cross-region; AWS Backup (Multi-AZ clusters in 17 regions, 2026) Copy snapshots cross-region; AWS Backup AWS Backup cross-region/cross-account
Restore method Creates new DB instance Creates new cluster (Backtrack restores in-place) Creates new table

Security

Feature RDS Aurora DynamoDB
Network isolation VPC, Security Groups, Private Subnets VPC, Security Groups, Private Subnets VPC Endpoints (Gateway); no VPC placement needed
Encryption at rest AES-256 with KMS (must enable at creation) AES-256 with KMS (must enable at creation) AES-256 with KMS (enabled by default)
Encryption in transit SSL/TLS SSL/TLS (enforced by default) TLS (all API calls over HTTPS)
Authentication DB user/password, IAM DB Auth, Kerberos/AD DB user/password, IAM DB Auth, Kerberos/AD IAM policies, fine-grained access control (condition keys)
Access control IAM for management; DB-level GRANT for data IAM for management; DB-level GRANT for data IAM policies with item-level and attribute-level control

When to Choose Each Service

Choose Amazon RDS When:

  • You need a traditional relational database with minimal migration effort
  • You require Oracle, SQL Server, or MariaDB engine support
  • Budget is a primary concern and Aurora’s premium isn’t justified
  • Workload is moderate with predictable growth
  • You need OS-level access (RDS Custom for Oracle/SQL Server)
  • Simple Multi-AZ failover meets your HA requirements

Choose Amazon Aurora When:

  • You need MySQL/PostgreSQL compatibility with significantly higher performance
  • High availability (99.99% SLA) and fast failover (<30s) are critical
  • You need 15 read replicas with minimal lag
  • Storage auto-scaling up to 128 TB is required
  • You need global distribution with Aurora Global Database
  • Variable workloads benefit from Aurora Serverless (scale to zero)
  • You want Backtrack for in-place point-in-time rewind (MySQL)
  • You need distributed SQL with active-active writes (Aurora DSQL)

Choose Amazon DynamoDB When:

  • You need single-digit millisecond latency at any scale
  • Access patterns are well-defined (key-value lookups, simple queries)
  • You need virtually unlimited horizontal scaling for reads and writes
  • Serverless/zero-management operation is a priority
  • Global active-active replication is needed (Global Tables)
  • Event-driven architectures (DynamoDB Streams → Lambda)
  • Gaming leaderboards, session stores, IoT data, shopping carts
  • Traffic is highly variable or unpredictable (on-demand mode)

Comprehensive Comparison Table

Feature Amazon RDS Amazon Aurora Amazon DynamoDB
Database Type Relational (SQL) Relational (SQL) NoSQL (Key-Value/Document)
Engines MySQL, PostgreSQL, MariaDB, Oracle, SQL Server MySQL-compatible, PostgreSQL-compatible Proprietary NoSQL
Management Managed (provisioned instances) Managed (provisioned) or Serverless Fully serverless
Max Storage 64 TB 128 TB (auto-scaling) Unlimited
Performance Standard engine performance 5x MySQL / 3x PostgreSQL Single-digit ms; microseconds with DAX
Read Replicas Up to 5-15 (async) Up to 15 (shared storage, <10ms lag) N/A (automatic distribution)
Write Scaling Vertical only Vertical (DSQL: horizontal) Automatic horizontal
Availability SLA 99.95% 99.99% 99.99% / 99.999% (Global)
Failover ~35-60 seconds <30 seconds Automatic (no downtime)
Backup Automated + Manual snapshots Continuous + Backtrack + Snapshots PITR (35 days) + On-demand backups
Global Replication Cross-Region Read Replicas Global Database (<1s lag) Global Tables (active-active, MRSC)
Serverless Option No Aurora Serverless (scale to zero) Fully serverless (always)
Transactions Full ACID Full ACID ACID (limited scope)
Best For Traditional RDBMS workloads, multi-engine support High-performance relational, global apps High-scale key-value, serverless apps

AWS Certification Practice Questions

Question 1

A company is designing a new e-commerce platform that requires sub-millisecond read latency for its product catalog, which contains millions of items accessed by product ID. The application has unpredictable traffic spikes during flash sales. Which database solution is MOST appropriate?

  1. Amazon RDS MySQL with Multi-AZ deployment
  2. Amazon Aurora PostgreSQL with Read Replicas
  3. Amazon DynamoDB with DAX
  4. Amazon RDS PostgreSQL with ElastiCache
Show Answer

Answer: C –

Explanation: DynamoDB with DAX provides microsecond read latency for key-value lookups. Its on-demand mode handles unpredictable traffic spikes without pre-provisioning. The product catalog accessed by product ID is a perfect key-value pattern.

Question 2

A financial services company needs a relational database with 99.99% availability, automatic storage scaling, and the ability to perform point-in-time recovery by rewinding the database to a specific time without creating a new instance. Which service supports this requirement?

  1. Amazon RDS Multi-AZ with automated backups
  2. Amazon Aurora MySQL with Backtrack
  3. Amazon DynamoDB with PITR enabled
  4. Amazon RDS Multi-AZ DB Cluster with AWS Backup
Show Answer

Answer: B –

Explanation: Aurora Backtrack (MySQL only) allows rewinding the database in-place to a specific point in time without creating a new cluster. Combined with Aurora’s 99.99% SLA and auto-scaling storage, it meets all requirements. RDS PITR creates a new instance, not an in-place rewind.

Question 3

A global gaming company needs a database that supports active-active writes across multiple AWS Regions with strong consistency and zero RPO for disaster recovery. The data model is simple player profiles accessed by player ID. Which solution meets these requirements?

  1. Amazon Aurora Global Database with managed failover
  2. Amazon RDS with Cross-Region Read Replicas
  3. Amazon DynamoDB Global Tables with multi-region strong consistency (MRSC)
  4. Amazon Aurora DSQL with multi-Region cluster
Show Answer

Answer: C –

Explanation: DynamoDB Global Tables with MRSC (GA 2025) provides active-active multi-region writes with strong consistency and zero RPO. The simple key-value access pattern (player ID lookup) is ideal for DynamoDB. Aurora Global Database is single-writer with RPO <1s (not zero). Aurora DSQL also supports multi-region active-active writes but the simple data model makes DynamoDB the most appropriate choice.

Question 4

A startup is building a SaaS application with variable traffic. During business hours, the database handles 10,000 transactions/second, but at night traffic drops to near zero. They need MySQL compatibility and want to minimize costs. Which solution is MOST cost-effective?

  1. Amazon RDS MySQL with Reserved Instances
  2. Amazon Aurora MySQL Serverless
  3. Amazon DynamoDB with on-demand capacity
  4. Amazon Aurora MySQL provisioned with Auto Scaling replicas
Show Answer

Answer: B –

Explanation: Aurora Serverless scales compute capacity automatically based on demand and can scale to zero during idle periods. This is the most cost-effective option for variable workloads requiring MySQL compatibility. RDS Reserved Instances charge for 24/7 capacity. DynamoDB doesn’t provide SQL/MySQL compatibility.

Question 5

A company is migrating a legacy Oracle database to AWS. The application uses complex SQL queries with multiple joins, stored procedures, and requires Oracle-specific features. They need Multi-AZ high availability. Which AWS database service should they use? (Select TWO)

  1. Amazon Aurora PostgreSQL (Oracle-compatible mode)
  2. Amazon RDS for Oracle with Multi-AZ
  3. Amazon DynamoDB with complex access patterns
  4. Amazon RDS Custom for Oracle with Multi-AZ
  5. Amazon Aurora MySQL with stored procedures
Show Answer

Answer: B, D

Explanation: Amazon RDS for Oracle provides managed Oracle database with Multi-AZ HA. RDS Custom for Oracle allows OS and database customization for Oracle-specific features requiring elevated access. Aurora does not support Oracle. DynamoDB doesn’t support SQL joins or stored procedures. Note: RDS Custom for Oracle EOL is March 31, 2027 – plan migration to RDS for Oracle or alternative.

Key Takeaways

  • RDS is the go-to managed relational database when you need specific engines (Oracle, SQL Server, MariaDB) or traditional RDBMS at moderate scale
  • Aurora is the premium relational choice for MySQL/PostgreSQL workloads needing higher performance, better availability, and advanced features like Serverless, Global Database, and Backtrack
  • DynamoDB is the choice for NoSQL key-value workloads requiring unlimited scale, serverless operation, single-digit millisecond latency, and global active-active replication
  • All three services integrate with AWS security features (KMS encryption, IAM, VPC/VPC Endpoints, CloudTrail)
  • Cost optimization: Use Reserved Instances (RDS/Aurora) or Provisioned + Reserved Capacity (DynamoDB) for steady workloads; use Aurora Serverless or DynamoDB On-Demand for variable workloads

Frequently Asked Questions

What is the difference between Aurora and RDS?

Aurora is AWS’s cloud-native database with up to 5x MySQL and 3x PostgreSQL performance, 6-way storage replication, and up to 128TB auto-scaling storage. Standard RDS uses traditional database engines with simpler architecture and lower cost for small workloads.

When should I use DynamoDB instead of Aurora?

Use DynamoDB for key-value/document workloads needing single-digit millisecond latency at any scale, serverless applications, or when you need global multi-region active-active replication. Use Aurora for complex SQL queries, joins, and transactions.

Is Aurora Serverless good for production?

Aurora Serverless v2 is production-ready and scales instantly in fine-grained 0.5 ACU increments. It’s ideal for variable workloads, dev/test environments, and applications with unpredictable traffic patterns.

See also: Aurora DSQL – Serverless Distributed SQL Database

References