「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の実用例としてはソーシャルゲームに使われているそうだ。
コメント