■MongoDBとは
ドキュメントベースのデータベースです。NoSQLの一種だと思います。JSON的なデータ構造で情報を保持されるようです。その中身を高速に検索することも可能です。これをmysqlでやろうとすると、like検索の前後一致をする必要があり、非常に遅くなってしまいます。
■CakePHPで利用する準備
今回はCakePHPからMongoDBを使ってみます。デフォルトだと、CakePHPはMongoDBに対応していないので、プラグインを導入して対応します。
GitHub - ichikaway/cakephp-mongodb: [Abandon Project] MongoDB database driver for CakePHP
MongoDB database driver for CakePHP - ichikaway/cakephp-mongodb
こちらから、プラグインをダウンロードして、
Mongodb
というディレクトリ名でpluginsディレクトリへ入れます。
■設定ファイルの変更
プラグインを導入したら利用できるようにします。
bootstrap.php
CakePlugin::load('Mongodb');
database.php
public $default_mongo = array(
'datasource' => 'Mongodb.MongodbSource',
'host' => 'localhost',
'database' => 'testdb',
'port' => '27017',
'encoding' => 'utf8',
);
さらに、私はAppModelを継承した基底クラスを作りました。MongoDBを利用するモデルはこのクラスを継承すれば、自動的にMongoDBに接続されるようになります。
<?php
/**
* MongoDBを使うときに利用する基底モデル。
*/
class AppMongoModel extends AppModel {
// DB接続設定をMongoDBに切り替え
var $useDbConfig = 'default_mongo';
// ORマッパーを使えるように変更
var $actsAs = array(
'Mongodb.SqlCompatible'
);
}
■使い方
以下のようにモデルを記述します。いつもと同じようにfindやsaveをすることができます。Paginateなども利用することができるので、非常に便利です。
<?php
/**
*MongoDBのテストクラス
*
*/
App::uses('AppMongoModel', 'Model');
class MongoTest extends AppMongoModel {
/**
* 引数で指定したIDの情報を取得する。
*/
public function getInfo($id) {
$conditions = array(
'conditions' => array(
'_id' => $id,
),
);
$testInfo = $this->find('first', $conditions);
return $testInfo;
}
}