使用ThinkPHP框架怎么实现分布式数据库连接

  介绍

使用ThinkPHP框架怎么实现分布式数据库连接?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

<强>一、单一数据库的连接

在使用的时候,单一数据库的连接配置非常简单。我们只需要在配置文件中配置一下的信息即可。

& # 39; DB_TYPE& # 39;,=祝辞,& # 39;mysql # 39;   & # 39;DB_HOST& # 39;,=祝辞,& # 39;192.168.5.102& # 39;   & # 39;DB_NAME& # 39;,=祝辞,& # 39;数据库名# 39;   & # 39;DB_USER& # 39;,=祝辞,& # 39;用户# 39;   & # 39;DB_PWD& # 39;,=祝辞,& # 39;密码# 39;   & # 39;DB_PORT& # 39;,=祝辞,& # 39;3306 & # 39;   & # 39;DB_PREFIX& # 39;,=祝辞,& # 39;onmpw_& # 39;,

设置完成以后就可以使用了。默认情况下就是单一的数据库连接。

<强>二、分布式数据库的连接

单一数据库的连接很简单,我们着重分析一下分布式数据库的连接。

& # 39; DB_TYPE& # 39;,=祝辞,& # 39;mysql # 39;   & # 39;DB_HOST& # 39;,=祝辞,& # 39;192.168.5.191,192.168.5.88,192.168.5.103& # 39;   & # 39;DB_NAME& # 39;,=祝辞,& # 39;测试,测试、测试# 39;   & # 39;DB_USER& # 39;,=祝辞,& # 39;masteruser, slaveuser、slaveuser& # 39;   & # 39;DB_PWD& # 39;,=祝辞,& # 39;masterpass, slavepass、slavepass& # 39;   & # 39;DB_PORT& # 39;,=祝辞,& # 39;3306 & # 39;   & # 39;DB_PREFIX& # 39;,=祝辞,& # 39;& # 39;   & # 39;DB_DEPLOY_TYPE& # 39;,=祝辞,1,,//,数据库部署方式:0,集中式(单一服务器),1,分布式(主从服务器)   & # 39;DB_RW_SEPARATE& # 39;,=祝辞,真的,,//,数据库读写是否分离,主从式有效   & # 39;DB_MASTER_NUM& # 39;,=祝辞,1,,//,读写分离后,主服务器数量   & # 39;DB_SLAVE_NO& # 39;,=祝辞,& # 39;& # 39;,,//,指定从服务器序号

按照以上配置就可以连接分布式数据库了。

下面我们看下面几个选项

<强> & # 39;DB_HOST& # 39;

分布式数据库,有几台服务器就要填写几个服务器地址,每个地址之间用逗号隔开。如果是主从式分布的话,前面的地址要是主数据库的地址。

对于下面的用户名和密码还有监听端口之类的,当然是有几个就写几个。如果各个数据库的用户名和密码都一样的话,可以只写一个。

对于这些选项的解析的代码如下

_config美元[& # 39;用户名# 39;],=,,爆炸(& # 39;& # 39;$ this→配置[& # 39;用户名# 39;]);   $ _config[& # 39;密码# 39;],=,,爆炸(& # 39;& # 39;$ this→配置[& # 39;密码# 39;]);   $ _config[& # 39;主机名# 39;],=,,爆炸(& # 39;& # 39;$ this→配置[& # 39;主机名# 39;]);   $ _config [& # 39; hostport& # 39;],,=,,爆炸(& # 39;& # 39;$ this→配置[& # 39;hostport& # 39;]);   $ _config[& # 39;数据库# 39;],=,,爆炸(& # 39;& # 39;$ this→配置[& # 39;数据库# 39;]);   $ _config [& # 39; dsn # 39;],,,=,,爆炸(& # 39;& # 39;$ this→配置[& # 39;dsn # 39;]);   $ _config [& # 39; charset # 39;],,=,,爆炸(& # 39;& # 39;$ this→配置[& # 39;charset # 39;]);

<强> & # 39;DB_DEPLOY_TYPE& # 39;=祝辞1

1表示是分布式,0表示的是集中式(也就是单一服务器)。

该选项的实现是在类认为\ Db \司机中

protected  function  initConnect($主=true), {   如果才能(!空($ this→配置(& # 39;部署# 39;)))   ,,,//,采用分布式数据库   ,,,这个→美元_linkID =, $ this→multiConnect(主);   其他的才能   ,,,//,默认单数据库   ,,,if  (, ! $ this→_linkID ), $ this→_linkID =, $ this→connect ();   }

<代码> $ this→配置[& # 39;部署# 39;]表示的就<代码>是& # 39;DB_DEPLOY_TYPE& # 39; 这个配置选项,上面的配置在使用之前都已经经过解析了,配置项都在<代码> $ this→配置>

<代码> $ this→multiConnect() 函数就是用来进行分布式连接的,如果<代码> & # 39;DB_DEPLOY_TYPE& # 39; 选项设置为1,该函数就会执行。否则直接执行<代码> $ this→connect() 函数。

<强> & # 39;DB_RW_SEPARATE& # 39;=祝辞;真正的

真的表示读写分离,假表示读写不分离。

这里需要注意的是,读写分离是以主从式数据库系统为前提的。该选项设置为真正的时候主数据库写,从数据库读。

如果($ this→配置(& # 39;rw_separate& # 39;)) {//,,,主从式采用读写分离   ,,如果(主)   ,,,,//,主服务器写入   ,,,,r 美元;=,,m美元;   其他,,{   ,,,,如果(is_numeric ($ this→配置[& # 39;slave_no& # 39;])),{//,指定服务器读   ,,,,,,r 美元;=,这→美元配置(& # 39;slave_no& # 39;);   ,,,,其他}{   ,,,,,,,//,读操作连接从服务器   ,,,,,,r 美元;=,地板(mt_rand ($ this→配置[& # 39;master_num& # 39;],计数($ _config[& # 39;主机名# 39;])1));,,//,每次随机连接的数据库   ,,,,}   ,,,,,}   其他}{//,,,读写操作不区分服务器   r 美元,,,=,地板(mt_rand (0, count ($ _config[& # 39;主机名# 39;])1));,,//,每次随机连接的数据库   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

使用ThinkPHP框架怎么实现分布式数据库连接