1. CakePHP Master/Slave
*) add default(slave as for query) setting in database.php, and master for saving
*) define a new replicate behavior
class ReplicationBehavior extends ModelBehavior {
public function beforeSave($Model) {
$Model->useDbConfig = master;
}
public function afterSave($Model) {
$Model->useDbConfig = default;
}
public function setServer($Model, $server) {
$Model->__backupConfig = $Model->useDbConfig;
$Model->useDbConfig = $server;
}
public function afterFind($Model) {
if (!empty($Model->__backupConfig)) {
$this->useDbConfig = $Model->__backupConfig;
}
$Model->__backupConfig = null;
}
public function save($data = null, $validate = true, $whitelist = array()) {
$this->Replication->beforeSave($this);
return parent::save($data, $validate, $whitelist);
}
}
?>
*) set $actAs to have replicate behavior in your base app model
$actAs = array(Replicate);
*) call the setServer method in your controller to determine which database you want to use for instant query after save
if ($this->Deal->saveAll($this->data, array(validate=>first))) {
$this->Deal->setServer(master);
$deal = $this->Deal->find(first,array(
conditions => array(slug => $this->data[Deal][slug]),
fields => array(id)
));
2. how to use xhprof (a php benchmark tool developed by facebook)
http://techportal.ibuildings.com/2009/12/01/profiling-with-xhprof/
3. MySQL load-balancing
mysql-load-balancing-proxy-trafficscript">http://www.zeus.com/community/articles/building-mysql-load-balancing-proxy-trafficscript
4. ssl
consolidate secure operations to single domain: https://lang.secure.jigocity.com
keep track of referer links in http header
redirect back to the original referer when done