MongoDB(NoSQL)とは何か?

MongoDB-logo DB
スポンサーリンク

「NoSQL」というDBを聞いたことがあるだろうか?
この一種として「MongoDB」というものがある。
これまでの「Oracle」や「Postgres」のようなRDBとは一線を画す画期的なDBがあること知り、そして経験したので、今回は概要的な観点でまとめていこうと思う。

 

概念

「MongoDB」は「Oracle」や「Postgres」のような「RDBMS(RDB:リレーショナルデータベース)」ではなく、いわゆる「NoSQL」と呼ばれる「ドキュメント指向型」データベースに分類されるものである。
データ格納の際には、RDBのようにレコードを「テーブル」に格納するのではなく、
「ドキュメント」と呼ばれる構造的データをJSONの形で「コレクション」として管理する。
「MongoDB」はJSON形式で保存・管理できるDBと解釈して良いと思う。

NoSQLとは

一般には「Not only SQL」の略だそうだ。
RDB以外のDBは総省するおおまかな分類らしい。

NoSQLの種類としては以下の4種がある
・キーバリュー型
・カラム指向型
・グラフ指向型
・ドキュメント指向型

MongoDBはこの内の「ドキュメント指向型」というわけだ。

 

特徴

NoSQLを使用するメリット・デメリットにはこんなものがある

1, JSON形式でデータを保存できる

これが一番最初に頭に浮かぶし、わかりやすいだろう。
フロント~サーバー間のデータ通信はこのJSON形式で行われることが多いのだが、この形式のままDBに保存できるというのだから驚きだ。

{
  id: 000,
  name: xxx
}

みたいな感じでデータを保管できる

 

2, 動的なスキーマ設定ができる

RDBでは各TBの構造をしっかりと定義してから開発に取り掛かるのだが、MongoDBは後からでも構造を容易に変更可能

 

3, レプリカセットがある

個人的には聞き慣れない単語だが、レプリカセットという機能を持っているようだ。
レプリカセットとは3台以上のサーバーを使用しデータを同期させる機能。これにより障害発生時の迅速な復旧を可能にしている。

 

4, シェーディング機能

これも聞き慣れないが、端的に言えば負荷分散の仕組みだ。
水平分散といって、データを各サーバーに分けて扱うことで負荷を分散させることができるようだ。

 

5, 高速で動作する

DBは通常、扱うデータが増えればそれだけ動作が重くなるものだが、MongoDBは大量のデータも高速で処理できるそうだ。

 

6, SQLは使用できない

SQLは使用できない データを取得する際にSQLを使用しないので、RDBで行うような「GROUP BY」や「SUM」などの集計関数は使えない
普段RDBを使う開発者にとっては少し戸惑うところだろう。
私もそうだった…

 

7, トランザクションは使えない

トランザクションは使えない 一貫性がないのもRDBと違うところの一つ。
データを更新するとき、他の関連するデータとの矛盾が発生し得る。
RDBで言うところの正規化がされていないデータを扱う感じに似ている。

 

こんなところだろうか

 

まとめ

NoSQLを利用するメリットとしては、
・大量のデータを素早く処理できる
・柔軟性や拡張性を持たせられる
といったところだろう。

RDBはデータの一貫性(整合性)を重視するのに対して、NoSQLは処理速度を重視している。
どちらを選ぶかはケースバイケースになる。

NoSQLの実用例としてはソーシャルゲームに使われているそうだ。

 

 

コメント

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