リレーショナルデータベース(RDB)とNoSQLの違い:データモデル・スキーマ・結合・一貫性・スケールを比較
関係データベース(リレーショナルデータベース、RDB)は、データを行と列からなる表で表し、SQLで問い合わせます。表どうしを結合した複雑な問い合わせができ、トランザクションのACID特性や、主キー・外部キーなどの制約で、データの整合性を厳密に保ちます。NoSQLは、関係データベース以外のデータベースをまとめて指す言葉で、キー・バリュー型、ドキュメント型、列指向型(ワイドカラム型)、グラフ型などがあります。多くは、データの形式を柔軟にし、複数のサーバに分散して規模を広げやすくする代わりに、結合のような複雑な問い合わせや、厳密な一貫性の一部をあきらめています。どちらが優れているというより、データの形と求める性質で使い分けます。
| 項目 | 関係データベース(RDB) | NoSQL |
|---|---|---|
| データの表し方 | 行と列からなる表(関係)。表どうしを共通の値(外部キー)で関連付ける | 型によって違う。キーと値の組、JSONのような文書、列の集まり、頂点と辺からなるグラフなど |
| スキーマ | 列の名前と型を前もって定義する。変えるときは、ALTER TABLEなどで表の定義を変更する | 前もって厳密に決めなくてよい(スキーマレス)製品が多く、項目の違うデータも同じ所に入れられる |
| 問い合わせ | 標準の言語であるSQLで、条件による検索、集計、並べ替えなどを宣言的に書ける | 製品ごとのAPIや問い合わせ言語を使うことが多い。SQLに似た言語を備える製品もある |
| 表の結合 | JOINで、複数の表を組み合わせた問い合わせができる | 苦手なものが多い。一緒に読むデータを1つの文書や値にまとめて持たせる設計が多い |
| トランザクションと一貫性 | ACID特性を満たすトランザクションで、複数の行や表の更新をまとめて確定できる | 1つのキーや文書の単位の更新にとどまる製品や、複製の間で更新がすぐにはそろわない結果整合性を許す製品が多い。ACIDのトランザクションを備える製品もある |
| 規模の広げ方 | 1台のサーバの性能を上げるスケールアップが基本。読み出しは複製に分散できるが、書き込みを多数のサーバに分けるのは難しい | データをキーで分けて、多数のサーバに分散するスケールアウトがしやすい |
| 正規化 | 正規化してデータの重複をなくし、更新時の異常を防ぐ | 読み出しの速さを優先して、同じデータを重複して持たせることが多い |
| 向いている用途 | 会計、在庫、受発注など、整合性が大事で、データの関係が複雑な業務のシステム | アクセスが非常に多いWebサービスのセッションやキャッシュ、形の決まっていないデータ、大量のログ、人や物のつながり(グラフ) |
数値は代表的な目安で、世代や製品によって異なります。