RDS — Relational Database Service
Managed relational databases. Supports MySQL, PostgreSQL, MariaDB, Oracle, SQL Server, and Aurora. AWS handles backups, patching, failover, and replication — you manage the data and queries.
- Multi-AZ deployment: Synchronous standby replica in a different AZ. Automatic failover (~1–2 min) if the primary fails. Used for high availability, not read scaling.
- Read Replicas: Asynchronous copies for read-heavy workloads. Up to 5 replicas per instance, can be in different regions. You route read traffic there manually.
- Automated backups: Daily snapshots + transaction logs. Point-in-time recovery up to 5 minutes before present. Retained 1–35 days.
- RDS Proxy: Connection pooler between your app and RDS. Reduces connection overhead — especially for Lambda functions that open many short-lived connections.
- Encryption: At-rest via KMS, in-transit via SSL. Must enable at creation time — you can't encrypt an unencrypted instance in place.
Aurora
AWS's own MySQL/PostgreSQL-compatible engine. 5× faster than MySQL, 3× faster than PostgreSQL (AWS claims). Distributed storage with 6 copies across 3 AZs — can survive loss of 2 copies for reads, 3 for writes. Automatic failover in <30 seconds (vs 1–2 minutes for RDS Multi-AZ).
- Aurora Serverless v2: Scales capacity in 0.5 ACU increments automatically. Ideal for variable or unpredictable workloads. Scales to zero when idle (v1) or minimum ACUs (v2).
- Aurora Global Database: One primary region + up to 5 read-only secondary regions. Sub-second replication. RPO <1s, RTO <1 min.
DynamoDB
Fully managed NoSQL key-value and document database. Single-digit millisecond latency at any scale. No servers to manage, no schema required.
- Primary key: Partition key alone, or composite (partition key + sort key). All queries must include the partition key.
- On-Demand mode: Pay per read/write request. No capacity planning. Good for unpredictable or spiky traffic.
- Provisioned mode: Set RCUs (Read Capacity Units) and WCUs. Auto Scaling adjusts within limits. Cheaper for predictable load.
- DynamoDB Streams: Change data capture — triggers Lambda on inserts/updates/deletes. Use for real-time data pipelines.
- Global Tables: Multi-region active-active replication. Sub-second replication lag. Write to any region.
- DAX (DynamoDB Accelerator): In-memory cache for DynamoDB. Microsecond read latency. Fully managed. Use for read-heavy, cache-friendly workloads.
- TTL (Time to Live): Automatically delete expired items based on a timestamp attribute. No extra cost.
ElastiCache
Managed in-memory caching with two engines:
- Redis: Rich data structures (lists, sets, sorted sets), pub/sub, Lua scripting, optional persistence, cluster mode. Use for leaderboards, session storage, real-time analytics.
- Memcached: Simple key-value, horizontal scaling via sharding, multi-threaded. Use for pure caching of database query results.
Redshift
Data warehouse for analytical workloads (OLAP). Columnar storage, massively parallel processing (MPP). Runs SQL but optimised for large aggregations over billions of rows — not for transactional writes. Redshift Spectrum extends queries directly to S3 data without loading it first.