この記事の所要時間: 約 10分10秒
最近、巷ではRDBMSでなく、NoSQLの話題が出てくるようになりました。
NoSQLとは、リレーショナルデータベース(RDBMS)を象徴するSQL言語がない
(NoSQL)から誕生した言葉です。
最近では、「Not Only SQL(SQLだけじゃない)」の略という解釈が一般的です。
Hadoop、Cassandraや、先日のNoSQL勉強会で聞いた、
okuyama、Riak、Couchbaseなどがありますが
今回は、MySQLに近い感じで開発などにも利用出来そうな
「mongoDB」について調べてみました。
折角調べてみたので、BLOGにまとめておきたいと思います。
濃!Know!NoSQLセミナー
http://togetter.com/li/418464
mongoDB概要
mongoDBは、オープンソースのドキュメント指向データーベースです。
NoSQLデータベースの、1種になります。
名前の由来は、”humongous”
(ばかでかい)からきています。
特徴は、ドキュメント指向DBで、JSONでやり取りができます。
また、インデックスもサポートしています。
自動フェイルオーバーが可能な、レプリケーション機能ももっています。
また、Shardhing(シャーディング)を行って分割することも出来ます。
Map/Reduceも使えます。
あらゆる条件で、クエリが発行できるので集計なども便利です。
GridFSを使えば、16MB以上のファイルを取り扱うことも出来ます。
mongoDBは、Database → Collection → Documentという
概念で構成されています。
RDBMSで喩えると、Collectionがテーブルで、
Documentがレコードって感じです。
Documentは、JSONで扱うことができます。
mongoDBは、トランザクションを廃止し、その代わりに
パフォーマンスとスケーラビリティを重視しています。
key/value stores(KVS)と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」を使ってみました。
設定すると、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.ly、github、Viberなどもつかっています。
思ったよりも、簡単に使えるNoSQLです。
まずは、試してみるのもいいのかなと。
みなさんも、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
[...] 情報源: はじめてのmongoDB 入門編 構築・設定・ツールまとめ | Take it easy! – mauekusa ‘s BLOG – [...]