RDS・Aurora・DynamoDB の選定基準 — リレーショナル/NoSQLの判断軸
リレーショナル/NoSQLの選定基準、DynamoDBのキャパシティモードとホットパーティション対策、グローバルテーブルの競合解決を解説します。
データベース選定は、AWSアーキテクチャ設計における最も重要な判断の一つです。 本記事では、リレーショナルDB(RDS/Aurora)とNoSQL(DynamoDB)の選定基準を整理します。
SAA レベル:基礎概念
RDSとAuroraの違い
| 項目 | RDS | Aurora |
|---|---|---|
| エンジン | MySQL、PostgreSQL、Oracle、SQL Server等 | MySQL/PostgreSQL互換の独自エンジン |
| ストレージ | EBSベース、事前プロビジョニング | 専用の分散ストレージ、自動拡張(最大128TiB) |
| レプリカ数 | 通常5つまで | 最大15のAuroraレプリカ、レプリケーション遅延が小さい |
SAA 試験のポイント
MySQL/PostgreSQL互換で、かつ高い可用性・スケーラビリティが求められる場合は、Auroraが基本的にRDSの上位互換的な選択肢として推奨されるケースが多い、という点がSAAで問われます。
DynamoDBの基本
- キーバリュー/ドキュメント指向のフルマネージドNoSQLデータベース
- パーティションキー(と、必要に応じてソートキー)でデータを分散配置
SAP レベル:高度な設計シナリオ
リレーショナル/NoSQLの選定基準
SAP 試験のポイント
複雑な結合(JOIN)やトランザクション整合性が求められるワークロード(会計システム等)にはRDS/Auroraが適し、単純なキーによる高速アクセスが大量に発生し、スキーマの柔軟性が求められるワークロード(セッションストア、IoTデータ等)にはDynamoDBが適します。SAPでは「超高スループット(数十万リクエスト/秒)が求められる」という要件から、DynamoDBを選ばせる誘導が頻出します。
DynamoDBのキャパシティモードとホットパーティション対策
| モード | 特徴 |
|---|---|
| プロビジョンドスループット | 事前に読み書きキャパシティユニットを設定、予測可能なコスト |
| オンデマンド | 使用量に応じた自動スケール、予測しづらいワークロードに適する |
SAP 試験のポイント
DynamoDBのパフォーマンス問題で最も頻出するのがホットパーティションです。特定のパーティションキー値にアクセスが集中すると、そのパーティションだけがスロットリングされ、他のパーティションに余力があってもリクエストが失敗します。対策として、パーティションキーの設計時にカーディナリティ(値の種類)を高くする、または**書き込み時にランダムなサフィックスを付与して人為的に分散させる(Write Sharding)**手法が問われます。
グローバルテーブルの競合解決
SAP 試験のポイント
DynamoDB Global Tablesはマルチマスター(複数リージョンで同時に書き込み可能)な構成です。異なるリージョンで同じアイテムに対して同時に書き込みが発生した場合、Last Writer Wins(最後の書き込みが優先される)という単純なルールで競合解決されます。SAPでは、この方式がアプリケーション側で複雑な競合解決ロジックを組み込まない限り、意図しないデータ上書きが起こりうるというリスクを理解しているかが問われます。
設計上の落とし穴
「Global Tablesを使えば、グローバルなマルチリージョン書き込みは何も考えずに安全」という判断は誤りです。書き込みが同じアイテムに集中する可能性のある設計(例: 在庫カウンターの直接更新)では、Last Writer Winsによるデータロスのリスクを理解した上で、コンディショナル書き込みや、そもそも同一アイテムへの同時書き込みが起きない設計(リージョンごとに担当領域を分ける等)を検討する必要があります。
DAXとの組み合わせ(キャッシュ記事の補足)
- 読み取り負荷の高いDynamoDBワークロードでは、前の記事で解説したDAXと組み合わせることで、マイクロ秒単位の読み取りレイテンシを実現できる
まとめ
- SAA: RDS/Auroraの違い、DynamoDBの基本的なキー設計を理解する。
- SAP: リレーショナル/NoSQLの選定基準、ホットパーティション対策としてのキー設計、Global TablesのLast Writer Winsによる競合解決のリスクを踏まえた設計ができる。
次は **Redshift・Athena・Lake Formation(データレイク設計)**を見ていきましょう。