こんにちは。笹亀です。
最近でも無いですが、なにかと注目を浴び続けている のがkey-valueストアです。TokyoTyrant, kumofs, ROMA, Flareなど種類も豊富で使用する用途によって使い分けするのがよいです。そんな中で自分がご紹介したいのはMongoDBです。
MongoDBはドキュメント指向データベースでNoSQLです。ご紹介理由としてはRDBMSから入るkey-valueストアとしてとてもわかりやすいからです。後はサポート言語が大量にあってWEBアプリケーションとして使用するのにとても相性がよいことです。
※PHP、Python、Ruby、Perlなどなど
その他にたくさんの特徴があります。詳細については、下記のドキュメントにてご確認ください。
http://www.mongodb.org/display/DOCSJP/Home
※日本人なら日本語のドキュメントに限ります(一部英語のままらしい)
まずはインストールしてみます。下記から自分の環境にあったものをダウンロードします。
http://www.mongodb.org/display/DOCS/Downloads
自分の場合はMacの10.6なので下記のように取得します
wget http://downloads.mongodb.org/osx/mongodb-osx-x86_64-1.4.1.tgz
解凍してコマンドなどを設置(コピー)します。
tar zxvf mongodb-osx-x86_64-1.4.1.tgz
cd mongodb-osx-x86_64-1.4.1
sudo cp bin/* /usr/bin/
sudo cp -r include/* /usr/include/
sudo cp lib/libmongoclient.a /usr/lib/
mongoデーモンをデータの格納先を指定して起動します。
mongod --dbpath ~/mongodb &
PHPからMongoDBを使えるようにします。
pecl install mongo
php.iniにextensionの箇所にmongo.soを追加する
apacheを再起動。
phpinfoでMongoが設定が反映されているか確認しましょう。
以上でPHPでMongoDBが使えるところまでいけます。
symfony(PHP)で使用する方法を記載します。まずは接続情報を記載します。MongoDBはスケーラブルに対応しておりますので今回はMaster-Slaveの情報の両方を記載します
config/mongo/databases.yml
all:
master:
param:
dsn: localhost:27017
dbname: test
slave:
param:
dsn: localhost:27017
dbname: test
次にsymfonyでMongoへ登録、取得(件数のみ)するためのクラスを作成します。
lib/MongoKeyValue.class.php
<?php
class MongoKeyValue
{
protected $connection_master = null;
protected $connection_slave = null;
protected $table_name = null;
/**
* コンストラクト
*
* @param string $table_name
* @return MongoKeyValue
*/
public function _construct($table_name = '') {
$this->table_name = $table_name;
//コネクション情報をセット(Master&Slave
$file = sfConfig::get('sf_config_dir').'/mongo/databases.yml';
if (file_exists($file)) {
$config = sfYaml::load($file);
} else {
throw new InvalidArgumentException('not mongo databases.yml');
}