MongoDBをWindows環境にインストール
LithiumにはRDBMSよりNoSQLでやればもしかしてうまくいくのでは…と思ったので(どのチュートリアルでも採用している)MongoDBを使ってもう一度Lithiumにチャレンジしてみようかと思い立ち、まずはMongoDBについて知っておきたい。
NoSQLは自分の今の環境では到底使わないだろうなーと思ってスルーしていたんだけど、今日こそは。
MongoDB本体をダウンロード
↓ここにある。http://www.mongodb.org/
ダウンロードしてきたら展開して、自分はD:\xamppの中へ"mongodb"とリネームして入れた。
まずはWindowsのサービスに登録したい。
D: cd xampp\mongodb\bin mongod --install
エラー。どうやらログを取るために--logpathをつけないといけないらしい。
mongod --install --logpath D:\xampp\mongodb\log.txt
とかにしてみる。これでサービス登録は成功。
じゃあ起動だー!と喜ぶ前に、ちゃんとメッセージを読む。
データベースは/data/db/に保存されるらしいので、先にフォルダを作っておく必要がある。
しかも残念な感じなんですが、デフォルトはCドライブのほう。
C:\data\db
を作ってから、
net start "MongoDB"
もしくは
『コンピュータの管理』→『サービスとアプリケーション』→『サービス』
の一覧から"Mongo DB"を開始でもいける。
いやいや、データが分かれるのはナンなのでやっぱりmongodbフォルダの中に保存しましょう。
起動時の設定で変えられました。一旦mongoDBサービスを停止、削除。
net stop "mongoDB" mongod --remove
そしてもう一度。
mongod --install --logpath D:\xampp\mongodb\log.txt --dbpath D:\xampp\mongodb\data\db
確認としては、プロンプトで
mongo
を実行すれば動いているところが見られる。
詳しくはこのあたりで。
http://www.mongodb.org/display/DOCS/Quickstart+Windows#QuickstartWindows-32bitbinaries
これでMongoDBが動くところまでいったので、今度はPHPでMongoDBにアクセスしてみる。
MongoDB PHP ドライバの追加
http://php.plus-server.net/mongo.installation.htmlここを参考にして、対応するDLLをダウンロード。
自分の環境がわからない場合はphpinfo()で調べる。PHPバージョンはすぐわかりますね。VCはページ内検索すればそれっぽい数字が見つかるはず。あとは間違えてダウンロードしてもエラーが出て正しいバージョンを教えてくれるので、それをダウンロードし直せば大丈夫。
落としてきたファイルをphp\extの中にコピー。
php.iniに
extension=php_mongo.dll
と追加してApacheを再起動。
さて、PHPでmongoにアクセスするためには…。
http://php.net/manual/ja/book.mongo.php
よくわからないがとりあえずデータを挿入。
<?php $mongo = new Mongo(); $db = $mongo->selectDB("test"); $col = $db->selectCollection("collection"); $col->insert(array("name"=>"MongoDB")); $col->insert(array("path"=>"unnko")); ?>
データを取り出す際はこう書く。
<?php $mongo = new Mongo(); $db = $mongo->selectDB("test"); $col = $db->selectCollection("collection"); $result = $col->find(); ?>
$resultにはMongoCursorクラスオブジェクトが返ってきます。
MongoCursorオブジェクトが何なのか知らないと何もできないので、調べてみると
http://php.net/manual/ja/class.mongocursor.php
不思議なことが書いてありましたが、find()実行時にはまだデータベース接続されていないらしいです。
とにかく
MongoCursor::getNext();することで実データをもらえるようなので、とりあえずwhileで回してみる。
<?php //…省略 //ここまでは上記と同じ while($a = $result->getNext()) { print_r($a); } ?>
これで中に入ってるデータを参照することができました。
なるほどなるほど。
RDBMSとは違い、テーブル(mongoではコレクション)を先に作っておく必要が無く、いきなりデータ(ドキュメント)をつっこんでいける。
これは簡単で良いですな。もちろん設計はちゃんとしておかないと、カオスなデータベースになりそうではありますが。
最後にphpMoAdminというのも入れておきましょうか。
phpMoAdmin
phpMyAdmin的なmongoDB版。http://www.phpmoadmin.com/
1ファイルのみ。上記のDB接続までがうまくいっていればxamppの場合ならhtdocs以下に入れるだけで動く。
phpMyAdminとはUIが全く違いますが、今mongoにどんなデータが入ってるか一目瞭然なので、開発中はかなり使えそう。