## 多数据库、主从库配置
本章会讲解一下关于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. 多数据库、主从库配置