MongoDBでゆるふわDB体験

第1回 使ってみようMongoDB

この記事を読むのに必要な時間:およそ 4 分

MongoDBの思想

MongoDBの思想を紹介するため,公式ドキュメントからMongoDBの開発元である10gen社CTO兼共同創業者Eliot Horowitzの言葉を引用します。

MongoDBは研究室の中で設計されたわけではありません。私たちは,大きなスケールの,高可用性を備えた,堅牢なシステムを構築した経験をもとにMongoDBを作りました。ゼロからはじめたわけではありません。何が壊れているのかを見つけ出し,それに取り組むという方法を取ってきました。

私はMongoDBについて,次のように考えています。もしMySQLのデータモデルをリレーショナルベースのものからドキュメントベースのものへ変更したら,管理が容易な高速な埋め込みドキュメントや,スキーマレスデータベースやアジャイル開発手法,ジョインが重要でなくなることによって容易になるスケールアウトなど,たくさんの素晴らしい機能を得るでしょう。

リレーショナルデータベースには,素晴らしい機能がたくさんあります。インデックスや,ダイナミッククエリや,アップデート機能など,枚挙に暇がありません。私たちはそこは大きく変えないようにしました。たとえば,MongoDBでインデックスを設計するときの手法は,MySqlやOracleでの手法と全く同じです。単に,埋め込みフィールドにインデックスを張るという新しい選択肢が与えられるのです。

MongoDB Docs-Japanese:はじめに

MongoDBはこのような思想に基づき,今日も開発が続けられています。

MongoDBの特徴

MongoDBの特徴として,以下のようなものが挙げられます。

スキーマレスであるドキュメント指向データべースであること
  • データはスキーマレスなドキュメントで格納され,任意のフィールドを好きなときに追加できる
  • KVSでは苦手なValueを検索の条件としたり,ソート・集計を実現できる
スケーラビリティに関する機能を標準機能として備えていること
  • レプリケーション機能,オートフェールオーバー機能を備えている(Replica Sets)
  • レンジパーティション機能,オートバランシング機能を備えている(Sharding)
RDBと比較してRead/Writeの性能が高い
  • トランザクション・リレーションを制限した結果,KVSに近いパフォーマンスを出せる
開発のしやすさ
  • どのような環境でもパフォーマンスが出るように,ネイティブソケットプロトコルを使用したドライバを主要なプログラミング言語で開発元が提供している
  • RESTインターフェイスを標準で備えており,Webで広く普及しているJSONを使用してデータ送受信ができる

このような特徴があるMongoDBは,どのようなケースで有効に使用できるのでしょうか。

MongoDBの使いどころ

MongoDBは先ほど紹介した特徴から,以下のようなケースで有効です。

Webサイトの操作データログの蓄積

MongoDBをログストアにする事例はすでにWeb上に多く見られます。データサイズの制限があるコレクションであるCapped Collectionや一定期間が経過すると削除されるTTL Collectionといった機能が活用されています。またアプリによって出力フォーマットが違うログを一括して扱う場合,スキーマレスであることが有効に働きます。

アドホックなフィールドを検索対象とするようなコンテンツ

たとえば,ユーザによって独自項目を定義できるようなシステム(アンケートシステムなど)の場合,スキーマレスであると柔軟に対応できます。また,それぞれの独自項目を検索対象にすることも可能です。

ソーシャルゲーム

軽いRead/Writeが大量にあるようなソーシャルゲームにはMongoDBは向いていると言えます。スケーラビリティ機能とレプリケーション機能も用意されています。

逆に以下のケースで適用したいというなら,もう一度検討してください。

銀行や会計システムのような,複雑なトランザクションに重きを置くシステム

複数のトランザクションを必要としたクエリが必要になる場合,MongoDBは向いていません。ただし,1つのドキュメントに対するAtomicな操作はサポートしていますので,ネストしたドキュメントを使用して設計を工夫することにより対応可能になります。

レガシーな夜間バッチの負荷がかかるビジネスインテリジェンスシステム

MongoDBはバッチ処理が不可能でこそないですが,リアルタイム処理のほうが得意です。

SQLを必須としているシステム

MongoDBはSQLをサポートしていません。⁠NoSQLなので)

それでは次に,実際にMongoDBをインストールして使ってみましょう。

著者プロフィール

藤崎祥見(ふじさきしょうけん)

野村総合研究所 OpenStandia所属。オープンソースのR&Dとセミナー講師を担当。

Debian,Ubuntu,Liferayのコミュニティで活動した後,MongoDBの翻訳に関わり,丸の内MongoDB勉強会を始める。

実家がお寺で,住職の資格を所持する坊主系エンジニア。

Twitter:@syokenz


渡部徹太郎(わたなべてつたろう)

野村総合研究所 OpenStandia所属。オープンソースを使ったSIやサポートの業務に従事。

藤崎と共同で丸の内MongoDB勉強会を始める。

趣味は自宅サーバ。好きなものはLinuxとRuby。

Twitter:@fetarodc