FreeBSDで,mongoDB V.S. Redis

mongoDBはドキュメント指向,RedisはKVSですのでやはり全く用途が違うのですが,あえて,mongoDBをKVSとして使うとどれくらい性能が落ちる(?)か試してみました.

まず,mongoDBに必要なライブラリ等をportsから入れます.
それから,mongoDB自体はソースを取ってきてコンパイルします.

> su
# pushd /usr/ports/lang/spidermonkey && make && make install && popd
# pushd /usr/ports/devel/scons && make && make install && popd
# pushd /usr/ports/devel/boost-all && make && make install && popd
# pushd  /usr/ports/devel/libexecinfo && make && make install && popd
# rehash
# scons .
# exit
exit
> wget http://downloads.mongodb.org/src/mongodb-src-r1.8.2.tar.gz
> tar xvf mongodb-src-r1.8.2.tar.gz
> cd mongodb-src-r1.8.2
> mkdir test_db
> ./mongod --dbpath ./test_db/
Mon Jul 18 17:34:33 [initandlisten] MongoDB starting : pid=24421 port=27017 dbpath=./test_db/ 32-bit

** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data
**       see http://blog.mongodb.org/post/137788967/32-bit-limitations
**       with --dur, the limit is lower

Mon Jul 18 17:34:33 [initandlisten] db version v1.8.2, pdfile version 4.5
Mon Jul 18 17:34:33 [initandlisten] git version: nogitversion
Mon Jul 18 17:34:33 [initandlisten] waiting for connections on port 27017
Mon Jul 18 17:34:33 [websvr] web admin interface listening on port 28017

へーwebのインターフェースも上がるんや...かっこいいなー

Redisも最新バージョンを入れます.

> wget http://redis.googlecode.com/files/redis-2.2.12.tar.gz
> tar xvf redis-2.2.12.tar.gz
> cd redis-2.2.12
> make PREFIX=`pwd`
> ./src/redis-server

さて,ドキュメント指向のmongoDBをKVSとして使うとどれくらい遅くなるか...
意外と頑張るモンゴが分かりました.

まず,バリュー長が10バイトの軽い場合.

絶対値で言うと倍くらいmongoが遅いですが,意外と頑張っている感じがします.

実際にはバリューが10バイトなんて無いと思うので,バリュー長を100バイトにしてベンチしてみました.

やっぱりmongoは意外に頑張ってます.
Redisがアクセススレッド数の多さで頭打ちになっているところを,mongoはアクセス数が増えても結構頑張ってます.

あと,このベンチのmongoDBでは,キーにインデックス貼ってます.
プログラム自体はまた今度...なにはともあれ,SQLとの対応表がオフィシャルサイトにあるくらい機能豊富なmongoDBが,ここまで速度的にも頑張るとは思っていませんでした.

次回は,本命のRiakやりますです.