MongoDBについてメモ
・MongoDBはNoSQL(Not SQL)に分類されるデータベースの一つ。
・データをキーと値の組合せで記録する。
・BSON(Binary JSON)形式でデータを保存する。
例えば、
{name:"aaa",age:26,mail:["xxxx@aaa.com","yyy@xxx.jp","zzz@yyy.net"]}
・スキーマレス
MySQL等のRDBでいうCREATE TABLEが必要ない。
同じコレクション(RDBでいうとテーブル)に異なる構造のBSONを保存できる。
・トランザクション、表の結合はできない。
MongoDBをCentOS(64bit)にインストールしてみた。
YUMリポジトリが提供されているので、
下記に設定ファイルを新規に作成して登録する。
/etc/yum.repos.d/mongodb.repo [mongodb] name=MongoDB Repository baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/ gpgcheck=0 enabled=1
yumコマンドでMongoDBをインストール
yum install mongo-10gen mongo-10gen-server
インストールが終わったらMongoDBサーバを実行する。
/etc/init.d/mongod start
次から自働的に起動するように設定する。
chkconfig --add mongod
chkconfig mongod on
参考:http://docs.mongodb.org/manual/tutorial/install-mongodb-on-red-hat-centos-or-fedora-linux/
使ってみる。
$ mongo MongoDB shell version: 2.4.8 connecting to: test #データベースの切り替え >use memodb switched to db memodb #コレクションにデータの保存(userというコレクションにデータを保存する) db.user.save({name:"aaa",age:26, mail:["xxxx@aaa.com","yyy@xxx.jp","zzz@yyy.net"]}); #コレクションから検索 > db.user.find({name:"aaa"}); { "_id" : ObjectId("5295f9fd14dc5c7c99bf9817"), "name" : "aaa", "age" : 26, "mail" : [ "xxxx@aaa.com", "yyy@xxx.jp", "zzz@yyy.net" ] } > db.user.find({mail:"yyy@xxx.jp"}); { "_id" : ObjectId("5295f9fd14dc5c7c99bf9817"), "name" : "aaa", "age" : 26, "mail" : [ "xxxx@aaa.com", "yyy@xxx.jp", "zzz@yyy.net" ] } ※配列のデータをキーにしても検索できた。 #コレクションからデータの削除 > db.user.remove({name:"aaa"})
・PHPから利用できるようにしてみる。
・PECLのmongoをインストールする。
pecl install mongo
※gcc等がインストールされていないとエラーになる。
php.iniに下記を追加
extension=mongo.so
httpdの再起動をしてphpinfo()にmongoが表示されていればOKなのかな。
・PHPからMongoDBを使ってみる。
<?php $mongo = new Mongo("localhost:27017"); //DBの選択 $db = $mongo->selectDB("memodb"); //コレクションの選択 $collection = $db->selectCollection("user"); //コレクションにデータの保存 $collection->insert(array("name"=>"aaa","age"=>26, "mail"=>array("xxxx@aaa.com","yyy@xxx.jp","zzz@yyy.net"))); //コレクションからデータの検索 $cursor = $collection->find(array("name"=>"aaa")); //検索結果を表示 foreach($cursor as $cur){ print_r($cur); } //コレクションからデータを削除 $collection->remove(array("name"=>"aaa")); ?>
・実行結果
Array ( [_id] => MongoId Object ( [$id] => 529607a77f8b9aea1417e1b3 ) [name] => aaa [age] => 26 [mail] => Array ( [0] => xxxx@aaa.com [1] => yyy@xxx.jp [2] => zzz@yyy.net ) )
※PHPでPermission deniedのエラーが発生した場合は下記を実行する。
参考:http://php.net/manual/ja/class.mongoconnectionexception.php
$ /usr/sbin/setsebool -P httpd_can_network_connect 1 $ /etc/init.d/httpd restart