RubyとMongoDBとか RSSフィード

2011-02-01

MongoDBのインストール:Gentoo Linuxの場合

~x86マスクされていますので、

$ ACCEPT_KEYWORDS=~x86 sudo -e emerge mongodb

とでもしてください。オプションは特にありません。

あんまり更新されていないらしく現時点では 1.6.0 が最新です。

もっと新しいバージョンを overray するか諦めてバイナリインストールすると良いと思います。

MongoDBのインストール:古いCentOS/RedHatの場合

CentOS 5.3 以下を使っている場合にはバイナリのtarballをダウンロードしてインストールするのが無難です。

http://www.mongodb.org/downloads から、OS に合わせて Linux 32-bit か Linux 64-bit をダウンロードしてください。

32bit 版の例

$ wget -q http://fastdl.mongodb.org/linux/mongodb-linux-i686-1.6.5.tgz
$ tar fxz mongodb-linux-i686-1.6.5.tgz && cd mongodb-linux-i686-1.6.5
$ ls -R
.:
GNU-AGPL-3.0  README  THIRD-PARTY-NOTICES  bin

./bin:
bsondump  mongo  mongod  mongodump  mongoexport  mongofiles  mongoimport  mongorestore  mongos  mongosniff  mongostat

ご覧のように実行ファイルしか入っていませんので、起動スクリプトなどがほしい場合は、ソースの tarball から取ってきてください。

$ wget -q wget http://downloads.mongodb.org/src/mongodb-src-r1.6.5.tar.gz
$ tar fxz mongodb-src-r1.6.5.tar.gz && cd mongodb-src-r1.6.5
$ ls rpm/
init.d-mongod  mongo.mdv.spec  mongo.spec  mongod.conf  mongod.sysconfig

rpm/ に CentOS / RedHat 向けのファイルがありますので、適当にコピーして使うと良いでしょう。

例えば、

$ sudo install -m 755 rpm/init.d-mongod /etc/rc.d/init.d/mongod
$ sudo install -m 644 rpm/mongod.conf /etc/mongod.conf
$ sudo install -m 644 rpm/mongod.sysconfig /etc/sysconfig/mongod

とか。mongod.conf と sysconfig/mongod は後で必要に応じて修正してください。

32bit版と64bit版どちらを使うべき?

短い答え

64bit版です。

長い答え

32bit 版は大体 2GB までのサイズの database までしかサポートしません。

  • あまりデータサイズが大きくなる予定がない
  • 公開ウェブサービスには使わない
  • MongoDB自体の勉強や小規模な実験用

といった場合には 32bit 版でも構いません。

この制限は特定のcollectionではなくdatabase全体が対象です。

例えばmap/reduce結果の一時collectionなども含まれますので、データサイズが上限に近い状態で運用していると急に溢れる恐れがあります。

一度上限に達すると経験的にはcollectionの削除も含めてほとんど何もオペレーションできなくなりますので注意してください(db.dropDatabase()すらできなくなったことも)。

以下のような場合には迷わず 64bit 版を使いましょう。

  • メモリが潤沢に積んである 64bit OS マシンを持っている
  • 公開するウェブサービスに使う
  • 大規模データを処理する

see also http://blog.mongodb.org/post/137788967/32-bit-limitations

調べたいこと

バックアップの取り方

mongodumpはデータベースをロックしないのとか、中途半端な状態のバックアップがとれたりしないのかとかが気になります。

トランザクションがないのでそういった問題はないのかな。

とりあえずslave組めば良いという気も。

MySQL との比較

MySQL 5.5 と insert 性能を比較したい。

メモリの使い方

mmap使っていてdatabaseのサイズだけメモリを確保するなら、ノードに積んでいるメモリより大きなdatabaseに全件findするとswapの嵐になるのかな。安全に使える搭載メモリとdatabaseサイズの関係を知りたいですね。