NoSQLとは?リレーショナルデータベース(RDB)との違いを徹底比較



NoSQLとは?リレーショナルデータベース(RDB)との違いを徹底比較

NoSQLという言葉をご存知でしょうか? ビッグデータ、IoT、SNSなどの流行とともに、データベースの世界でもリレーショナルデータベース(RDB)に代わるこの概念が普及しつつあります。NoSQLは変化する時代に柔軟に対応するデータベースといえるかもしれません。

そうはいってもデータベースは難しい!…と感じるかもしれない皆さんに、RDBMSとNoSQLの違いをとても簡単に解説します。

目次
  1. リレーショナルデータベース(RDB)とは
  2. NoSQLが誕生した背景
  3. NoSQLとは
  4. キー・バリュー型
  5. カラムストア型
  6. ドキュメント型
  7. グラフ型
  8. RDBMSとNoSQLの違い
  9. データの構造と参照
  10. トランザクション
  11. 処理速度
  12. 分散アーキテクチャ(分散データベース)
  13. おわりに

NoSQLという言葉をご存知でしょうか?ビッグデータ、IoT、SNSなどの流行とともに、データベースの世界でもリレーショナルデータベース(RDB)に代わるこの概念が普及しつつあります。NoSQLは変化する時代に柔軟に対応するデータベースといえるかもしれません。

そうはいってもデータベースは難しい!…と感じるかもしれない皆さんに、RDBMSとNoSQLの違いをとても簡単に解説します。

リレーショナルデータベース(RDB)とは

RDBMS例

長く業界を牽引しているデータベース方式です。

・データは2次元の表形式(テーブル)で格納される
・複数の表を結合して利用できる

というデータ構造を特徴とします。データベース設計の際には、データ定義や関係性の整理といったスキーマ定義を厳密に行い、複雑なデータ構造を可能にします。

RDBを管理するソフトウェアのことをリレーショナルデータベース管理システム(RDBMS)といいます。RDBMSを通して、SQLなど問い合わせ言語を利用してデータの選択・追加・更新・削除を行います。

代表的なRDBMS
Oracle, MySQL, Microsoft SQL Server, PostgreSQLなど

※RDBおよびRDBMSについてもっと知りたい方はこちらもご参照ください。
ゼロから始めるPHP講座Vol20 リレーショナルデータベースとRDBMS

NoSQLが誕生した背景

昨今Webサービスやシステムで扱うデータ量が増加しています。サービスには速いレスポンスが求められ、さらにデータ自体も構造化されたデータとは限らず、多様な時代になりました。

RDBMSでは、処理能力を向上させるためにハードウェアの補強(スケールアップ)を行うには限界があり、サーバーを増やす(スケールアウト)には高コストとなります。さらにRDBMS特有の厳密なスキーマ定義は、データの一貫性を保つには必要であるものの変更にはコストがかかるデメリットがあり、多様化するデータにも対応が難しくなりつつある状況でした。

NoSQLが提唱されたのは、それまで大きな問題とはならなかったRDBMSのコスト面、機能面での不足が見え始めた頃です。

NoSQLとは

mongodb

広義にはRDBMS以外のDBMSの総称です。事前にスキーマ定義が必要で変更にコストがかかるRDBMSに対し、非定型な構造を持つデータを柔軟に管理することができます。NoSQLのNoは”Notonly”の略で、SQLに”限定されない”言語やインターフェースを用います。

主に4つのタイプがあります。

キー・バリュー型

別名:キーバリューストア(KVS)
キーとバリュー(値)の組み合わせという非常に単純な構造でデータが格納されます。バリューにはバイナリデータや、リスト化されたデータを格納します。

代表的なNoSQL
Redis, Riak, Hibariなど

カラムストア型

別名:ワイドカラムストア型、カラム指向型、列指向型
列方向のデータのまとまりをファイルシステム上の連続した位置に格納し、効率的に利用できるデータベースです。

代表的なNoSQL
Cassandra、HBase、BigTable

ドキュメント型

キーに対し、XMLやJSONといった、データ構造を柔軟に変更できるドキュメントデータを格納します。

代表的なNoSQL
MongoDB、Couchbase

グラフ型

グラフ理論に基づいて、「ノード」「リレーション」「プロパティ」の3要素によってノード間の関係性を表現します。上記3タイプとは異なり関係性を持ちますが、RDBMSとは異なる表現であるためにNoSQLとして分類されています。

代表的なNoSQL
Neo4j

RDBMSとNoSQLの違い

48140f7a06d83b71fa117a4a6644887f_s

RDBMSとNoSQLそれぞれの特徴を踏まえ、違いを見ていきましょう。

データの構造と参照

RDBMS
複数の表と関係性を持ち、厳密なスキーマ定義を事前に行うことで複雑なデータ構造を実現しています。SQLなどのデータベース言語を用いて、複数の表から関係のあるデータを参照するなど高度な条件でのデータを閲覧可能です。

NoSQL
(グラフ型以外)データ型の定義、他のデータとの関係性がありません。単純な構造である分柔軟性が高いとも言えますが、関係性がないので複雑な参照には不向きです。

トランザクション

RDBMS
ACID(※)が実装されており、データの不整合が起こらない仕組みになっています。処理は”トランザクション”という単位で行われ、トランザクション中の全ての処理が正常に行わればトランザクション完了、処理の途中で何らかのエラーが起こればトランザクション前の状態に戻ります。このトランザクション中の処理は外部から閲覧できず、処理前か処理後の状態が閲覧できます。 参照や追加処理だけでなく更新や削除処理も頻繁に行われる場合、トランザクション処理の実装は大きな利点となります。

※ACID
原子性(Atomicity)、一貫性(Consistency)、独立性(Isolation)、耐久性(Durability)の頭文字を取ったもの。

NoSQL
一定の時間が経過した後結果的に一貫性が保証される結果整合性(Eventual Consistency)という考え方に基づいています。即座にデータの変更が反映されるとは限りません。
制限はあるものの、一部トランザクションを実装しているNoSQLもあります。

処理速度

RDBMS
システムの特性や規模にもよりますが、強固なトランザクション処理を行うため、それほど速くはないというのが通説です。

NoSQL
大量のデータを扱うサービスで参照や追加処理が主な処理である場合、高速となります。データ構造の特性上、更新や削除処理にはそもそも向きません。

分散アーキテクチャ(分散データベース)

分散アーキテクチャ(分散データベース)とは、複数の場所にデータベースを分散して配置する方式です。(例:部署や事業所ごとにデータベースサーバーを配置する)

この分散アーキテクチャには処理速度向上を図るとともに、トラブルや災害時の影響を軽減する目的があります。分散データベースの形態は、垂直分散型と水平分散型に大別することができます。このうち水平分散型は、処理の前後関係や主従関係などがない対等なシステム間で処理を分散する形態です。

RDBMS
主要なRDBMS製品では、レプリケーションというデータベースのコピーを持つ機能があります。トラブルや災害対策として大きな意味を持つ反面、運用上のコストや負荷が増加します。

NoSQL
結果整合性を持つため、水平分散が可能。データ量が増えても比較的簡単に設備を増強できます。

おわりに

以上簡単にご紹介しましたが、概要はつかめたでしょうか?まだまだ進化を続けるデータベース分野、今後の動向にも注目しましょう。

関連記事

murase miho
この記事を書いた人
murase miho
\無料体験開催中!/自分のペースで確実に習得!
オンライン・プログラミングレッスンNo.1のCodeCamp