What is the difference between RDS, DynamoDB and Aurora, and when would you use each?
- RDS — managed relational databases: PostgreSQL, MySQL, MariaDB, Oracle, SQL Server. AWS handles patching, backups, and Multi-AZ failover; you keep full SQL, joins, transactions, and a familiar engine. Use it for anything with genuine relational structure, and for migrating an existing application without rewriting it.
- Aurora — AWS's MySQL- and PostgreSQL-compatible engine with a re-architected storage layer that replicates six ways across three availability zones. Substantially faster than standard RDS, with up to 15 low-lag read replicas and much faster failover. Aurora Serverless v2 scales capacity automatically, which suits variable or unpredictable workloads. Use it when you want relational semantics with better performance and availability, and can accept AWS-specific behaviour.
- DynamoDB — a managed NoSQL key-value and document store with single-digit millisecond latency at effectively any scale, no servers, and no connection management. Use it for high-volume, well-understood access patterns: session stores, user profiles, IoT ingestion, shopping carts.
The critical distinction: DynamoDB requires you to design the table around your access patterns up front. There are no joins and no efficient ad hoc queries — querying by something other than the key means a costly scan or a secondary index planned in advance. If your query patterns are unknown or exploratory, a relational database is the right answer.
Note: DynamoDB on-demand versus provisioned capacity is a common follow-up: on-demand for unpredictable traffic, provisioned with auto scaling for steady load at lower cost.





