コネクションとデータベース

データベースに接続するには

データベースに接続するには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();