NoSQLとは
NoSQLは、Not Only SQL( = SQL DBだけでない)の略。
NoSQLはデータベースの分類を指し、RDB以外のDBのことである。
近年、扱うデータ量の増加(ビッグデータ)とともに、NoSQLが使われるようになった。
一般的に、ビッグデータは数十テラバイトから数ペタバイト以上のデータを指す。
ビッグデータを扱うためには、RDBは不向き。
補足:
NoSQLは2000年以前から存在し、ビッグデータの流行とともに用途が見出されて、使われるようになる。
NoSQLのデータモデル例
NoSQLはRDBのようにテーブル構造に固定することなく、さまざまな形式のデータをそのまま格納可能。
-
キーバリュー型:キーとバリューをペアにして格納するデータモデル。
- バリューは単一の値だけでなく、 リストやセットなど複数の値を持つことが可能。
- プロダクト例:Redis、Amazon DynamoDB、Riak など
-
ドキュメント型:JSONやXML形式で記述されたドキュメントの形で管理するモデル。
- JSONをRDBで格納する場合、スキーマ定義が複雑になるが、ドキュメント型の場合JSONを直接格納できる。
- プロダクト例:MongoDB、CouchDB、MarkLogic、Cloud Firestoreなど。← MangoDBは世界で最も使われているNoSQL。
-
カラム型(列指向型):キーバリュー型にカラム(列)の概念をもたせたモデル。
- RDBはロー(行)単位で処理するが、カラム型DBはカラム(列)で処理する。列単位でまとまった処理があるシステムではRDBよりも高速に処理可能。
- 行単位で集計する処理が多い、情報分析システムなどで活用。ビッグデータ分析用のミドルウェアと併用されることが多い。
- プロダクト例:Google Big Table、Cassandra など
-
グラフ型:データとデータ間のつながりを管理するモデル
- グラフ理論を元にしたデータベースで、データをグラフ構造で格納。
- FacebookなどのSNSのユーザー同士のつながりなど、ネットワーク状のデータを格納するのに向く。
- プロダクト例:Neo4j など
括弧はプロダクト例。
RDBに対するNoSQLのメリット
1. 高速処理
RDBに対して、NoSQLは高速。
**RDBはデータ量が増えすぎすると、低速になる。**そのため、RDBはビッグデータを扱うのに向いていない。
対して、**NoSQLはシンプルな作りにより処理が高速というメリットあり。**例えば、RDBではテーブル間の整合性を保つためにトランザクションを行っているが、NoSQLではトランザクションが存在しない。
2. システムの拡張・分散性
RDBのシステムは、原則として一台のサーバーで動作するように設計される。
近年、データ量の増加により、RDBのような1台のデータベースサーバーだけでは処理性能が足りない。
データベースのシステムの処理を高速化させるためには、対応するサーバーの数を増やせば良い(= スケールアウト)。
NoSQLはスケールアウトしやすく、システムの拡張・分散性が高いというメリットあり。
RDBに対するNoSQLのデメリット
1. 機能が豊富ではない
SQLが集合論に基づいている完成度の高いデータベース言語であるのと同時にRDBMSは豊富な機能を備えている。一方でNOSQLは主に「書き込み」「読み込み」のシンプルな動作をするにすぎない。「結合(Join)」をはじめとする様々な演算子も通常はサポートされていない。
2. データの整合性が緩い
RDBMSはデータの更新をかける際には「排他制御」の仕組みを備えている。しかしNOSQLはこの考え方を緩めている。
ビッグデータの環境では多数の人が同時にアクセスを行う都度に排他制御を実施していては大量に速く処理するのは難しくなってしまう。速さを優先するために「データの整合性は、全てのアプリケーションにおいて必ずしも必要であるわけではない」とする考え方である。一時的にデータの整合性が保持されない状態を許容するが結果的に整合性が取れていればいいという考えである。
NoSQLの活用例
- 追加処理やデータ参照が多いシステム(ゲームやIoTシステムなど)
- 将来的な拡張が見込まれるデータベース
- 非構造データのデータベース
- NoSQLデータベースは、スキーマレスな性質のため、半構造化データ(JSONなど)および非構造化データ(テキスト、画像、音声データなど)に向く。
補足:世界のデータベースエンジンランキング(2022/5 時点)
Rank | DBMS | DB Model | Score |
---|---|---|---|
1 | Oracle | Relational | 1262 |
2 | MySQL | Relational | 1202 |
3 | Microsoft SQL Server | Relational | 941 |
4 | PostgresSQL | Relational | 615 |
5 | MangoDB | Document | 478 |
6 | Redis | Key-value | 179 |
7 | IBM Db2 | Relational | 160 |
引用:https://db-engines.com/en/ranking