大手クラウド3社のデータベースサービスを切る -RDB編-

そもそもの理解を深めるための自分用メモ

## RDB
### Amazon RDS
AWSのマネージドサービス型RDS(いわゆるSaaS型)
Aurora、PostgreSQL、MySQL、MariaDB、Oracle データベース、SQL Server から選択できる
Auroraとそれ以外でアーキテクチャが異なる
ログやスナップショットはS3に保存可能

**通常のRDS**
ベースはEC2のDB用インスタンス
用途に合わせてオファリング＋ストレージタイプを設定することが可能
マルチAZによる高可用性と複数のリードレプリカを作ることで読み込み負荷の軽減が可能
ストレージは3種類のから選択することができる

・汎用SSDストレージを使用した場合
(コスト効率の高いストレージ)
1GB当たり3IOPS→ボリュームが大きいほどパフォーマンスが上がる
ただし3000IOPSでバーストするためワークロードのにーずを満たすように設定する必要がある
(「バースト」とは、利用しているボリュームのベースラインパフォーマンスを超えたI/O性能を発揮させること。
バーストが継続可能な期間は、バースト開始時点でのI/Oクレジットバランスの残量に制限され、残量が０となるとベースライン以上のパフォーマンスは出ません。)
![CloudDBS02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/efc39939-fa19-97ae-2047-43cbf834e12b.png)

・プロピジョンIOPS SSDストレージを使用した場合
(I/O重視のワークロードの場合)
インスタンス作成時、それぞれDBエンジンごとにIOPSとストレージの範囲が異なる
![CloudDBS01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/be0c0c94-5063-a1e5-fc60-8382fd37aee2.png)

マグネティックストレージは下位互換のため非推奨で下記制限事項がある
　- SQL Server データベースエンジン使用時には、ストレージをスケーリングできません。
　- Elastic ボリュームをサポートしていません。
　- 最大サイズが 4 TiB に制限されます。
　- 最大で 1000 IOPS に制限されます。

↑[参照](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/CHAP_Storage.html)

**Aurora**
AWS的にはMySQLを使う場合にはAurora推奨(でもPostgreSQLでも使える)
MySQLは5.6と5.7を選択可

Aurora DB クラスターは1 つ以上の DB インスタンスと、これらの DB インスタンスのデータを管理する 1 つのクラスターボリューム、Aurora クラスターボリュームは、複数のアベイラビリティーゾーンにまたがる仮想データベースストレージボリュームで構成されている
ストレージが10GBから64TBまでシームレスに、ダウンタイム無しで自動拡張
データは、3AZに2つずつ、合計6重化されて保存されるというありがたさ
最大15個のレプリカ可能で障害時のフェールオーバーも早い
アーキテクチャはこの図が非常にわかりやすい
![CloudDBS03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/f94c1579-4fc7-b65f-fed0-ac209c3e0eaf.png)

インスタンスはメモリ最適化タイプとバーストタイプがある
公式で正確な数字は出ていないが、
「MySQL のスループットの 5 倍、PostgreSQL のスループットの 3 倍を実現」とのこと

[参照](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html)

### Azure Database for MySQL/PostgreSQL/MariaDB

AzureのPaaSのDB
MySQLはバージョン5.6と5.7、PostgreSQLは9.5.14と9.6.10と10.5
MariaDBはバージョン10.2に対応
最近PostgreSQLのCitusによるハイパースケールが実装されてこれがかなり強力
(これはまたアーキテクチャが異なる)

こちらもストレージは3種類のから選択することができる。
とはいえAWSと比較するとお話しにもならない
Basic:開発やテストなどI/Oパフォーマンスを必要とする場合
汎用：Webやモバイルアプリなど負荷分散されたコンピューティングとメモリ、およびスケーラブルな I/O スループットを必要とする場合
メモリ最適化：リアルタイムデータや分析など高速トランザクション処理と高いコンカレンシーを実現するためのインメモリ パフォーマンスを必要とする場合
![CloudDBS04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/17ac035c-1975-af04-f358-b6de1d31b02c.png)

[参照](https://docs.microsoft.com/ja-jp/azure/mysql/concepts-pricing-tiers)

**Azure SQL Database***
こちらは上記OSSのDBとはまた別のアーキテクチャで実装されている
またパフォーマンスとコストのニーズに合わせて2タイプから選べる
仮想コアベース(推奨)：プロビジョニングされたサーバとサーバレス(プレビュー)のいずれかを選択できる。
DTUDatabase Throughput Unit)ベース：コンピューティング・ストレージ・IOリソースがパッケージされている(柔軟性が低い)

スペックに関しては推奨の仮想コアベースのみ記載
CPUモデルGen4の場合
![CloudDBS05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/4ed88f4c-d43b-3ccc-394e-bfe68fb30f13.png)

CPUモデルGen5の場合
![CloudDBS06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/e04afa7e-d7e2-fdaa-9f27-c25281990d02.png)


### Google Cloud SQL
MySQL,PostgreSQL,SQLServer から選択できるフルマネージドデータベースサービス
Cloud Spanner はハイブリットタイプのため別扱い

MySQLは第1世代と第2世代のインスタンスを選択可能
(ただし第1世代は2020年1月サポート終了予定)
第 2 世代インスタンスは、MySQL 5.6 と 5.7 をサポートし、最大で 416 GB の RAM と 10 TB のデータ ストレージを使用でき、必要に応じてストレージを自動的に増やすオプションあり。
第 1 世代インスタンスは、MySQL 5.5 と 5.6 をサポートし、最大で 16 GB の RAM と 500 GB のデータ ストレージを使用可能

PostgreSQLは第2世代のみで最大 416 GB の RAM と 64 個の CPU を搭載するカスタム マシンタイプ、最大 10 TB までのストレージを利用可能。
(必要に応じて、ストレージを自動的に増やすことが可能)
バージョンは9.6、11.1 ベータ版をサポート

選択するディスクによってパフォーマンスが変わる
SSD、HDD、Backupから選択可

SSDのスペックはこちら↓
![CloudDBS07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/042d5ce5-5c5b-da0e-ba96-3c0108c59d63.png)


長くなってしまったので、NoSQLに関してはまた別でまとめたいと思います