# Amazon Database Solutions

## Relational Database Solutions

* **NOTE**: To move the on-premise database to cloud, AWS provides `lift-and-shift` migration, which helps to run the database in Amazon EC2.

### Amazon Relational Database Service (Amazon RDS)

* Amazon Relational Database Service (Amazon RDS) is a service that enables you to run relational databases in the AWS Cloud.
* Amazon RDS is a **managed** service that automates tasks such as,
  * Hardware provisioning
  * Database setup
  * OS patching
  * Failover
  * Disaster recovery
  * Redundancy with replication
  * Backups and restore with point-in-time restore
  * Monitoring dashboard
  * Scalability
* Amazon RDS provides a number of different security options. Many Amazon RDS database engines offer encryption at rest _(protecting data while it is stored)_ and encryption in transit _(protecting data while it is being sent and received)_.

#### Amazon RDS database engines

* Amazon RDS is available on six database engines, which optimize for memory, performance, or input/output (I/O). Supported database engines include:
  * `Aurora`
  * `Postgres`
  * `MySQL`
  * `MariaDB`
  * `Oracle`
  * `Microsoft SQL Server`
  * `IBM DB2`

### Amazon Aurora

* [Amazon Aurora](https://aws.amazon.com/rds/aurora/?aurora-whats-new.sort-by=item.additionalFields.postDateTime\&aurora-whats-new.sort-order=desc) is an **enterprise-class** relational database. It is compatible with **MySQL** and **PostgreSQL** relational databases.
* It is up to five times faster than standard MySQL databases and up to three times faster than standard PostgreSQL databases.
* Only costs 1/10th of commercial databases.
* Amazon Aurora helps to reduce your database costs by reducing unnecessary input/output (I/O) operations, while ensuring that your database resources remain reliable and available.
* Consider Amazon Aurora if your workloads require high availability. **It replicates six copies of your data across three Availability Zones and continuously backs up your data to Amazon S3**.
* **Can deploy up to 15 read replicas, in order to off-load the reads and scale.**
* Provides point-in-time recovery, to recover data from specific period.

## Non-Relational Database Solutions

### Amazon DynamoDB

* [Amazon DynamoDB](https://aws.amazon.com/dynamodb/) is a key-value based, fully managed database service _(NoSQL database)_. It delivers single-digit millisecond performance at any scale.
* It is a **serverless database**, which means you do not have to provision, patch, or manage servers. Also, you do not have to install, maintain, or operate software.
* As the size of your database shrinks or grows, it automatically scales to adjust for changes in capacity while maintaining consistent performance.
* This makes it a suitable choice for use cases that require high performance while scaling.

## Comparison between Amazon RDS and Amazon DynamoDB

| Feature            | Amazon RDS        | Amazon DynamoDB                      |
| ------------------ | ----------------- | ------------------------------------ |
| Relational DBS     | Yes, Schema based | No                                   |
| Non Relational DBS | No                | Yes, Schemaless i.e., key-value pair |
| Serverless         | No                | Yes                                  |

## Data Warehouses

* A solution for historical analytics of business data for Business Intelligence (BI) workloads.

### Amazon RedShift

* [Amazon Redshift](https://aws.amazon.com/redshift/) is a data warehousing service that you can use for big data analytics. It offers the ability to collect data from many sources and helps you to understand relationships and trends across your data i.e., BI.
* Redshift nodes with multiple petabytes of data is common, and so you can imagine how scalable it is.

## AWS Database Migration Service (Amazon DMS)

* AWS Database Migration Service (AWS DMS) enables you to migrate existing relational databases, nonrelational databases, and other types of data stores. These databases can be on-premises or within the Amazon cloud such as AWS RDS or running on EC2 instances.
* With AWS DMS, you move data between a source database and a target database. The source and target databases can be of the same type or different types. **During the migration, your source database remains operational**, reducing downtime for any applications that rely on the database.
* If source and target databases are of same type i.e., **Homogeneous type** then, as schema structures, data types and database code is compatible amongst them, you just need to create a migration task with connections to source and target databases.
* If source and target databases are not of same type i.e., **Heterogeneous type** then, we need a two step process.
  1. Convert schemas to target type using AWS Schema conversion tools. This will convert source schema and database code to target database type.
  2. Use DMS to migrate data from source database to target database.
* DMS also allows you to do development and test database migrations, database consolidation, continuous database replication.
  * **Development and test database migrations** is used when developers wants to test against production data but without affecting production users. In this case we use DMS to migrate a copy of our production database to any development environment such DEV or QA, either once off or continuously.
  * **Database consolidation** is used when you have several databases and want to consolidate them to a single database.
  * **Continuous database replication** is used when we want to do **continuous** data replication in order to have a copy for disaster recovery or geographic separation.

## Aditional AWS Database service

* Amazon DocumentDB
  * Supports Mongodb service workloads.
  * Great at Content management, catalogue, user profiles
* Amazon Neptune
  * Graph database
  * Great for social networking, fraud detection, recommendation engines
* Amazon Quantum Ledger Database
  * An immutable ledger
* Amazon Managed Blockchain
  * A service that you can use to create and manage blockchain networks with open-source frameworks.
  * Blockchain is a distributed ledger system that lets multiple parties run transactions and share data without a central authority.
* Amazon ElastiCache
  * Database accelerators that adds caching layers on top of your database to help improve read times of common requests.
  * Supports both memcached and redis flavors.
* Amazon DynamoDB Accelerator _(DAX)_
  * In-memmory cache, for non relational database.
  * It helps improve response times from single-digit milliseconds to microseconds.

Read more about aws databases [here](https://aws.amazon.com/products/databases/). Read more about aws DMS [here](https://aws.amazon.com/dms/).
