phalcon:數據庫分庫,讀寫分離,負載均衡 系統方法執行順序php
用命名空間區分不一樣的數據庫實例,對應代碼結構上是不一樣的目錄區分,在同一目錄下基類負責初始化鏈接。鏈接來自初始化時注入的多個db服務node
隱規則:mysql
initialize()在每一個請求期間只會調用一次sql
爲每一個 new 建立的實例執行初始化任務使用onConstruct()數據庫
namespace Company\Models\Notification;
1 /** 2 * Class BaseModel 3 * 4 * beforeSave()和afterFetch()成對使用,用於讀寫數據時自動轉化數據。 5 * 例如自動執行serialize unSerialize 6 * 7 * save()發生時事件調用順序是 8 * initialize, 9 * onConstruct, 10 * beforeValidation, 11 * beforeValidationOnCreate, 12 * afterValidationOnCreate, 13 * afterValidation, 14 * beforeSave, 15 * beforeCreate, 16 * afterCreate, 17 * afterSave, 18 * 19 * @package Company\Models\Notification 20 */ 21 class BaseModel extends \Phalcon\Mvc\Model 22 { 23 24 /** 25 * - initialize()在每一個請求期間只會調用一次 26 * - 子類必需調用父類方法 27 * - 爲每一個 new 建立的實例執行初始化任務使用onConstruct() 28 */ 29 public function initialize() 30 { 31 $this->setConnectionService('db_notification'); 32 33 //$this->setConnectionService('node1'); 34 //$this->setConnectionService('node2'); 35 // 36 //真實場景可能使用mysqlnd_ms擴展或者haproxy 37 //僅演示讀負載均衡一種思路 38 //$dbSlave = ['node1', 'node2', 'node3']; 39 //$key = array_rand($dbSlave); 40 //$db = $dbSlave[$key]; 41 //$this->setReadConnectionService($db); 42 // 43 // 44 //$this->setReadConnectionService('dbRead'); 45 //$this->setWriteConnectionService('dbWrite'); 46 } 47 }