mongoDBをmacにインストール

ドキュメント指向のDBってやつはどんな感じか知りたくてmongoDBを使ってみることにした。

http://www.mongodb.org/display/DOCS/Home:mongoDB

mongoDBの特徴は以下の通り

先に使ってみた感想を上げてみると、
一般的なRDBと比べてよかったところは

  • インストールらくちん
  • シンプル
  • 柔軟

短所(?)は

ということで、たぶん簡単なシステムだとmongoDBはかなり魅力的だとおもう。
あとオブジェクト指向アジャイル開発と相性が良さそう。

でもトランザクションとかがガッツリ必要なものは無理っぽい。

rack+sinatra+mongoDBとか素敵な組み合わせに見える

インストール方法

まずダウンロード
http://www.mongodb.org/display/DOCS/Downloads:ここからMac64bitの1.1.4をダウンロードもしくは

wget http://downloads.mongodb.org/osx/mongodb-osx-x86_64-1.1.4.tgz

そんで解凍

tar zxvf mongodb-osx-x86_64-1.1.4.tgz

配置

cd mongodb-osx-x86_64-1.1.4 
sudo cp bin/* /usr/local/bin/
sudo cp -r include/* /usr/local/include/
sudo cp lib/libmongoclient.a /usr/lib/

デーモンの起動

mkdir db
mongod --dbpath ~/db

これで使えるようにになったはず。

rubyからmongoDBを使ってみる

まずライブラリをインストール

sudo gem install gemcutter
sudo gem tumble
sudo gem install mongo
sudo gem install mongo_ext

そんでgithubにのってたコードを実行
http://github.com/mongodb/mongo-ruby-driver:mongo-ruby-driver

require 'rubygems'
require 'mongo'
include Mongo

#dbにコネクションはる
@db   = Connection.new.db('sample-db')

#コレクションをつくる(rdbでいうスキーマみたいなもんだと思う)
@coll = db.collection('test')

#コレクションの中身をとりあえず全削除
@coll.remove

#insert処理
3.times do |i|
  @coll.insert({'a' => i+1})
end

puts "There are #{@coll.count()} records. Here they are:"
@coll.find().each { |doc| puts doc.inspect }

そしたら

$ ruby test.rb
There are 3 records. Here they are:
{"_id"=>4b1a99c40b965d1e66000001, "a"=>1}
{"_id"=>4b1a99c40b965d1e66000002, "a"=>2}
{"_id"=>4b1a99c40b965d1e66000003, "a"=>3}

ってなった。かんたん。


ためしに

require 'rubygems'
require 'mongo'

include Mongo
@db   = Connection.new.db('sample-db')
@coll = @db.collection('test')

@coll.remove
3.times do |i|
   @coll.insert('a' => i + 1)
end
#ここを追加
@coll.insert('unko' => "hoge")

puts "There are #{@coll.count()} records. Here they are:"
@coll.find().each { |doc| puts doc.inspect }

ってやったら

$ ruby test.rb
There are 4 records. Here they are:
{"_id"=>4b1a9a440b965d1e6f000001, "a"=>1}
{"_id"=>4b1a9a440b965d1e6f000002, "a"=>2}
{"_id"=>4b1a9a440b965d1e6f000003, "a"=>3}
{"_id"=>4b1a9a440b965d1e6f000004, "unko"=>"hoge"}

ってなった。おもろい。