本文实例分析了ThinkPHP框架分布式数据库连接方法。分享给大家供大家参考,具体如下:
Thinkphp作为国内的一款流行框架,相信使用的人一定不在少数。本篇我们来分析一下Thinkphp中比较重要的一部分——分布式数据库的连接。
当然了,我们在这里不是去将如何使用模型去对数据库进行增删改查。我们是对其底层的连接代码做一个分析,可以帮助大家更好的理解thinkphp对数据库的操作。方便我们以后的使用。
一、单一数据库的连接
在使用的时候,单一数据库的连接配置非常简单。我们只需要在配置文件中配置一下的信息即可。
'DB_TYPE' => 'mysql','DB_HOST' => '192.168.5.102','DB_NAME' => 'databasename','DB_USER' => 'user','DB_PWD' => 'password','DB_PORT' => '3306','DB_PREFIX' => 'onmpw_',
设置完成以后就可以使用了。默认情况下就是单一的数据库连接。
二、分布式数据库的连接
单一数据库的连接很简单,我们着重分析一下分布式数据库的连接。
'DB_TYPE' => 'mysql','DB_HOST' => '192.168.5.191,192.168.5.88,192.168.5.103','DB_NAME' => 'test,test,test','DB_USER' => 'masteruser,slaveuser,slaveuser','DB_PWD' => 'masterpass,slavepass,slavepass','DB_PORT' => '3306','DB_PREFIX' => '','DB_DEPLOY_TYPE' => 1, // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)'DB_RW_SEPARATE' => true, // 数据库读写是否分离 主从式有效'DB_MASTER_NUM' => 1, // 读写分离后 主服务器数量'DB_SLAVE_NO' => '', // 指定从服务器序号
按照以上配置就可以连接分布式数据库了。
下面我们看下面几个选项
'DB_HOST'
分布式数据库,有几台服务器就要填写几个服务器地址,每个地址之间用逗号隔开。如果是主从式分布的话,前面的地址要是主数据库的地址。
对于下面的用户名和密码还有监听端口之类的,当然是有几个就写几个。如果各个数据库的用户名和密码都一样的话,可以只写一个。
对于这些选项的解析的代码如下
$_config['username'] = explode(',',$this->config['username']);$_config['password'] = explode(',',$this->config['password']);$_config['hostname'] = explode(',',$this->config['hostname']);$_config['hostport'] = explode(',',$this->config['hostport']);$_config['database'] = explode(',',$this->config['database']);$_config['dsn'] = explode(',',$this->config['dsn']);$_config['charset'] = explode(',',$this->config['charset']);
'DB_DEPLOY_TYPE'=>1
1 表示是分布式, 0 表示的是集中式(也就是单一服务器)。
该选项的实现是在类 Think/Db/Dirver中
protected function initConnect($master=true) { if(!empty($this->config['deploy'])) // 采用分布式数据库 $this->_linkID = $this->multiConnect($master); else // 默认单数据库 if ( !$this->_linkID ) $this->_linkID = $this->connect();}
新闻热点
疑难解答