Mac OS X で MongoDB を動かす

MongoDB は、いわゆる NoSQL データベースの一つです。
公式サイトの文言をそのまま信じるなら、

  • ドキュメント指向ストレージで
  • インデックスをサポートしていて
  • レプリケーションができて高可用性に富んでいて
  • 自動データ分割してくれて
  • 多彩な検索クエリが使えて
  • 更新がアトミックで速くて
  • Map/Reduce も使えたりしちゃったりして
  • GridFS っていう何でもつっこめるファイルシステムを使っていて
  • 商用サポートもある

といった特徴を持つプロダクトです。

私は、自動分散と、単純なKVSにはない豊富な検索クエリに惹かれて、使ってみようかと思いました。インデックスがあるのもいいですね! というか、MongoHQ ですよ! Amazon EC2 のサーバーとつなげられるらしい、自動スケールアウト管理不要サービスです。最初無料からスタートして安いんですよねー。これが決め手です。


では、インストールしましょうか。幸いなことに macports にありました。楽ちんですね。

$ sudo port install mongodb

今コマンド実行した?早速実行した?はい、君、終了〜。なんと、依存ライブラリ boost のビルドに6時間、mongodb のビルドに1時間かかってしまうのです!(MacBook (Early 2008) 調べ) 会社の人は退社間際、自宅の人は出社前・寝る前にやるのが吉ですね。


起動に必要なディレクトリとファイルを作っておきましょう。

$ sudo mkdir /var/lib/mongodb
$ sudo touch /var/log/mongodb.log

ディレクトリパスはお好みで。macports なので /opt/local/ を頭につけたい人もいるかもしれませんね。


起動は、

$ /opt/local/bin/mongod --dbpath /var/lib/mongodb --logpath /var/log/mongodb.log

ログを追記式にしたいときは、--logappend を加えて下さい。付けないと、起動毎にログがリフレッシュします。私は、開発環境なので、ディスク占有しない方がいいかなー、と思って外しました。

停止は、

$ kill -2 (プロセスID)
または、
$ kill -15 (プロセスID)

です。
マニュアルによると、SIGINT(2) か SIGTERM(15) で停止だそうです。CTRL-C とか kill -9 とかは厳禁ですよ!


Mac 起動時に自動でスタートして欲しいですよね? OS X なので launchd/launchctl で起動・停止するように設定します。
/Library/LaunchDaemons/org.mongodb.mongod.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Label</key>
        <string>org.mongodb.mongod</string>
        <key>RunAtLoad</key>
        <true/>
        <key>ProgramArguments</key>
        <array>
                <string>/opt/local/bin/mongod</string>
                <string>--dbpath</string>
                <string>/var/lib/mongodb</string>
                <string>--logpath</string>
                <string>/var/log/mongodb.log</string>
        </array>
</dict>
</plist>

launchd/launchctl は停止時は SIGTERM を送るそうなので安心ですね。

オーナーやパーミッションも変更しておきましょう。

$ sudo chown root:wheel org.mongodb.mongod.plist
$ sudo chmod 644 org.mongodb.mongod.plist
$ ls -l org.mongodb.mongod.plist
-rw-r--r--  1 root  wheel  496  6  2 04:30 org.mongodb.mongod.plist

これで(RunAtLoad が true なので)次回Macの起動時に自動で起動されるはずです。


手動で起動・停止するのは、

$ sudo launchctl load /Library/LaunchDaemons/org.mongodb.mongod.plist
$ sudo launchctl unload /Library/LaunchDaemons/org.mongodb.mongod.plist

です。plist はフルパスじゃないといけませんよ。


うまく起動したら、チュートリアルを見ながら、クライアントインターフェイスで遊んでみましょう。

$ mongo


それでは、今日はここまで!


続き書きました → ハンズオンで分かる MongoDB チュートリアル