NoSQLとは?NoSQLデータベースの種類と特徴

DB

NoSQLデータベースとは?

関係データベース(リレーショナルデータベース)以外のデータベースのこと。
SQLは関係データベース用の言語であることから「SQL=関係データベース」と捉え、逆に「NoSQL=非リレーショナル」といった認識。
※人によってNoSQLの捉え方が「non SQL」「not only SQL」など少し異なる場合もある。

関係データベース(リレーショナルデータベース)とは?
行と列から成る、表形式のテーブル型データベースのこと。
例:MySQL、PostgreSQL、Oracle

NoSQLデータベースの特徴

柔軟性が高い

何を基準に柔軟性が高いと言っているかというと、関係データベースシステム(以降、RDBMS)と。
RDBMSでは、テーブルのカラムや格納できるデータ型などを最初に定義し、それに合致したデータしか格納できない。一方、NoSQLは各データに合わせて変更できる。

その結果、NoSQLデータベースは、半構造化データ・非構造化データの扱いに適していると言われる。

構造化データ・非構造化データ・半構造化データとは?
構造化データ:構造が決まっているデータ。RDBMSで扱えるデータはコレ。Excelなどの表データも該当する。
非構造化データ:データ構造がないデータ。画像・メールなど規則性のないテキストが該当する。
半構造化データ:大体データ構造は決まっているが、柔軟性をもつデータ。

水平スケールアウトの容易性

分散システム上で大規模拡張できるように設計されています。

水平スケーリングとは?
サーバーの数を増減させることで、性能向上・負荷への耐久力をアップさせる方法。サーバー数を増やすことをスケールアウト、減らすことをスケールインという。
一方、垂直スケーリングは、部品を変えるなど機器自体の性能を高めて、性能や負荷への耐久力を向上させる。

NoSQLデータベースの種類

これまでで4種類ほどのNoSQLデータベースが登場している。
表形式のテーブル型でなければNoSQLデータベースなので、今後も新しい種類が増えるかも?

キー・バリュー型データベース

データをキー・バリューの形で格納するデータベース。水平スケーリングもしやすい。

  • 適する用途:大量のデータを保存する必要がありつつ、その取得に複雑なクエリを実行する必要がない場合。例:ユーザー設定の保存、キャッシュ
  • DB例:redis
// redis
SET server:name "taro" // nameキーにバリューをセット
GET server:name // "taro" nameキーのバリューを取得
EXISTS server:name // 1 存在するキー
EXISTS server:wow // 0 存在しないキー

ドキュメントデータベース

JSONオブジェクトのようなドキュメントにデータを保存するデータベース。コードで使用するオブジェクトに合わせて、保存するデータ構造を決めることができる。水平方向のスケールアウトもしやすい。

  • 適する用途:時間の経過とともにデータが変化する可能性がある場合。例:カタログ、Eコマース
  • DB例:MongoDB
// MongoDB
// usersコレクション(usersデータのまとまり)にドキュメント(1userのデータ)挿入
db.users.insertOne(
   { name: "taro", birth_day: { year: 2000, month: 12, date: 24 }, favorite: ["banana", "car", "chocolate"] }
)
// usersコレクションから任意のドキュメント取得
db.users.find({name: "taro"})

カラム(列)指向型データベース/ワイドカラムストア

行ごとに任意のカラム数を持つことができるデータベース。列方向の処理が高速。
Googleが出したBigtableの論文が元になっている。

  • 適する用途:大量のデータを保存する必要があり、クエリパターンが予想できる場合。例:IoT、CRM
  • DB例:Cassandra, HBase

グラフデータベース

ノードとエッジにデータを保存する。ノードは物事に関する情報を保存する一方、エッジはノード間の関係の情報を保存する。

  • 適する用途:関係を横断した処理を行う必要がある場合。例:ソーシャルネットワーク、不正検出、推奨エンジン
  • DB例:Neo4jJanusGraph

グラフと言っても、線グラフ・円グラフなどではなく、グラフ理論のこと。
ノードとエッジというのは、グラフ理論における概念で、図で表すとこんな感じ。

まとめ

NoSQLと言っても、その種類や特性は様々で、もし採用するときは適性を見極める必要があるなと思った。また、NoSQLの長所である柔軟性はメリットにもデメリットにもなりうるから、RDBMSともうまく使い分けていくのが大事そう。

タイトルとURLをコピーしました