DEV Community

Cover image for The Relational DBs (RDB)
Augusto Valdivia for AWS Community Builders

Posted on • Edited on

The Relational DBs (RDB)

What is a Relational DB?

A relational database is categorized as a database that focuses on the collection of data entry points and the relationship between them.

How does one know when to choose a Relational DB?

If you have the knowledge about your data entry points relationship with one and another, and have an uncomplicated course of action of representing the data in tables, then RDB is your best option.

What are some industries RDB use cases?

  • Traditional applications,
  • Enterprise resource planning (ERP),
  • Customer relationship management (CRM),
  • Ecommerce
  • Lift and shift

industries

Now that we have a general idea of RDB let us continue drilling deeper and let us explore and build AWS RDB resources:

  • Amazon RDS
  • Amazon Aurora
  • Amazon Redshift

What is Amazon RDS?

Amazon Relational Database Service (Amazon RDS) is a managed service that makes it easy to set up, operate, and scale.

A relational database in the cloud. It provides cost-efficient and resizable capacity, while managing time-consuming database administration tasks, freeing you up to focus on your applications and business.

Amazon RDS gives you access to the capabilities of familiar SQL flavors such as:

  • MySQL
  • MariaDB
  • Oracle
  • SQL Server
  • PostgreSQL database

What is Amazon Aurora?

Amazon Aurora is a modern relational database service offering performance and high availability at scale, fully open-source MySQL- and PostgreSQL-compatible editions, and a range of developer tools for building serverless and machine learning (ML)-driven applications.

What is Amazon Redshift?

Amazon Redshift is a fully managed, scalable cloud data warehouse that accelerates your time to insights with fast, easy, and secure analytics at scale.

Let us see some important characteristics about these 3 RDBs

Amazon-RDS

Performance:

- General Purpose Storage : 3 IOPS * each GB.
- Burst capacity: 3,000 IOPS
- Provisioned IOPS storage:  40,000 IOPS *  each RDS instance. 
- Formula: (Credit balance)
Burst duration =  ---------- (Burst IOPS) - 3*(Storage size in GiB)

Scalability:

- Horizontal
- Vertical 

Availability:

- Multi-AZ service level agreement: 99.95% up every month

Security:

- Encryption of data at rest using KMS
- Encryption of data in transit using SSL/TLS
- Access Control using IAM
- Network Isolation and Database Firewall using VPC and industry-standard encrypted IPSec VPN
- Database activity streams beyond external security threats providing a real-time data stream of the database activity in 
your relational database

Enter fullscreen mode Exit fullscreen mode

Amazon-Aurora

Performance:

- 5x throughput of standard MySQL
- 3x of standard PostgreSQL
- Auto-scales up to 128 TB per database instance

Scalability:

- The minimum storage is 10 GB
- Automatically grow, up to 128 TB, in 10 GB increments with no impact on database performance
- Scale out up to 15 read replicas

Availability:

- Fault tolerant
- Self-healing storage
- Automatically divides your database volume into 10 GB segments spread across many disks
- Six copies of data across three AZ's
- Continuous backup to Amazon S3

Security:

- Uses SSL (AES-256) to secure the connection between the database instance and the application
- Network isolation
- Encryption at rest and in transit 

Enter fullscreen mode Exit fullscreen mode

Amazon-Redshift

Performance:

- Massively parallel processing
- Columnar data storage
- Data compression
- Query optimizer
- Result caching
- Compiled code
- 10x better performance than traditional databases
- Automatic Table Optimization (ATO)
- ATO increases cluster performance by 24% and 34% using the 3 TB and 30 TB versus a cluster without ATO 

Scalability:

- Petabyte-scale data warehouse

Availability:

- The cluster node is replaced automatically in case of node failure detection
- Data is backup into S3

Security:

- Built-in AWS IAM integration
- Identity federation for single-sign-on (SSO)
- MFA
- Column level access control
- Row-level security
- Encrypts and keeps your data secure in transit and at rest

Enter fullscreen mode Exit fullscreen mode

Now let us see some limitations to consider:

Amazon RDS:


- Read replicas per region: 5 
- Reserved DB instances per region: 40 
- Rules per security group per region: 20 
- Security groups per region: 25 
- Security groups (VPC) per region: 5 
Enter fullscreen mode Exit fullscreen mode

Amazon Redshift:


- AWS accounts that you can authorize to restore a snapshot per snapshot: 20 
- Concurrency level (query slots) for all user defined manual WLM queues: 50 
- Concurrency scaling clusters: 10 
- Nodes: 200 
- Schemas in each database per cluster: 9,900 
- Security groups: 20 
- Snapshots: 20 
Enter fullscreen mode Exit fullscreen mode

Amazon Aurora:

- Authorizations per DB security group per region: 20 
- Custom engine versions per region: 40 
- DB cluster parameter groups per region: 50 
- DB clusters per region: 40 
- DB instances per region: 40 
- DB subnet groups per region: 50 
- Data API HTTP request body size per region: 4 MGB 
Enter fullscreen mode Exit fullscreen mode

Please note that some of these limitations are adjustable and others are not.

Oh, right it is building 👷 time let us build these 3 databases using Terraform

3DB's

Find the Terraform repo and directions for this project here

Terraform code previous:

#---aurora/main--

resource "aws_rds_cluster_instance" "cluster_instances" {
  count              = 1
  identifier         = "aurora-cluster-example-${count.index}"
  cluster_identifier = aws_rds_cluster.my_rds.id
  instance_class     = "db.r4.large"
  engine             = aws_rds_cluster.my_rds.engine
  engine_version     = aws_rds_cluster.my_rds.engine_version
}

resource "aws_rds_cluster" "my_rds" {
  cluster_identifier = "aurora-cluster-example"
  availability_zones = ["us-west-2a", "us-west-2b", "us-west-2c"]
  database_name      = "USES-YOUR-OWN-DB-NAME-HERE"
  master_username    = "username"
  master_password    = "Always_use_complex_password"
}
Enter fullscreen mode Exit fullscreen mode

Diagram

Diagram

References:



https://aws.amazon.com/rds/features/security/ 

https://aws.amazon.com/redshift/faqs/ 

https://aws.amazon.com/rds/aurora/faqs/ 

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Limits.html 

https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_Limits.html 

https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_Limits.html 
Enter fullscreen mode Exit fullscreen mode

Top comments (2)

Collapse
 
shifi profile image
Shifa Ur Rehman

Why is there almost no craze for psql? In my understanding its the most robust of the bunch.

Collapse
 
valaug profile image
Augusto Valdivia • Edited

Hi,

While psql might not have as much hype or buzz as some other databases, it is definitely a powerful and reliable tool that many developers and companies use for large-scale and complex projects. Its ability to handle large amounts of data and complex relationships is second to none, so it's definitely worth considering for your next project.

Hopefully this answer your question!