CodeIgniter读写分离实现方法详解

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了CodeIgniter读写分离实现方法详解脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

本文实例讲述了CodeignITer读写分离实现方法分享给大家供大家参考,具体如下:

当前服务器只做了主从,未配置读写分离,读写分离的功能就只有交给程序来实现,这里主要谈谈Codeigniter怎么实现读写分离,并且需要满足以下两点:

网上有方案通过手动load多个DB来实现读写分离,这样的分离跟业务关联太紧,增加了开发难度也不利于维护,我们要做的是认读重库,写则写主库,读写分离对开发者透明

保留现有的配置方式,通过增加一个数组来配置读写分离,不影响原有使用方式。

思路

1、要实现读写分离最简单的思路就是在最终执行查询的地方根据查询语句判断是插入主库还是读取从库,所以需要找到该函数

2、应该只连接一次@L_304_11@,下次操作该链接应当可复用。也就是连一次重库后所有的读操作都可用,不需再次连接,主库同理。所以我们可以将链接放在CI超级对象中。

3、主从的判断是根据最终执行的sql语句来判断的,所以数据库配置中的自动链接autoinit参数就不用设置为true了,如果认连接了而又不需要操作该库就浪费资了。

4、模型中可以使用$this->db来直接操作查询,不需要其他调整

5、不直接修改system下的文件

实现读写分离

CI的db类固定为读取system下的文件,我们可以通过适当的重写来实现。首先是Loader.PHP,其中的database方法用来加载数据库对象,固定引用了system/database/DB.PHP文件,我们判断下是否存在自定义DB.PHP文件,存在则引入。

重写Loader.PHP

db) AND is_object($CI->db)) {
    return FALSE;
  }
  if(file_exists(APPPATH.'core/database/DB.PHP')) {
    require_once(APPPATH.'core/database/DB.PHP');
  } else {
    require_once(BASEPATH.'database/DB.PHP');
  }
  if ($return === TRUE) {
    return DB($params,$active_record);
  }
  $CI->db = '';
  $CI->db =& DB($params,$active_record);
}
/* End of file MY_Loader.PHP */
/* Location: ./application/core/MY_Loader.PHP */
@H_777_43@

脚本宝典总结

以上是脚本宝典为你收集整理的CodeIgniter读写分离实现方法详解全部内容,希望文章能够帮你解决CodeIgniter读写分离实现方法详解所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。