# database

<figure><img src="https://2259236002-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fuh9xZDZ53qGqmMCM44PU%2Fuploads%2F87IpVHatqhENMKyW5NhN%2Fimage.png?alt=media&#x26;token=d5823101-04ed-4abf-8682-10faa66a8c17" alt=""><figcaption></figcaption></figure>

## SQL vs NoSQL

<table><thead><tr><th width="203.33333333333331"></th><th>SQL</th><th>NoSQL</th></tr></thead><tbody><tr><td><strong>optimal workloads</strong></td><td>transactional, OLTP (Online Transaction Processing), OLAP (Online Analytical processing)</td><td>no structure, semi-structured data</td></tr><tr><td><strong>data model</strong></td><td>tables (row, col), indexes, relationship between tables.</td><td>key-value, document, in-memory, graph</td></tr><tr><td><strong>ACID properties</strong></td><td><ul><li><strong>A</strong>tomicity</li><li><strong>C</strong>onsistency</li><li><strong>I</strong>solation</li><li><strong>D</strong>urability</li></ul></td><td>DynamoDB support ACID, high throughput, low latency, horizontal scaling</td></tr><tr><td><strong>performance</strong></td><td>depend on: disk, queries, indexes, table structure.</td><td>hardware cluster size, network latency, calling application.</td></tr><tr><td><strong>scale</strong></td><td><ul><li><strong>scale up</strong>: increasing compute capabilities</li><li><strong>scale out</strong>: adding replicas.</li></ul></td><td><ul><li><strong>scale out</strong>: distributed architecture.</li></ul></td></tr><tr><td><strong>APIs</strong></td><td>SQL queries</td><td>Object-based APIs</td></tr></tbody></table>

## Services

![](https://2259236002-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fuh9xZDZ53qGqmMCM44PU%2Fuploads%2Fgit-blob-99328f27b3a827fed8ce9b343a7c0c7c4943237f%2FDatabase_20220702154123.png?alt=media)

* Relational DB
  * Traditional
    * [Amazone RDS](https://mamawhocode.gitbook.io/aws/services/database/rds)
    * [Amazon Aurora](https://mamawhocode.gitbook.io/aws/services/database/rds/aurora)
  * Warehouse
    * [Amazon Redshift](https://github.com/PhuongNHT1/notes/blob/aws/learn/tech/cloud/aws/database/Redshift.md)
* Non-relational DB
  * Key-value: [DynamoDB](https://mamawhocode.gitbook.io/aws/services/database/dynamodb)
  * Document: [DocumentDB](https://mamawhocode.gitbook.io/aws/services/database/documentdb)
  * In-memory: [ElastiCache](https://github.com/PhuongNHT1/notes/blob/aws/learn/tech/cloud/aws/database/ElastiCache.md)
  * Graph: [Neptune](https://github.com/PhuongNHT1/notes/blob/aws/learn/tech/cloud/aws/database/Neptune.md)

## Use cases

![](https://2259236002-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fuh9xZDZ53qGqmMCM44PU%2Fuploads%2Fgit-blob-4e0e88feafdbf4228626607d5ef2107db2264ac4%2FDatabase_20220702154420.png?alt=media)

## Best practices

* Keep only a subset of the data in RDS
* Move CLOBs and BLOBs to S3
* Move historical data to S3
* Move high velocity frequently written data to DynamoDB
* Do incremental backups
* Communicate within the same AZ
* Purchase reserved instances when possible.
