データの形と、どう読み書きするかで選ぶ。迷ったらまずRDB。特定の用途に強いDBを、必要な部分にだけ組み合わせる。
| 種類 | 特徴 | 向く用途 | 苦手なこと | 例 |
|---|---|---|---|---|
| RDB | 表とSQL、トランザクション、JOIN | 業務データ全般、お金や在庫 | 書き込みの水平分散 | MySQL、PostgreSQL、Aurora |
| KVS | キーで1件を超高速に読み書き | キャッシュ、セッション、カウンタ | 複雑な検索・集計 | Redis、DynamoDB |
| ドキュメントDB | JSONをそのまま保存、形が自由 | 項目がまちまちなデータ、CMS | 複数の文書をまたぐJOIN | MongoDB、DocumentDB、Firestore |
| ワイドカラム | 大量の書き込みを多数のノードに分散 | ログ、IoT、時系列の大量データ | アドホックな検索 | Cassandra、Bigtable |
| グラフDB | ノードとつながりを保存し、たどる | SNSの関係、推薦、不正検知 | 大量の集計 | Neo4j、Neptune |
| 時系列DB | 時刻つきの数値を効率よく保存・集計 | メトリクス、センサー | 一般的な業務データ | Timestream、InfluxDB、Prometheus |
| 検索エンジン | 全文検索、あいまい検索、集計 | 検索窓、ログ分析 | トランザクション、正確な更新 | OpenSearch、Elasticsearch |
| NewSQL | SQLとトランザクションを保ったまま水平分散 | RDBでは収まらない超大規模 | コスト、運用の難しさ、レイテンシ | Spanner、TiDB、CockroachDB、Aurora DSQL |
| 選ぶときの質問 | 考え方 |
|---|---|
| 強い整合性が必要か | お金・在庫・予約ならRDB(またはNewSQL) |
| アクセスパターンは決まっているか | キーで引くだけならKVS(DynamoDBは事前にアクセスパターンを設計する) |
| 規模はどれくらいか | 多くの場合はRDB+リードレプリカ+キャッシュで足りる。NewSQLは本当に必要なときだけ |
| 誰が運用するか | マネージドサービスを選び、チームが運用できる数に絞る |
| 検索や分析は別か | 本体はRDB、検索はOpenSearch、分析はデータウェアハウスに同期する |
「流行っているから」ではなく、整合性・アクセスパターン・規模・運用体制で選ぶ。
面接ではこう答える
データの形と読み書きのパターンで選びます。お金や在庫など強い整合性が必要な業務データはRDBが基本で、キーで高速に引くキャッシュやセッションはKVS、形がまちまちなデータはドキュメントDB、つながりをたどるならグラフDB、メトリクスは時系列DB、全文検索は検索エンジンです。NewSQLはRDBで収まらない規模で検討します。実際にはRDBを中心に、用途ごとに組み合わせます。
SREとの関わり新規サービスの技術選定、DBの増えすぎによる運用負荷の判断、移行計画に関わります。