CakePHP2でMySQL Replication

2,004 views

Published on

CakePHP2で、レプリケーションスレーブからデータを取得する

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,004
On SlideShare
0
From Embeds
0
Number of Embeds
851
Actions
Shares
0
Downloads
3
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

CakePHP2でMySQL Replication

  1. 1. CakePHP2 + MySQL Replication 株式会社 LocoPartners 大須賀 義浩
  2. 2. Replication
  3. 3. Replication
  4. 4. Replication
  5. 5. メリット • 更新系と参照系を分けることによって、負荷を 分散できる • Masterがダウンした時に、SlaveをMasterに昇格 することができる
  6. 6. 注意点 • 完全同期ではない(タイムラグがある) • Slaveはバックアップではない
  7. 7. Replicationの作り方 • Search Google
  8. 8. CakePHP2で MasterとSlaveを使い分ける
  9. 9. // app/Config/database.php class DATABASE_CONFIG { ! public $default = array( 'datasource' => 'Database/Mysql', 'persistent' => false, 'host' => 'master.mysql.host', 'login' => 'mysql_username', 'password' => 'mysql_password', 'database' => 'schema_name', 'prefix' => '', 'encoding' => 'utf8', ); ! public $replica = array( 'datasource' => 'Database/Mysql', 'persistent' => false, 'host' => 'slave.mysql.host', 'login' => 'mysql_username', 'password' => 'mysql_password', 'database' => 'schema_name', 'prefix' => '', 'encoding' => 'utf8', ); }
  10. 10. // app/Model/AppModel.php class AppModel extends Model { ! public $useReplica = false; ! public function beforeFind($queryData) { if ($this->useReplica) { $this->useDbConfig = 'replica'; foreach ($this->belongsTo as $btModelName => $btModelData) { $this->{$btModelName}->useDbConfig = 'replica'; } } return $queryData; } ! public function afterFind($results, $primary = false) { if ($this->useReplica) { $this->useDbConfig = 'default'; foreach ($this->belongsTo as $btModelName => $btModelData) { $this->{$btModelName}->useDbConfig = 'default'; } } return $results; } }
  11. 11. // app/Model/Hoge.php class Hoge extends AppModel { public $useReplica = true; public $belongsTo = array( 'Fuga', 'Foo', 'Bar', ); } ! ! ! // app/Controller/HogesController.php class HogesController extends AppController { ! public function index() { $this->set('hoge', $this->Hoge->find('all')); } }
  12. 12. もっと良い実装方法をご存知 でしたら教えてください

×