gihyo.jp » DEVELOPER STAGE » 連載 » Ruby Freaks Lounge » 第31回 RubyistのためのMongoDB入門(1)

Ruby Freaks Lounge

第31回 RubyistのためのMongoDB入門(1)

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

はじめに

ここ最近,NoSQLというキーワードが注目を集めています。

リレーショナルデータベースは,一般的にスケールアウト(サーバの台数を増やして性能向上を図る手法)が難しく,特に大規模サービスにおいてパフォーマンス上のボトルネックとなりえます。また,タグやグラフ構造のようなデータは関係モデルに馴染みにくいため,それらを扱う際にはアプリケーションコードもぎこちないものになりがちです。

これらの問題を背景に,何にでもリレーショナルデータベースを使うのではなく,用途に応じてKVSなど他のデータストアを選択する流れが広まりつつあります。このムーブメントがNoSQL(Not Only SQL)と呼ばれているものです。

今回は,NoSQLなデータベースの1つであるMongoDBをご紹介します。

MongoDBとは

MongoDBは高いパフォーマンスとスケーラビリティを特徴とするドキュメント指向型データベースです。GNU AGPLv3を採用したオープンソースソフトウェアで,開発母体である10gen, Inc.によって商用サポートが提供されています。

MongoDBの代表的な機能は以下のとおりです。

  • JSONをベースとしたスキーマレスなデータモデル
  • B-treeインデックスをサポートする高速なクエリ
  • Master-Slave Replicationに加え,Replica Pairsによるフェイルオーバー構成を選択可能
  • 分散データベースを実現するSharding
  • 分散処理機構MapReduce
  • バイナリデータを効率的に扱う仮想ファイルシステムGridFS
  • ストリーミングやロギングに適したCapped Collections
  • 各種言語用のドライバが提供されている(もちろんRubyも)

MongoDBは,いわゆるNoSQLデータベースの中でも機能が豊富な部類に入ります。リレーショナルデータベースの機能性とKVSの速度を合わせ持つことを狙いとして開発されています。

図1 MongoDBの位置付け

図1 MongoDBの位置付け

しかし,MongoDBは設計上の判断によりトランザクションやJOINをサポートしていません。Atomic Operationsやスキーマ設計の工夫によりある程度解決することはできますが,本質的にリレーショナルデータベースの機能が必要となる場面では力不足です。

それでは,MongoDBに適した分野は何でしょうか。いくつか事例を見てみましょう。

The Business Insider

The Business Insiderは,一日に60万以上のPVがあるサイトのバックエンドとしてMongoDBを採用しました。理由として「スケーラブル」「動的言語との相性の良さ」「スキーマ構成の柔軟さ」などが挙げられています。1つのMongoDBサーバでCPU利用率は5%程度に収まっているとのことです。

BoxedIce

BoxedIceは,サーバ監視システムで使用するデータベースをMySQLからMongoDBに移行しました。主な理由として管理面の問題が挙げられています。MySQLのレプリケーションは特に初回の同期が遅く,将来的なスケーリングにも不安があったため,NoSQLデータベースを比較検討した結果MongoDBを採用した顛末が綴られています。

また,同社のサービスはアカウントの管理や請求処理などには引き続きMySQLを使用しているそうです。

その他の事例

他にもSourceforgeやGitHub,New York TimesなどのサービスでMongoDBが採用されています。

これらの事例から,MongoDBは性能を要求される大規模なサービスでの使用に向いていると言えそうです。

基本的な使い方

MongoDBのインストールはとても簡単です。ダウンロードページからお使いの環境に合うものをダウンロード・展開してください。今回は記事執筆時点での最新安定版であるバージョン1.2.2を使います。

% wget http://downloads.mongodb.org/linux/mongodb-linux-x86_64-1.2.2.tgz
% tar xf mongodb-linux-x86_64-1.2.2.tgz

※アーカイブ名・ディレクトリ名は,環境に合わせて適宜読み替えてください。

アーカイブを展開した中のbinディレクトリに各種実行ファイルが収められています。まずはサーバ本体のmongodを起動しましょう。--dbpathオプションに適当なディレクトリを指定してください。そこにデータベースが作られます。

% cd mongodb-linux-x86_64-1.2.2/bin
% mkdir -p ~/tmp/mongodb
% ./mongod --dbpath ~/tmp/mongodb
Mon Feb 8 07:09:16 Mongo DB : starting : pid = 24059 port = 27017 dbpath = /home/ursm/tmp/mongodb master = 0 slave = 0 64-bit
Mon Feb 8 07:09:16 db version v1.2.2, pdfile version 4.5
Mon Feb 8 07:09:16 git version: 8a4fb8b1c7cb78648c55368d806ba35054f6be54
Mon Feb 8 07:09:16 sys info: Linux domU-12-31-39-06-79-A1 2.6.21.7-2.ec2.v1.2.fc8xen #1 SMP Fri Nov 20 17:48:28 EST 2009 x86_64 BOOST_LIB_VERSION=1_41
Mon Feb 8 07:09:16 waiting for connections on port 27017

別のターミナルで対話型シェルのmongoを起動します。オプションを指定しない場合はlocalhostのデフォルトポート(27017)に接続します。

% ./mongo
MongoDB shell version: 1.2.2
url: test
connecting to: test
type "help" for help
>

このシェルは実のところSpiderMonkeyをエンジンとしたJavaScriptコンソールです。計算からメソッド呼び出しまで一通りのことができてしまいます。

> a = 1 + 1
2
> 'hello'.toUpperCase() + a
HELLO2

著者プロフィール

浦嶌啓太(うらしまけいた)

(株)永和システムマネジメントサービスプロバイディング事業部所属,日本Hamlの会会長。Gentoo LinuxとKinesis Contoured Keyboardが好きなRubyプログラマ。BtoCサービスや業務システム,R&D案件の受託開発を日々行っている。

ブログ:http://d.hatena.ne.jp/ursm/
Twitter:http://twitter.com/ursm

コメント

コメントの記入

G-CLOUD

ピックアップ

エンジニアパワーアップ講座 ~システム基盤を活用するための基礎知識~

イマドキのエンジニアに要求されるさまざまな知識や能力。これらを効率よくキャッチアップしていくヒントをいろいろな視点から取り上げます。

LinuxCon Japan/ Tokyo 2010の歩き方

9月開催「LinuxCon Japan/ Tokyo 2010」の見どころと楽しみ方を,メインスピーカーの皆さんに自ら紹介していただきましょう。

自分で考えた家が現実に!? ~「3DマイホームデザイナーLS3」で実現する,普請道楽のススメ

「3DマイホームデザイナーLS3」を使えば,パズル感覚の簡単操作で理想の住まいを立体的にシュミレートすることができます。

手軽に使える専用サーバ「さくらのマネージドサーバ」を徹底チェック

1台のサーバを占有して使うことができる「さくらのマネージドサーバ」に新たに加わった「Core 2 Duoプラン」の特徴と魅力をお伝えします。

gihyo.jp インフラエンジニア情報局

ネットワークやITにかかわるあらゆる業種で必要とされるインフラエンジニアに向けた情報や魅力を多角的に紹介します。

その他の連載

なぜPHPアプリにセキュリティホールが多いのか?

「PHPのセキュリティは最悪だ」とよく聞きませんか? 本連載では,そのあたりの本当のところを探りながら,Webアプリケーションのセキュリティ対策について考えます。

Google Chrome版Firebug:デベロッパーツール取扱説明書

WebKitのWebInspector(デベロッパーツール)は飛躍的な進化を遂げています。多機能化するデバッガーの使い方とノウハウを詳細に解説します。

Ubuntu Weekly Recipe

Ubuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。

memcachedの活用と運用 実践編

本特集では,memcachedを利用している方に向けて,実践的なテクニックを伝授します。

LinuxCon Japan/ Tokyo 2010の歩き方

9月開催「LinuxCon Japan/ Tokyo 2010」の見どころと楽しみ方を,メインスピーカーの皆さんに自ら紹介していただきましょう。

機械学習 はじめよう

機械学習は,様々な分野で使われています。本連載では,「理論編」と「実践編」に分けて,機械学習の技術概念やコードの実装方法を紹介していきます。

Webデザイン最新トレンド ~イマドキUIのつくりかた

“今っぽいWebサイト”を作るには何が大切か? Webデザインのポイントと実際の作り方をサンプルをまじえて紹介します。

シモダテツヤのIT四コマふんわり劇場

IT界を揺るがす四コマ漫画家“シモダテツヤ”が,毎回楽しい四コマ漫画とふんわりしたコラムでお届けしていきます!

連載一覧

gihyo.jp

  • DEVELOPER STAGE
  • ADMINISTRATOR STAGE
  • WEB+DESIGN STAGE
  • LIFESTYLE STAGE
  • SCIENCE STAGE
  • NEWS & REPORT

書籍案内

  • 新刊書籍
  • 書籍ジャンル一覧
  • 書籍シリーズ一覧
  • 新刊ピックアップ
  • ロングセラー
  • 電脳会議

定期刊行物一覧

  • Software Design
  • WEB+DB PRESS
  • Web Site Expert
  • 組込みプレス

最近のコメント