Собственно перехал, с svn на git. Новый адресс
http://github.com/necromant2005/zrails
Все таки какой прекрасный мердж в git ...
Пока только самые нужные вещи:
P.S. Адаптеры реализуют интерфейс Zend_Db_Adapter_Abstact, так что фасады для репликации, кластера и скалинга полность совместимы с обычными адаптерами БД.
Master-Master-replication adapter
Итак пример конфигурации для Master-Master replication with 2 slaves:
Пример конфигурации и использования.
$db = new Zrails_Db_Facade_Replication(array(
'Masters' => array(
'master0' => array(
'adapter' => 'Pdo_Mysql',
'params' => array(
'host' => '10.0.1.100',
'username' => 'root',
'password' => '',
'dbname' => 'mydb'
)
),
'master1' => array(
'adapter' => 'Pdo_Mysql',
'params' => array(
'host' => '10.0.1.101',
'username' => 'root',
'password' => '',
'dbname' => 'mydb'
)
),
),
'Slaves' => array(
'slave0' => array(
'adapter' => 'Pdo_Mysql',
'params' => array(
'host' => '10.0.2.100',
'username' => 'root',
'password' => '',
'dbname' => 'mydb'
)
),
'slave1' => array(
'adapter' => 'Pdo_Mysql',
'params' => array(
'host' => '10.0.2.101',
'username' => 'root',
'password' => '',
'dbname' => 'mydb'
)
),
),
));
//connect to some master
$db->connectMaster();
//connect to master1
$db->connectMaster('master1');
//connect to some slave
$db->connectSlave();
//connect to slave0
$db->connectSlave('slave0');
Более детальные примеры в тестах
http://github.com/necromant2005/zrails/blob/master/tests/Zrails/Db/Facade/ReplicationTest.php
Cluster db adapter
Пример конфигурации для данного случая с 2 нодами node0/node1
$db = new Zrails_Db_Facade_Cluster(array(
'node0' => array(
'adapter' => 'Pdo_Mysql',
'params' => array(
'host' => '10.0.1.100',
'username' => 'root',
'password' => '',
'dbname' => 'mydb'
)
),
'node1' => array(
'adapter' => 'Pdo_Mysql',
'params' => array(
'host' => '10.0.1.101',
'username' => 'root',
'password' => '',
'dbname' => 'mydb'
)
),
));
//connect to specific node
$db->connectNode('node1');
Остальные примеры в тестах
http://github.com/necromant2005/zrails/blob/master/tests/Zrails/Db/Facade/ClusterTest.php
Не думаю, что что-то сложное так как все ноды синхронны и нет различия к какой ноде подключатся , поэтму логика значительно проще чем с репликацией, но с другой стороны существенно выше требования к железу.
Адаптер для горизонтального маштабирования
Пример конфигурации для такого решения для таблицы users.
$this->_db = new Zrails_Db_Facade_Scale(array(
"tables" => array(
"users" => array(
"field" => "id",
"strategy" => "Zrails_Db_Facade_Scale_Strategy_Crc32",
"key_provider" => "Zrails_Db_Facade_Scale_Key_Provider_Random"
),
),
"shards" => array(
0 => array(
'adapter' => 'Pdo_Mysql',
'params' => array(
'host' => '10.0.1.100',
'username' => 'root',
'password' => '',
'dbname' => 'mydb'
)
),
1 => array(
'adapter' => 'Pdo_Mysql',
'params' => array(
'host' => '10.0.1.101',
'username' => 'root',
'password' => '',
'dbname' => 'mydb'
)
),
2 => array(
'adapter' => 'Pdo_Mysql',
'params' => array(
'host' => '10.0.1.102',
'username' => 'root',
'password' => '',
'dbname' => 'mydb'
)
),
3 => array(
'adapter' => 'Pdo_Mysql',
'params' => array(
'host' => '10.0.1.103',
'username' => 'root',
'password' => '',
'dbname' => 'mydb'
)
),
)));
//fetchall with id=1 and status=1
$db->fetchAll('SELECT * FROM users WHERE id=1 AND status=1');
//or same
$db->select()->from('users')->where('id=?', 1)->where('status=?', 1)->query()->fetchAll();
Остльные примеры в тестах
http://github.com/necromant2005/zrails/blob/master/tests/Zrails/Db/Facade/ScaleTest.php