MongoDBとは?
Mongo DBは、NoSQL(RDBMSではないデータベースシステム)の一種になります。
JSON形式でデータを管理しています。
C++で開発されています。
なぜMongo DBが生まれたのか?
Mongo DBはRDBMSの弱点を補うために生まれました。
昨今、ログやソーシャルゲームなどで大量のデータを保持する必要性が生まれてきました。
すると、RDBMSのように毎回 テーブルの定義を行う必要性があるデータ形式ではデータを保持するのが大変になります。
そこで、テーブル定義(スキーマ)を必要としないNoSQLが生まれてきており、その1種がMongo DBになります。
Mongo DBのデータ
「データベース > コレクション > ドキュメント」という構造でデータを管理しています。
わかりにくいので解説します。
ドキュメントとは、下記のような形でデータを保存するものです。
左側にkeyというデータを取り出すときの番号みたいなもの、
valueというところに実際のデータを配置します。
学校で言うと、keyが出席番号で、valueがその出席番号に紐づく生徒の情報に当たります。
コレクションは、このドキュメントを複数所有しているものになります。RDBMSでは、テーブルにあたります。
データベースは、このコレクションを複数所有している大本になります。

シャーディング
シャーディングとは、データを複数サーバーに分散展開させる仕組みのことです。
Mongo DBはこのシャーディングを使って、簡単にスケールアップ(CPUやメモリ・ストレージなどを高性能にすること)を行えます。
流れを確認します。
まずはシャーディングを行いたいコレクションを指定します。
指定後は、コレクション内のデータにシャードキーというものが付与されます。
シャードキーの範囲からある程度の塊をチャンクとします。(下記参照)

チャンクをそれぞれ別のサーバーに保管していきます。

このようにデータを複数サーバーに分散展開させる仕組みをシャーディングと呼びます。
メリット/デメリット
メリット
- keyで指定できることによる、高速なレスポンス
- シャーディングやレプリケーションにより、障害耐性が高い
デメリット
- データの整合性を保つのが大変
向いているシステム
下記のようなシステムに向いていると言われています。
- Webサイトのログ蓄積
- 負荷の低い読み取り・更新処理が大量にあるシステム(ゲームなど)
まとめ
いままでRDBMSばかりだったので、Mongo DBの仕組みが面白かったです。
もし誤りなどがあれば、コメントで指摘いただけると助かります。