SDN
← 概念一覧へ
データベース

SQLとNoSQLの選択

SQL or NoSQL

整合性・複雑なクエリ・成熟度が要るならSQL、柔軟なスキーマ・超大規模・超高スループットが要るならNoSQL。用途で使い分ける(両方併用も普通)。

キーポイント
  • SQLを選ぶ理由: 構造化データ、厳格なスキーマ、リレーショナルデータ、複雑なJOIN、トランザクション、明確なスケールパターン、成熟したエコシステム、高速なindex lookup。
  • NoSQLを選ぶ理由: 半構造化データ、動的/柔軟なスキーマ、非リレーショナル、複雑なJOIN不要、TB〜PB規模、データ集約的、超高IOPS。
  • NoSQL向きの例: クリックストリーム/ログの高速取り込み、リーダーボード/スコア、一時データ(カート)、頻繁にアクセスする『hot』テーブル、メタデータ/lookupテーブル。
  • 二者択一ではなく、システム内で両方を適材適所で併用するのが一般的。
トレードオフ

SQLは整合性とクエリ表現力に優れるが、超大規模な水平スケールに手間がかかる。NoSQLはスケールと柔軟性に優れるがトランザクション・JOINが弱い。トランザクションや複雑な関係が本質なら無理にNoSQLにせず、超大規模・高スループット・柔軟スキーマが本質ならSQLに固執しない。多くの実システムは両方を併用する。

判断の早見表

観点SQL向きNoSQL向き
データ構造構造化・スキーマ固定半構造化・柔軟スキーマ
関係性複雑なJOINが必要JOIN不要・独立した塊
トランザクション必須不要/弱くてよい
規模中〜大TB〜PB級の超大規模
スループット通常超高IOPSが必要
成熟度高い(ツール・人材豊富)用途特化
図を描画中...

NoSQLが特に輝くデータの例

System Design Primerが挙げる典型例:

  • クリックストリーム/ログ: 大量に高速で書き込む。あとで分析。
  • リーダーボード/スコア: 頻繁に更新される順位。
  • 一時データ: ショッピングカートのような短命データ。
  • hotテーブル: アクセスが集中する頻出データ。
  • メタデータ/lookupテーブル: 単純なキー引き。

これらは『複雑な関係よりも、速さ・量・柔軟さ』が大事なデータです。

つまずきポイント

  • 『SQL vs NoSQL』は宗教戦争ではなく適材適所。1つのサービスで、ユーザー情報はSQL・セッションはRedis(KV)・ログはNoSQL、と併用するのが普通。
  • 『流行っているからNoSQL』は危険。トランザクションが本質的に必要なのにNoSQLにすると、整合性を自前で実装する地獄になる。
  • 逆に『慣れているからSQL』に固執して、超大規模・高スループットで限界を迎えるのも避けたい。データの性質で選ぶ。

📊 図解

図解: 構造化度 × スケール特性で見るSQL/NoSQL

横軸=規模(中規模〜超大規模)、縦軸=スキーマの構造化度。構造化・中規模なら左上のRDBMS、柔軟・超大規模なら右下のNoSQL寄り、と位置づけで使い分ける。

図を描画中...

関連する概念

この概念で腕試し

関連する 5 問のクイズに挑戦できます。

クイズを解く