## 多數據庫、主從庫配置
本章會講解一下關于sp框架的主從庫鏈接配置和多數據庫鏈接的方法。
### 一、主從庫配置
新版sp框架,默認支持主從庫配置,直接在protected/config.php文件內進行配置即可讀寫分離。
配置方法:
'mysql' => array(
'MYSQL_HOST' => 'localhost',
'MYSQL_PORT' => '3306',
'MYSQL_USER' => 'root',
'MYSQL_DB' => 'test',
'MYSQL_PASS' => '',
'MYSQL_CHARSET' => 'utf8',
'MYSQL_SLAVE' => array(
array(
'MYSQL_HOST' => 'localhost1',
'MYSQL_PORT' => '3306',
'MYSQL_USER' => 'root',
'MYSQL_DB' => 'test1',
'MYSQL_PASS' => '',
'MYSQL_CHARSET' => 'utf8',
),
array(
'MYSQL_HOST' => 'localhost2',
'MYSQL_PORT' => '3306',
'MYSQL_USER' => 'root',
'MYSQL_DB' => 'test2',
'MYSQL_PASS' => '',
'MYSQL_CHARSET' => 'utf8',
),
),
),
- 原有的mysql配置,代表的是主庫(寫庫)的配置,因為大部分情況下主庫是只寫一個鏈接,故主庫配置只有一個。
- 從庫(讀庫)的配置在'MYSQL_SLAVE'節點下,是一個數組,每項分別代表一個從庫配置。
- 請注意從庫配置是多級的數組,如果**只有一個也需要寫成多級數組**。
- 從庫之間的讀取是**隨機輪詢**。
> 從Model本身來看,findAll/find/findCount/query是讀方法,在主從配置下會使用從庫讀取。
> 而update/incr/decr/delete/create/execute是寫方法,會使用主庫進行操作。
主庫也可以是多個,這里就涉及到多數據庫鏈接的方法了,下面會介紹到。
### 二、多庫鏈接方法
開發過程中,有時候我們需要換個數據庫鏈接進行讀寫,可能是遺留數據庫,也有可能是合作項目的庫,不管怎么樣,在sp框架中使用另一個庫也是非常簡單的事情。
// 準備新庫的鏈接配置數據
$dbconfig = array(
'MYSQL_HOST' => 'localhost',
'MYSQL_PORT' => '3306',
'MYSQL_USER' => 'root',
'MYSQL_DB' => 'test1',
'MYSQL_PASS' => '',
'MYSQL_CHARSET' => 'utf8',
);
// 實例化
$guestbook = new Model("guestbook");
// 先用老庫查詢一下
$result = $guestbook->findAll();
dump($result);
// 用dbInstance切換新庫
$guestbook->dbInstance($dbconfig, 'master', true);
// 從新庫更新
$guestbook->update(array("id"=>1), array("dig"=>200));
// 從新庫查詢一下
$result = $guestbook->findAll();
dump($result);
我們要關注的是dbInstance()方法,該方法可以設置(或覆蓋)當前的數據庫鏈接實例。
dbInstance()方法有三個參數:$db_config, $db_config_key, $force_replace。
- $db_config數據庫配置數組
- $db_config_key是鏈接句柄的標識,一般主庫是master,從庫是slave_0/slave_1...,如果設置成“master”,那么就是覆蓋主庫的鏈接。
- $force_replace默認是false,設置為true會強制覆蓋數據庫鏈接。
也就是說,如果僅僅是$db_config_key="master",那么只有在沒有鏈接上原庫之前才會切換,而同時設置了$force_replace=true之后,那么不管原來有沒有鏈接,都會被覆蓋成新的鏈接。
- 自述
- 一、入門教程
- 1. 開始使用SpeedPHP
- 2. Hello World
- 3. 理解MVC
- 4. 制作留言本
- 5. 數據操作及Ajax
- 二、框架概述
- 1. 特色
- 2. 版權及開源協議
- 3. 開發環境
- 4. 編碼版本
- 5. SAE平臺使用
- 三、開發指南
- 1. 開發流程
- 2. 架構及擴展
- 3. 程序目錄結構
- 4. 命名建議
- 5. 安全建議
- 6. 用戶自定義
- 7. 模塊modules
- 四、訪問交互
- 1. 表單提交及數據獲取
- 2. session/cookie的使用
- 3. 偽靜態及URL跳轉
- 4. 使用frameset
- 5. 模板引擎特性和使用方法
- 五、數據操作
- 1. 建立數據模型類
- 2. 數據操作教程
- 3. 分頁
- 4. SQL支持及關聯實現
- 5. 多數據庫、主從庫配置