スケーリング
- RDB はサーバーのスペックを上げる「スケールアップ」が基本。台数を増やすのが難しい
- NoSQL はサーバーの台数を増やす「スケールアウト」が得意。データを分散配置しやすい構造になっている
DBの拡張性
- RDB はSQLがあるので、後から「こういう条件でも検索したい」に対応しやすい(JOIN・サブクエリ等)
- NoSQL はアクセスパターンに最適化して設計するため、想定外のクエリが来ると対応コストが高い
設計難易度
- RDB は正規化のルールに従ってテーブルを分割すればよく、設計の指針が明確
- NoSQL は「どのようにデータを読むか」から逆算して設計するため、要件理解が浅いと破綻しやすい
どのような基準で選定するとよいか
| 観点 | RDB | NoSQL |
|---|---|---|
| スケーリング | 低(垂直スケール中心) | 高(水平スケールが得意) |
| DBの拡張性 | 高(SQLで柔軟にクエリを追加できる) | 低(アクセスパターンを事前に決める必要がある) |
| 設計難易度 | 低(正規化の原則に従えばよい) | 高(非正規化やアクセスパターン設計が必要) |
| ユースケース | 複雑な条件で検索する場合 システム要件が増える可能性が高い場合 データの整合性をDB側で制御したい場合 比較的厳密なトランザクションが欲しい場合 | とにかくレスポンスを求める場合 大量のデータを制御する場合 テーブルの設計を変更する予定がない場合 検索条件が比較的簡単 キャッシュとして使う場合(DynamoDB) |