RDBとは一味違う!?MongoDBの特徴 | SiTest (サイテスト) ブログ

メニューボタン閉じるボタン

RDBとは一味違う!?MongoDBの特徴

データベースという言葉を聞くと先ず思い浮かべるのはSQL文からデータを操作するRDBではないでしょうか?
グラッドキューブではMySQLが主流でしたが、用途に応じてドキュメント型データベースであるMongoDBを利用しています。

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

Mongoはすごく雑な言い方をするとJSONを積み重ねたKey-Valueストアです。
その最大の特徴はスキーマがないことにあります。

通常ならばいくつかの列をあらかじめ設定しそこに入るデータの型もあらかじめ決めておく必要があります。
ところがMongoDBは決まった列が存在しません。
そのためデータの長さや型など何が入っているかわからないです。

唯一_idというカラムだけがどのデータにも入るようになっています。
_idはデフォルトではオブジェクトIDという一件ランダムな値を持ち、データが作られると必ず挿入されます。

ただし、この_idですら決まった形を持たないので変更可能です。

レプリケーション

MongoDBを使っていて驚いたのが、レプリケーションが非常に簡単なことです。
マスタースレイブ構成なら2台起動時にmaster slaveを指定するだけで実装可能です。

masterなら

mongod --master --dbpath /mongo/main

slaveなら

mongod --slave --source [ホスト名]:27017 --dbpath /mongo/sub

みたいな感じです、slaveは複数立ち上げることができます。
slaveは書き込みの遅延を発生させることもでき、万が一の時データの復旧等に使えます。
設定方法は

config = rs.conf()
config.members[0].priority = 0
config.members[0].hidden = true
config.members[0].slaveDelay = 3600
rs.reconfig(config)

こんな感じのコマンドをmaster側で設定するだけです。

バックアップが用意なだけでなくフェイルオーバー機能で片方が動作不良に陥った時正常なデータベースがフロントに立って稼働することもできます。
こちらも起動コマンドで指定するだけなのですが、マスタースレイブ構成とは違い3台データベースを用意する必要があります。
3台目のデータベースをarbiterと呼び、どちらのデータベースがprimary(書き込み担当)なのか決定しています。

primaryは

mongod --pairwith [secondaryのホスト名]:27017 --arbiter [arbiterのホスト名]:27017 --dbpath /mongo/primary

secondaryは

mongod --pairwith [prumaryのホスト名]:27017 --arbiter [arbiterのホスト名]:27017 --dbpath /mongo/secondary

arbiterは

mongod  --dbpath /mongo/arbiter

で設定完了です。

シャーディング

レプリケーションで可用性の確保はできました。
続いて複数台に読み込みを分散させることでパフォーマンスを向上させるシャーディングです。

MongoDBにはバランシングという機能が備わっており、シャーディングしたサーバー間のデータが偏らないよう調整を行ってくれます。
これによって複数台で動いていることを意識しなくともシャーディングで負荷を分散できます。

シャーディングには3種類のサーバーが必要になります。

シャードと呼ばれるデータを格納するサーバー
ちなみに起動コマンドは

mongod --shardsvr --dbpath /mongo/node0(複数設定します)

configサーバーと呼ばれるシャーディングのデータを管理しているサーバ
こちらの起動コマンドは

mongod --configsvr --dbpath /mongo/config

mongosサーバーと呼ばれるルーティング用のサーバー
起動コマンドは

mongos --configdb [configサーバのホスト:ポート]

mongosサーバーに接続しmongoシェルを起動します。
使用するデータベースを作成し

sh.enableSharding(データベース名)

のコマンドをadminDBから実行します。

次にsh.shardCollection(main.user, {uid: 1})
とうちシャード化するコレクションを指定します。

これで各データは移動を始め適切なシャーディングを行なうことができます。

まとめ

今回はMongoDBのユニークな機能としてレプリケーションとシャーディングを主に紹介しましたが、
コレクションに上限を設けるCapped Collectionや集計処理のAggregation、MapReduceといった様々な機能があります。
またメリットが目立ちますが、デメリットもそれなりにあるので今後そういったデメリットについても触れていきたいと思います。

今すぐお気軽に
ご相談ください。

0120-315-465

(平日 10:00~19:00)

今すぐお気軽に
ご相談ください。

0120-315-465

(平日 10:00~19:00)

グラッドキューブは
「ISMS認証」を取得しています。

認証範囲:
インターネットマーケティング支援事業、インターネットASPサービスの提供、コンテンツメディア事業

「ISMS認証」とは、財団法人・日本情報処理開発協会が定めた企業の情報情報セキュリティマネジメントシステムの評価制度です。

いますぐ無料で
お試しください。

SiTest の革新的な機能を
お試しいただけます。
利用規約

お名前【必須】
メールアドレス【必須】
電話番号【必須】