Linux:CentOS5(x64):install:mongodb
目次 |
mongodbについて
mongodbはドキュメントデータベースと言われる部類のデータベースである。
- mongodb : http://www.mongodb.org/
- mongodb-1.4.3 : http://downloads.mongodb.org/src/mongodb-src-r1.4.3.tar.gz
- 言語ライブラリ :
近頃はやりのNoSQLの一つである。スキーマレスであるため、カラムの定義やデータの型を気にしなくてもいいのがポイント
mongodbのインストール
ソースからコンパイルする方法もあるのだが、面倒くさいのでバイナリを利用
# curl http://downloads.mongodb.org/linux/mongodb-linux-x86_64-1.4.3.tgz > mongo.tgz # tar xvzfp mongodb-src-r1.4.3.tar.gz # mv mongodb-linux-x86_64-1.4.3/ /usr/local/mongodb # mkdir -p /usr/local/mongodb-data/db/ # /usr/local/mongodb/bin/mongod --help
デーモンの起動
mongodを起動する。データのパス指定は必要(デフォルトパスにデータが存在する場合はその限りではない)
# /usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb-data/db &
mongodではJSONを受け付けるポートとWebUIのポート二つをListenする。
- デーモン : <ホスト名>:27017
- WebUI : http://<ホスト名>:28017/
諸々オプションがある。デーモンとして起動して、ログファイルを/var/log/mongod.logに出力する方法は以下。
# /usr/local/mongodb/bin/mongod --fork --dbpath=/usr/local/mongodb-data/db --logappend --logpath=/var/log/mongod.log
クライアントの起動
mongoプログラムを利用してDBにアクセスする
# /usr/local/mongodb/bin/mongo
> // some sample shell commands:
> db.foo.insert( { a : 1, name : "Joe", z : [1,2,3] } )
> db.foo.find()
{ "_id" : ObjectId("4c0f06593b883ba7b6775932"), "a" : 1, "name" : "Joe", "z" : [ 1, 2, 3 ] }
> db
test
> help
データ構造
1. <DB名>.<コレクション名>の中にJSON形式でデータを登録する。
2. 検索は<DB名>.<コレクション名>に対してfind()等で検索を行う。
3. データベースファイル名は最低2ファイル(DB名.0, DB名.ns)で構成される。DB名.<数字>に関してはデータ容量が増えるとファイルも増える。
操作方法
登録
<DB名>.<コレクション名>.save()で登録する。JSON形式で登録。
例)
> db.users.save(
{
name: 'kinusati',
seibetu: 'otoko',
syumi : ['パソコン', 'ゴルフ'],
nest: {
nest-value: 'hoge',
nest-value2: 'hoge2',
}
}
検索
find()
一致検索、正規表現検索が出来る。
> db.users.find({name: 'ursm'})
> db.users.find({name: /r/})
> db.users.find({tags: 'ruby'})
findOne()
一件だけ応答を取得する。
> db.users.findOne({name: 'ursm'})
インデックスの張り方
ensureIndex()を利用する。
> db.users.ensureIndex({username:1});
注意点
1. Key/コレクションに'-'は利用不可(クォートするとKEYには'-'は利用できそうだが、気持ち悪いので利用しない方がよいと思った)
2. mongodbではデータ登録時にデータファイルを自動拡張する。この自動拡張が結構な負荷になるため、サイジングできる場合は事前にファイルを作成しておく方法がおすすめ。(拡張時は処理がほぼ全部止まる模様で、クライアントからセッションタイムアウトになる場合があります・・)。以下には2GBのファイルを事前に5こ作っておく方法を記載します。
# for i in {0..4}
# do
echo $i
head -c 2146435072 /dev/zero > db.$i
chmod 600 db.$i
done
3. コレクションの数には制限がある模様。