MongoDBをためしてみた


NoSQLが話題になりはじめてそろそろ1年くらいになるでしょうか。仕事ではMySQLで足りているしスケールアウトが求められる案件もでてこないので触ることもなく時は過ぎ・・
触ってみなければと、Herokuで使えるということもありMongoDBを使ってみました。
環境はCentOS5.5。


インストール

ここから環境にあったものをダウンロードします。

$ wget http://fastdl.mongodb.org/linux/mongodb-linux-i686-1.6.5.tgz
$ tar zxvf mongodb-linux-i686-1.6.5.tgz
$ cd mongodb-linux-i686-1.6.5/bin

データベースを作成するディレクトリを適当に作成します。

$ makedir ~/mongodb

binディレクトリ内のmongodを実行するとフロントエンドで起動するみたい。--dbpathオプションで先ほど作成したディレクトリを指定します。

$ ./mongod --dbpath ~/mongodb

バックエンドで実行するには、--fork --logpath ~/mongodb/mongodb.log のようにします。


シェルから使ってみる

別のターミナルを開いてmongoコマンドを実行すると、シェルが起動してMongoDBに触れることができます。
ではmongoっと

$ ./mongo
MongoDB shell version: 1.6.4
connecting to: test
> 


公式にチュートリアルがありますが、Masatomo Nakanoさんが翻訳されたDeveloper Zoneがわかりやすいです。


ドキュメントの作成にはsaveを使います。コレクション名をusersとすると

> db.users.save({firstname: "taro"})

ドキュメントの取得はfindを使います

> db.users.find()
> { "_id" : ObjectId("4d6367286681d38c875e50f7"), "firstname" : "taro" }

削除はremove。

> db.users.remove({firstname: "taro"})

removeでパラメータ指定なしにすると全削除されます

> db.users.remove()

基本操作は分りやすいです。またシェルはJavaScriptを使えるのでいろいろと書けるようです。
id:babie さんの以下のページがわかりやすくまとまっています。

ハンズオンで分かる MongoDB チュートリアル - babie cruising love


MongoDBの停止

フロントエンドで動かしているときは、Ctrl+cでよいそう。バックエンドの実行は、kill -2 (プロセスID)を実行します。


MongoDBが起動しない場合

起動しなくなったら、--repairをつけて実行する。このコマンドはそのまま終了してしまうので再度通常の起動方法で実行する。

$ ./mongod --dbpath ~/mongodb --repair
・・・・・・
Tue Feb 22 17:32:20 [initandlisten] shutdown: removing fs lock...
Tue Feb 22 17:32:20 dbexit: really exiting now
$ ./mongod --dbpath ~/mongodb