Linux:CentOS5(x64):install:mongodb

提供:KinusatiWiki
移動: 案内, 検索

目次

mongodbについて

mongodbはドキュメントデータベースと言われる部類のデータベースである。

近頃はやりの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. コレクションの数には制限がある模様。

個人用ツール