Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

水平分割した複数DBへのアクセス

個人的なメモ&間違ってたら指摘してください:-)
ユーザー毎のDB接続先をDBで管理している場合、モデルはすべてのDBで同一になるので、database.ymlの設定でいけそう。

all:
  service_db1:
    class:          sfPropelDatabase
    param:
      dsn:            pgsql://dbuser:dbpass@dbserver1:5432/service_db
      persistent:     true

  service_db2:
    class:          sfPropelDatabase
    param:
      dsn:            pgsql://dbuser:dbpass@dbserver2:5432/service_db
      persistent:     true

  service_db3:
    class:          sfPropelDatabase
    param:
      dsn:            pgsql://dbuser:dbpass@dbserver3:5432/service_db
      persistent:     true

PHP側ではこんな感じでConnectionを取り出せた。

<?php
// service_db1
$db = Propel::getConnection();

// service_db2
$db = Propel::getConnection('service_db2');

// service_db3
$db = Propel::getConnection('service_db3');

一瞬、

<?php
$db = Creole::getConnection('pgsql://dbuser:dbpass@dbserver3:5432/service_db');

とかしようかと思ってた。。。