🗄️
【AWS】ふわっとDBを理解した気になってみたい
はじめに
MySQL、PostgreSQL、Aurora、DynamoDB、Redis...データベースの世界には多くの技術が存在し、それぞれに特徴があります。それぞれの専門用語がどのような関係性なのか私は 1 ミリも理解できていませんでした。この記事では、これらの技術がどのような関係性にあり、どんな場面で使い分けるべきかを体系的に整理します。
この記事で学べること
- データベース技術の全体像と関係性
- リレーショナル vs NoSQL の使い分け
- MySQL, PostgreSQL, Oracle などの RDBMS 比較
- AWS データベースサービスの位置づけ
- 実際の選択指針とメリット・デメリット
対象読者
- データベース技術の関係性を整理したい方
- クラウド時代のデータベース選択に迷っている方
- MySQL や PostgreSQL の違いを知りたい方
1. データベースの世界地図
データベースの大分類
現代のデータベースを大きく 2 つに大別します:
データ保存の手法
├── リレーショナルデータベース(RDBMS)
│ └── 表形式でデータを構造化、SQL使用
└── NoSQLデータベース
├── ドキュメント型(MongoDB)
├── キー・バリュー型(DynamoDB, Redis)
└── 列指向型(Cassandra)
リレーショナル vs NoSQL の根本的違い
項目 | リレーショナル | NoSQL |
---|---|---|
データ構造 | 固定スキーマ(表形式) | 柔軟スキーマ |
整合性 | ACID 特性で強い整合性 | 結果整合性 |
クエリ言語 | SQL(標準化) | 製品固有の API |
適用場面 | 金融、会計、在庫管理 | SNS、ログ、IoT |
ACID 特性とは
リレーショナルデータベースの強い整合性を支える 4 つの特性:
🔒 Atomicity(原子性)
- トランザクション内の処理は「全て成功」または「全て失敗」
- 例:銀行振込で「引き出し」と「預け入れ」が両方成功するか、両方失敗
🔄 Consistency(一貫性)
- データベースの制約やルールが常に保たれる
- 例:在庫数がマイナスになることを防ぐ制約
🚧 Isolation(分離性)
- 同時実行されるトランザクションが互いに影響しない
- 例:同時に残高照会しても、途中の振込処理が見えない
💾 Durability(永続性)
- 確定したトランザクションは障害があっても失われない
- 例:システム停電後も確定した取引データは残る
ACID vs NoSQL の設計思想:
- RDBMS: データの正確性を最優先(ACID 重視)
- NoSQL: パフォーマンス・可用性を優先(ACID を一部緩和)
どちらを選ぶべきか
リレーショナルを選ぶべき場面:
- データ間の関係が複雑
- データの整合性が重要(金融取引など)
- 複雑な検索・集計が必要
- チーム全員が SQL を知っている
NoSQL を選ぶべき場面:
- 大量のデータを高速処理したい
- スキーマが頻繁に変わる
- 地理的に分散したシステム
- シンプルなキー検索が中心
2. リレーショナルデータベースの基礎
リレーショナルデータベースとは
- 特徴: テーブル形式でデータを管理、SQL 使用
- 代表例: MySQL、PostgreSQL、Oracle
- 得意分野: 複雑なデータ関係、トランザクション処理
- 苦手分野: 大規模分散、頻繁なスキーマ変更
3. RDBMS 製品の関係性と選び方
MySQL ファミリーの関係性
MySQL生態系
├── MySQL(Oracle社)
│ ├── メリット: 学習コスト低、豊富なリソース、高速
│ └── デメリット: 機能限定、レプリケーション設定複雑
└── MariaDB(MySQL派生)
├── メリット: MySQL互換、オープンソース、活発開発
└── デメリット: MySQL比で知名度低い
MySQL vs MariaDB の選択指針:
- MySQL: 既存システムとの互換性重視、大手企業での実績
- MariaDB: 新規開発、オープンソース重視、最新機能
PostgreSQL の高機能性
PostgreSQL の特徴
├── 高度なSQL機能(ウィンドウ関数、CTE等)
├── 豊富なデータ型(JSON、配列、地理情報)
├── 拡張性(プラグイン、カスタム関数)
└── 厳密な標準SQL準拠
4. AWS データベースサービスの選び方
AWS のデータベースサービス体系
AWSデータベースサービス
├── リレーショナル(RDS ファミリー)
│ ├── RDS for MySQL/PostgreSQL/Oracle/SQL Server
│ └── Aurora(AWS独自のクラウドネイティブ)
├── NoSQL
│ ├── DynamoDB(キー・バリュー型)
│ └── DocumentDB(MongoDB互換)
├── インメモリ
│ └── ElastiCache(Redis/Memcached)
└── 分析
└── Redshift(データウェアハウス)
RDS ファミリーの選択
Amazon RDS(従来型エンジン)
RDS(Relational Database Service)
├── 対応エンジン
│ ├── MySQL
│ ├── PostgreSQL
│ ├── Oracle
│ ├── SQL Server
│ └── MariaDB
├── 特徴: 既存エンジンのマネージド版
└── 適用: 既存システムの移行、特定エンジン要件
Amazon Aurora(クラウドネイティブ)
Aurora の位置づけ
├── RDSの一部として提供
├── MySQL/PostgreSQL互換のみ
├── AWS独自の分散ストレージ
└── 適用: 新規開発、高可用性要件
RDS エンジン選択の指針
要件 | 推奨選択 |
---|---|
Oracle/SQL Server 必須 | RDS(従来型) |
最高パフォーマンス | Aurora |
コスト重視 | RDS MySQL/PostgreSQL |
既存システム移行 | RDS(同一エンジン) |
新規クラウド開発 | Aurora |
その他の AWS データベースサービス
DynamoDB
- 特徴: サーバーレス NoSQL
- 適用: セッション管理、IoT データ、ゲーム
ElastiCache
- 特徴: Redis/Memcached のマネージド版
- 適用: キャッシュ、セッション、リアルタイムランキング
Redshift
- 特徴: 列指向データウェアハウス
- 適用: BI、大規模分析、データレイク連携
5. NoSQL・キャッシュ戦略
MongoDB のドキュメント型メリット
ドキュメント型の特徴
{
"_id": "user123",
"name": "田中太郎",
"profile": {
"age": 30,
"interests": ["プログラミング", "読書"]
},
"orders": [{ "date": "2024-01-15", "amount": 1500 }]
}
メリット:
- JSON ライクな直感的構造
- スキーマレスで柔軟
- 水平スケールが容易
- アプリケーションとの親和性
デメリット:
- 複雑な関係表現が困難
- データ整合性が緩い
- メモリ使用量が多い
Redis vs ElastiCache
Redis(オープンソース)
Redisの特徴
├── インメモリキー・バリューストア
├── 豊富なデータ構造(リスト、セット、ハッシュ)
├── 永続化オプション(RDB、AOF)
└── Pub/Sub、Lua スクリプト対応
ElastiCache(Redis のマネージド版)
ElastiCache for Redis
├── Redis の運用自動化
├── 自動フェイルオーバー
├── 監視・アラート機能
└── VPC統合・セキュリティ強化
選択指針:
- Redis: オンプレミス、細かい制御必要
- ElastiCache: AWS 環境、運用負荷軽減重視
DynamoDB のサーバーレス特性
DynamoDB の独自性
DynamoDB の特徴
├── サーバーレス(容量計画不要)
├── 無制限スケール
├── 一桁ミリ秒のレスポンス
└── フルマネージド(運用作業ゼロ)
メリット:
- 運用負荷ゼロ
- 従量課金
- 高可用性標準
- Lambda との連携
デメリット:
- SQL が使えない
- 複雑なクエリ困難
- AWS 依存
- コスト予測困難
6. 大規模化への対応
データベースのスケーリング基本
- 垂直スケール: サーバースペック向上(簡単だが限界あり)
- 水平スケール: サーバー台数増加(複雑だが無限拡張)
- キャッシュ活用: Redis/ElastiCache で負荷軽減
- 読み書き分離: リードレプリカ(読み取り専用のデータベース複製)で読み取り処理を分散
分析用途での Redshift
- 特徴: 列指向ストレージ、並列処理、高圧縮率
- 得意分野: 大量データ集計、BI、レポーティング
- OLTP vs OLAP: リアルタイム処理 vs 分析処理の違い
まとめ
データベース技術は用途と要件に応じて適切に選択することが重要。
重要なポイント
- 銀の弾丸は存在しない - 要件に応じた適切な選択が重要
- 関係性を理解する - 各技術がどう関連しているかを把握
- メリット・デメリットを天秤にかける - 完璧な技術はない
- 運用を考慮する - 開発だけでなく運用面も重要
次のアクションアイテム
- もう少し DB 設計に踏み込んで考える
Discussion