はじめてのmongoDB 入門編 構築・設定・ツールまとめ


この記事の所要時間: 1010

Mongodb title

最近、巷ではRDBMSでなく、NoSQLの話題が出てくるようになりました。
NoSQLとは、リレーショナルデータベース(RDBMS)を象徴するSQL言語がない
(NoSQL)から誕生した言葉です。

最近では、「Not Only SQL(SQLだけじゃない)」の略という解釈が一般的です。

HadoopCassandraや、先日のNoSQL勉強会で聞いた、
okuyamaRiakCouchbaseなどがありますが
今回は、MySQLに近い感じで開発などにも利用出来そうな
mongoDB」について調べてみました。

折角調べてみたので、BLOGにまとめておきたいと思います。

濃!Know!NoSQLセミナー
http://togetter.com/li/418464



mongoDB概要


MongoDB 002

mongoDBは、オープンソースのドキュメント指向データーベースです。
NoSQLデータベースの、1種になります。

MongoDB 003

名前の由来は、”humongous”
ばかでかい)からきています。

MongoDB 004

特徴は、ドキュメント指向DBで、JSONでやり取りができます。
また、インデックスもサポートしています。

自動フェイルオーバーが可能な、レプリケーション機能ももっています。
また、Shardhing(シャーディング)を行って分割することも出来ます。
Map/Reduceも使えます。

あらゆる条件で、クエリが発行できるので集計なども便利です。
GridFSを使えば、16MB以上のファイルを取り扱うことも出来ます。

MongoDB 005

mongoDBは、DatabaseCollectionDocumentという
概念で構成されています。

RDBMSで喩えると、Collectionがテーブルで、
Documentがレコードって感じです。

Documentは、JSONで扱うことができます。


MongoDB 006

mongoDBは、トランザクションを廃止し、その代わりに
パフォーマンスとスケーラビリティを重視しています。

key/value storesKVS)とRDBMSのいいとこ取りをした感じです。

mongoDB インストール方法


インストールも、とっても簡単です。

まず、レポジトリを追加します。

# vi /etc/yum.repos.d/10gen.repo



1
2
3
4
5
[10gen]
name=10gen Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64
gpgcheck=0
enabled=1



インストールします。

# yum install mongo-10gen mongo-10gen-server



mongod サービスを起動します。

# /etc/init.d/mongod start



これだけで、mongoが動きます。簡単!

mongoDBを使ってみる


簡単にデータの登録検索などをやってみます。

# mongo



mongo を実行すると、コマンドラインが起動します。

MongoDB shell version: 2.2.2
connecting to: test



こんな感じで、コマンドラインが表示されます。
testデータベースに、デフォルトで接続します。

データベースの接続コマンドは、use [DB名] です。

> use test
switched to db test



こんな感じのコマンドで、testデータベースにつなげます。

データの登録は、 db.[collection].save([JSONデータ]); です。
たとえば、col という コレクションに、A:1というデータを登録する場合は

> db.col.save({A:1});



になります。

データ検索は、findコマンドです。

> db.col.find();
{ "_id" : ObjectId("50bb11913b35b98986e48122"), "A" : 1 }



こんな感じで、簡単にcolコレクションの全件データを表示出来ます。

countコマンドで、件数を取得することも出来ます。

> db.col.count();
1



もう2件、追加してみます。

> db.col.save({B:3});
> db.col.save({C:5});



> db.col.find();
{ "_id" : ObjectId("50bb11913b35b98986e48122"), "A" : 1 }
{ "_id" : ObjectId("50c445ea4be2378e6acd10db"), "B" : 3 }
{ "_id" : ObjectId("50c445f24be2378e6acd10dc"), "C" : 5 }



“_id”と、自動でオブジェクトIDが付与されます。

B:3だけ、検索しようとする場合は、

> db.col.find({B:3});
{ "_id" : ObjectId("50c445ea4be2378e6acd10db"), "B" : 3 }



こんな感じで指定します。

実際にJSONデータを入れる場合は、こんな感じになります。

db.col.save({ "first_name" : "Jane", "last_name" : "Doe", "age" : 23  });



データを削除するのは、removeコマンドです。

> db.col.remove({"C":5});



こんな感じで削除できます。ObjectIDを指定して削除することも出来ます。

> db.col.find();
{ "_id" : ObjectId("50bb11913b35b98986e48122"), "A" : 1 }
{ "_id" : ObjectId("50c445ea4be2378e6acd10db"), "B" : 3 }



DB一覧を見るコマンドは、show dbsです。

> show dbs
admin   0.203125GB
local   (empty)
test    0.203125GB



Collectionの一覧を見るには、show collectionsです。

> show collections
col
system.indexes



helpコマンドで、コマンド一覧を表示する事も出来ます。

> db.col.help();
DBCollection help
        db.col.find().help() - show DBCursor help
        db.col.count()
        db.col.copyTo(newColl) - duplicates collection by copying all documents to newColl; no indexes are copied.
        (省略)



結構簡単に、コマンドでデータの登録・検索ができました。

ツール:RockMongoのインストール


phpMyAdminのような、Web管理ツールがあります。
複数あるみたいですが、「RockMongo」を使ってみました。

RockMongo

設定すると、Webで簡単にデータを参照編集できます。

PHP拡張設定


まずは、PHPでmongoDBを使えるようにします。

yum install php54-devel httpd-devel.x86_64 php-pear
sudo pecl install mongo



コマンドで簡単にモジュールのインストールが出来ます。

Build process completed successfully
Installing '/usr/lib64/php/modules/mongo.so'
install ok: channel://pecl.php.net/mongo-1.3.0
configuration option "php_ini" is not set to php.ini location
You should add "extension=mongo.so" to php.ini



php.ini 編集


php.iniに 1行追加モジュール名を、設定する必要があります。

php.iniの場所は、phpinfo() を実行すると分かります。

CentOSだと、/etc/php.ini かな

extension=mongo.so


この行を、追加します。

追加したら、apacheの再起動をします。
ちなみに、nginxで設定していたので、nginxの再起動だけだと
php.iniの再読込をしないので、fastcgiも再起動する必要があります。

fastcgiの再起動

# /etc/init.d/php-fastcgi restart



RockMongoの設定


RockMongoの設定は簡単で
ダウンロードして、解凍して index.phpを動かせば終わりです。

RockMongoダウンロード
http://rockmongo.com/?action=downloads

初期パスワードは、 admin / admin になっています。

まとめ


・mongoDBは、JSON形式なのでプログラムからも使いやすい
・SQLのような、条件検索も簡単
・しかも、結構高速で動作する。
・RDBMSの概念に似ているので。取っつきやすい
・テーブル定義の必要もなく、カラムが簡単に追加できる
・phpMyAdminのようなツール、RockMongoがあるので便利

米国では、プロトタイプmongoDBを使って作成し
MySQLに移行するか、大規模だとそのままmongoDBを。分散して利用するケースがあるそうです。

Amebaのピグライフなどでも、mongoDBを利用しているそうです。
mongoDBの大きな事例は、foursquareです。
foursquareは、Auto-Shardingも使っています。

また、NAVER Photo Albumや、bit.lygithubViberなどもつかっています。

思ったよりも、簡単に使えるNoSQLです。
まずは、試してみるのもいいのかなと。

MongoDB 007

みなさんも、mongoDB 気軽に使ってみませんか?
http://www.mongodb.org/downloads

参考サイト


このまとめ資料が、とても参考になりました。



mongoDB 公式サイト
http://www.mongodb.org/

mongodbをyumでインストールし、rockmongoでWEBから操作する(CentOS5.7
http://studio3104.hatenablog.c……/05/104039

PHPでMongoDBを使ってみる
http://nazo.hatenablog.com/ent……0091126/p1

mongoDBの基本コマンド
http://hiroftp.blogspot.jp/201……ngodb.html

関連記事:

Trackbacks

  1. [...] 情報源: はじめてのmongoDB 入門編 構築・設定・ツールまとめ | Take it easy!  – mauekusa ‘s BLOG – [...]