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 チュートリアル

日記


  • 07:18 久しぶりに、地下コロッセオを擁する都市学園の夢を見た。30層ぐらいになるから、いつも迷子になるんだよなぁ。水泳大会がはじまる直前なのだが、売店で目当てのスポーツドリンク系飲料がなくて、しょうがなくレモン水とコーヒー牛乳を買った。 #
  • 07:19 おはようございます。 #
  • 07:28 @kis @kencyan0130 @yasu_kobayashi ほよー #
  • 07:30 偏頭痛。 #
  • 07:37 @takamadonodera はよはよー #
  • 08:14 あいむいーゔぉ #
  • 08:22 辻元清美さんが「勇退」になているなぁ #
  • 08:30 ファヴサイケデリコ #
  • 08:36 ぼくもせいしんがこどもなんでこどもてあてしきゅーしてください。 #
  • 08:37 天江衣手当 #
  • 08:37 マヴラブサイケデリコ #
  • 11:24 鮭ハラスメント #
  • 11:27 mongodbやっとるがな。 #
  • 11:28 MongoDBにしようと思ったのは、MongoHQの存在がでかいですね。メンテフリーが1番ですが、その上安いので。 #
  • 11:34 Twitterでは政治家とか有名な人が不用意な発言すると識者から猛烈なツッコミが入るが、俺はキチガイとして生暖かく見守られているので、全くツッコミされない。これも人徳というやつですかな。フォッフォッフォ #
  • 11:38 @chibakick SimpleDBとしか比較してないからわからん。つーか、まだ試用。自動分散かつクエリが豊富なのは、SimpleDBとMongoDBしかなかっただけ。複雑なことやってない分、他のNoSQLの方が速いんじゃないかなー? #
  • 11:40 @chibakick SimpleDBもAmazonにロックインされすぎるのがイヤというだけで外したので、選択肢がMongoDBしかなかっただけ。 #
  • 11:48 @chibakick kumofsでいんじゃない。速いし。 #
  • 13:34 コロッケを食うといつも『しあわせのかたち』の貧乏一家コントを思い出すなー。「ソースたぷたぷのやつだぞぉー」って奴。 #
  • 13:43 Rails3 から Metal なくなるって。ActionController::Metal 使えばクソ速いコントローラー作れる予定だって。QT Commit to rails's rails - GitHub bit.ly/dC44gQ #
  • 13:58 PublickeyはIT技術者向けニュースサイトとしてイケてるなー。フィードが全文配信じゃないことを除けば。 www.publickey1.jp/ #
  • 14:08 美声時計第2弾に井上麻里奈出るのか!買わねば! yaplog.jp/marinavi/archive/921 #
  • 15:23 「ソーシャルアプリ関連銘柄」って。 #
  • 15:25 あじぽくんちんぽくらみじあ #
  • 15:31 2dconcept - jQuery grids for your Ruby on Rails applications (jqgrid plugin) bit.ly/cmaNc9 #
  • 15:32 thoughtbot's squirrel at master - GitHub github.com/thoughtbot/squirrel #
  • 15:36 カエラもももも「こ・づ・く・り・しまっしょ♪」 #
  • 15:44 ほにほにいつもかーみあわない♪ #
  • 15:56 「頑なな心を持ち、傲慢に遊び呆けること」ってエントリを書こうと思ったけど、めんどくさいからやめた。 #
  • 16:37 rails 3.0.0.beta3 で devise の master が動かないのう。 #
  • 16:42 ぐへ、rails も master 使わないといけないのか。 #
  • 16:54 rails 3.0.0.beta3.1 作ってインストール中。 #
  • 17:29 rails, devise, mongoid それぞれ master で gem 作ってインスコしてる。 #
  • 17:49 ふむ。generator は動いた。 #
  • 18:01 git push origin master #
  • 18:19 MongoDB の _id ってどういう生成規則なんだろ。 #
  • 18:21 あー、疲れた。 #
  • 04:24 Mac OS X で MongoDB を動かす bit.ly/cGqc8l #
  • 04:51 ふいー、おしっこに起きたついでにブログを更新してしまったぜー。 #
  • 04:54 朝になったらもう1回アナウンスしとこ。 #
  • 05:01 さてもう一眠りするかいのう。 #
Automatically shipped by LoudTwitter