MongoDBを使ってみよう

こんにちは、毒きのこです。

久々にお勉強的な内容の記事です。DB周りは面白いですよね。そんな僕が今回おすすめしたいのはMongoDB。(ちょい前ランサムウェアとか、MongoDB使うな的な記事が話題になってましたね。そこはまぁ一旦置いといて)

MongoDB、結構昔から色々使われてきてて僕もお世話になってたので、今回全く使ったことないって方にもその魅力が伝わるといいなと思い、概要を書いてみました。

MongoDB

概要

MongoDBは、オープンソースのドキュメント指向データベースである。C++言語で記述されており、開発とサポートはMongoDB Inc.によって行なわれている。 ※引用: Wikipedia

ふむ、とりあえずなんか凄そうな感じですね。

多分皆さんの中にもMySQLやPostgreSQLとかは聞いたことがあるという人も多いと思います。これらはいわゆるリレーショナルデータベースといって、簡単にいうと行と列で構成された表から情報を取得したり、また複数の表を結合(リレーション)することで複雑なデータを柔軟に扱うことが出来るオープンソースのデータベース管理システムです。

MongoDBはこうしたリレーショナルデータベースとは違い、いわゆるNoSQLと呼ばれるデータベースの1つで、有名どころでは他にもRedisやCassandraなんかがあります。

全容を説明してもあれなので、MongoDBだけに絞りますがMongoDBはその中でもドキュメント指向型のデータモデルに分類され、JSON(MongoDBではBSONという)やXMLの形でデータを管理します。

文字だけでズラズラと説明されてもMySQLとかとの差もわかりづらいし、何がいいのかさっぱりかもしれませんが、よく言われるメリットとしてはスキーマ定義不要という点です。登録したいデータの項目が定まってないような、またそうしたデータを大量に処理する場合に非常に向いています。データ構造がシンプルで非エンジニアでも読めるものになっているので、そうしたメリットもありそうですね。

主な機能

このMongoDB、主な機能としては「レプリケーション」と「シャーディング」があるのでそちらを軽く紹介します。

「レプリケーション」

MongoDBはMySQL等にもあるマスター/スレーブ方式のレプリケーション機能があります。

レプリケーションてなんだ?という人のために。
レプリケーションは簡単にいうと、AというサーバーとBというサーバーがあって、それぞれが同じネットワーク内、もしくは別の場所にあってもAの内容を常にリアルタイムにBに対してコピーが出来る、といった技術です。

また「レプリカセット」という方式が追加されており、これは従来からあるマスター/スレーブの上位機能のようなもので、現在はこちらが推奨されています。

簡単に説明すると、クラスタソフトウェアを使うことなくデータを複数ノードにレプリケーションすることが出来ます。プライマリ役とセカンダリ役、そしてプライマリ側に障害等が発生した場合に、セカンダリの中からプライマリに昇格するサーバーを選択する調停ノードと言われるアービター、この構成が一般的です。

実演してみれば簡単ですぐわかると思うのですが、実際プライマリに対しデータをinsertすると直ぐにセカンダリに反映され、またプライマリが何らかの理由で停止することになっても同じく即座にセカンダリがプライマリに昇格し、サーバーをストップさせることなくデータを得ることが出来ます。

シンプルにまとめましたが、これがレプリケーションのイメージです。

「シャーディング」

こちらも簡単にいうとデータを複数のサーバーに対して分散することです。水平スケーリングさせることで、CPUやI/O負荷を分散させる仕組みを持っています。凄い大雑把ですが図で書くと以下のようなイメージです。

シャーディングでは予め定めた規則によってデータの割り当てを行います。上図でいうと1〜100までの範囲に該当するデータはノード1に、101〜200はノード2へ、といったような感じで数値の範囲によってデータを割り当てを行います。

仕組みとしてはシャードキーというのが作成され、このシャードキーはレンジパーティション方式によってチャンクというものに分割されます。データはこれらチャンクのどれかにシャードキーのレンジをもとに属する形になります。

おわりに

なんか文章ばっかになってアレだったかもしれませんが、とりあえずMongoDBの概要でした。ちなみにサーバーがなくても色々インストールしてローカルで遊ぶことも出来るので、Mac持ってる人はMongoDBを入れてみて、適当にデータの出し入れとかして遊んでみるといいかもしれません。

それではいい開発ライフを〜

スポンサーリンク
336 x 280 レクタングル(大)
336 x 280 レクタングル(大)