Aurora vs RDS vs DynamoDB
Aurora vs RDS and RDS vs DynamoDB are two of the most common database questions on the AWS Associate exams. The question usually gives you a few requirements, such as relational or not, how much it must scale, and how little you want to manage, and asks which service fits.
This page keeps it practical. First comes a quick "if the requirement says X, pick Y" table, then a side-by-side comparison, then the traps that catch people out. Everything is checked against the AWS documentation, with a link on every row.
Reviewed against the AWS documentation
At a glance
Amazon Aurora
A fully managed relational database engine compatible with MySQL and PostgreSQL, built on a shared storage volume that grows automatically. It is part of the Amazon RDS family.
- Relational workloads that need higher throughput and faster failover than a standard RDS instance
- Many read replicas that share one storage volume
- Multi-Region reads and disaster recovery with Aurora Global Database
- Unpredictable relational load, using Aurora Serverless
Amazon RDS
A managed service for running a relational database such as MySQL, PostgreSQL, MariaDB, Oracle Database, SQL Server or Db2. AWS handles backups, patching and failure recovery.
- Relational workloads that need a specific engine, such as Oracle, SQL Server or Db2
- Lift-and-shift of an existing database with minimal changes
- Standard relational apps where Aurora features are not needed
Amazon DynamoDB
A serverless, fully managed NoSQL database with single-digit millisecond performance at any scale. It supports key-value and document data models.
- Key-value or document access patterns known up front
- Massive scale with consistent low latency and no servers to manage
- Spiky or unpredictable traffic with on-demand capacity
- Multi-Region, multi-active apps using global tables
Which one does the question want?
| If the question says | Pick | Why |
|---|---|---|
| A relational database on MySQL or PostgreSQL that needs high availability and many read replicas with very low replica lag | Aurora | Aurora Replicas share the same cluster volume, so a cluster can have up to 15 of them and lag is usually well under 100 milliseconds. Docs |
| A relational database that must run Oracle, SQL Server or Db2 | RDS | Aurora is only MySQL and PostgreSQL compatible. RDS supports Db2, MariaDB, SQL Server, MySQL, Oracle and PostgreSQL. Docs |
| Key-value lookups with consistent single-digit millisecond latency and no servers to manage | DynamoDB | DynamoDB is serverless and has no maintenance windows or versions to manage. Docs |
| Complex joins and multi-table SQL queries over structured data | RDS | DynamoDB has no JOIN operator, so joins point you to a relational database. A standard RDS instance is the default choice when you do not need Aurora features. Docs |
| A relational database with unpredictable load that should scale its capacity automatically | Aurora | Aurora Serverless adjusts capacity based on demand and is aimed at variable and unpredictable workloads. Docs |
| A globally distributed app that needs low-latency reads in other Regions from a relational database | Aurora | An Aurora global database has one primary Region and up to 10 read-only secondary Regions, with replication typically under a second. Docs |
| A multi-Region, multi-active database where every Region accepts writes | DynamoDB | Global tables replicate changes between replica tables in different Regions, and a change in any replica is copied to all the others. Docs |
| Microsecond read latency in front of a NoSQL table, with minimal code changes | DynamoDB | DAX is a DynamoDB-compatible, API-compatible cache that brings eventually consistent reads from milliseconds down to microseconds. Docs |
DynamoDB vs RDS
DynamoDB is a serverless NoSQL database for key-value and document data: there are no servers, versions or maintenance windows, and it keeps single-digit millisecond performance at any scale. It has no JOIN operator, so you design tables around known access patterns. Amazon RDS runs a relational engine (such as MySQL, PostgreSQL, MariaDB, Oracle, SQL Server or Db2) on DB instances that you choose and size, so you keep SQL, joins and constraints.
If the question stresses massive scale, unpredictable traffic, simple lookups by key or no servers to manage, pick DynamoDB. If it needs joins, ad hoc SQL or an existing relational application, pick RDS (or Aurora when it adds high performance on MySQL or PostgreSQL).
Side by side
Exam traps
Aurora is not a separate product from RDS.
Aurora is part of Amazon RDS. You create it through RDS and it shares many management features. Still, the RDS User Guide covers engines other than Aurora, so exam wording like "RDS or Aurora" is asking about standard RDS engines versus the Aurora engine.
AWS docsA Multi-AZ standby is for availability, not for read scaling.
In a Multi-AZ DB instance deployment the standby does not serve read traffic. If the question asks for read scaling, think read replicas, a Multi-AZ DB cluster deployment (its two standbys also serve reads) or Aurora Replicas.
AWS docsDynamoDB cannot do JOINs.
If a scenario needs complex joins or ad hoc relational queries, DynamoDB is the wrong answer. DynamoDB wants you to denormalize data around known access patterns.
AWS docsStrongly consistent reads do not work on a global secondary index, and DAX serves eventually consistent data.
All reads from GSIs and streams are eventually consistent. DAX is also aimed at eventually consistent reads, so it is not the fix when a question demands the latest data on every read.
AWS docsRDS read replicas do not scale automatically.
You must create RDS read replicas yourself and RDS does not add or remove them as demand changes. For automatic scaling on a relational database, look at Aurora Auto Scaling (which adds or removes Aurora Replicas), Aurora Serverless, or RDS storage autoscaling (which only grows storage).
AWS docs
Practice it
Frequently Asked Questions
What is the difference between Aurora and RDS?
Aurora is a database engine inside the RDS family that is compatible with MySQL and PostgreSQL, while the other RDS engines run standard database software on a DB instance. Aurora stores data in a shared cluster volume spread across three Availability Zones, which affects replicas and failover. RDS also offers Oracle, SQL Server, MariaDB and Db2, which Aurora does not.
Aurora vs RDS: which should I pick on the exam?
If the question stresses high performance, many low-lag read replicas, fast failover or cross-Region reads on MySQL or PostgreSQL, pick Aurora. If it needs another engine such as Oracle or SQL Server, or just a standard managed relational database, pick RDS.
DynamoDB vs RDS: when is DynamoDB the better choice?
Pick DynamoDB when the data is key-value or document style, access patterns are known, and you want consistent low latency at any scale without managing servers. Pick RDS when you need joins, relational constraints or an existing SQL application.
Does DynamoDB support transactions?
Yes. DynamoDB transactions give you ACID guarantees across one or more tables in a single request. There is no extra cost to turn them on. You pay for the reads and writes in the transaction, and each transactional read or write uses twice the capacity units of a standard one.
How do DynamoDB capacity modes differ?
On-demand mode charges per request, scales automatically and needs no capacity planning. It is the default and the recommended choice for most workloads, including spiky or unpredictable ones. Provisioned mode charges for the read and write capacity you set per hour, so it suits steady workloads with forecastable demand.