コネクションとデータベース
データベースに接続するには
データベースに接続するにはDatabaseManager::connect()
使用します。
Transactd サーバーへ接続する
はじめにDatabaseManager
のエイリアス名をDB
にします。
class_alias('Transactd\DatabaseManager', 'DB');
MasterとSlaveが異なるサーバーの場合
Transactd PHP ORMはデフォルトでマスターとスレーブサーバーの使い分けをサポートしています。書き込みオペレーションはマスター、読み取りオペレーションはスレーブを自動的に使用します。
$masterUri = 'tdap://yousername@your_master_host/your_database?&pwd=xxxx';
$slaveUri = 'tdap://yousername@your_slave_host/your_database?&pwd=xxxx';
DB::connect($masterUri, $slaveUri);
MasterとSlaveを共有する場合
スレーブを省略するとマスターを使って読み書きを行います。マスターを省略すると読み取りのみ可能なORMになります。
$masterUri = 'tdap://yousername@your_master_host/your_database?&pwd=xxxx';
DB::connect($masterUri, null);
複数のサーバーへの接続
$name
パラメータで名前を付けることで、複数のサーバーへのコネクションを管理できます。
接続はマスターとスレーブの両方に行なわれるため、実際のコネクションは2つありますが、便宜的にこれらに1つの名前を付けて管理します。名前を指定しない場合はdefault
という名前が自動的につけられます。
MasterとSlaveを共有し、コネクション名をInternal
とする例
$masterUri = 'tdap://yousername@your_master_host/your_database?&pwd=xxxx';
DB::connect($masterUri, null, 'Internal');
URIの記法はURIフォーマットを参照してください。
コネクションを指定する
コネクションInternal
の内部のDatabase
オブジェクトを取得します。
$db = DB::connection('Internal')->master();
コネクション名を指定しない場合はdefault
のコネクションが返されます。
$db = DB::slave();
コネクションInternal
を使い、customers
テーブルのQueryExecuter
オブジェクトを取得します。
$qe = DB::connection('Internal')->queryExecuter('customers');
コネクションプールとテーブルキャッシュ
Transactd PHP ORMはデフォルトでコネクションをプールします。リクエストの度にTCP接続をネゴシエーションすることなく高速に動作します。
さらに、テーブルハンドルをキャッシュすることも可能です。テーブルハンドルをキャッシュすると、テーブルのスキーマ情報がローカルにキャッシュされ、ハンドルもクローズせずに保持されます。
テーブルハンドルをキャッシュするよう設定する
アプリケーションの初期化時に、DatabaseManager::$tableCash
で有効・無効を指定します。
DB::$tableCash = true;
一度有効にすると、DatabaseManager::reset()
を呼び出すか、プロセスが終了するまで、一度開いたテーブルのハンドルは保持され再利用されます。
キャッシュが無効な場合は、Webアプリケーションで1つのリクエストに対する処理が終了するたびにテーブルがクローズされます。
テーブルハンドルをクローズしスキーマキャッシュを破棄する
アプリケーションでテーブルスキーマを変更しテーブルを再作成する場合などでは、テーブルのハンドルをキャッシュしていると、スキーマがロックされているため変更に失敗します。このような場合は、DatabaseManager::reset()
でテーブルハンドルおよびコネクションを解放することができます。
DB::reset();