位置: 编程技术 - 正文

CodeIgniter读写分离实现方法详解(codewriter怎么运行)

编辑:rootadmin

推荐整理分享CodeIgniter读写分离实现方法详解(codewriter怎么运行),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:codeigniter 教程,multiformatwriter().encode,codeigniter 教程,codeigniter 教程,multiformatwriter().encode,codewriter,codewrite,codewrite,内容如对您有帮助,希望把文章链接给更多的朋友!

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

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

1、读写分离对开发应该透明。

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

2、配置简单。

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

思路

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

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

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

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

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

实现读写分离

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

重写Loader.php

CodeIgniter读写分离实现方法详解(codewriter怎么运行)

接着我们在application/core下创建database/DB.php,该文件只有一个DB方法,用来读取配置文件并进行初始化工作。同样有两处地方需要重写下:

重写DB.php

整个DB.php调整的也基本上是文件的引入,group name的引入是为了方便后面的判断, 不引入则可以通过主机、数据库名称这些来配置。如果想强制关闭autoint,可以在DB.php中删掉下面这段:

接下来就是最核心的地方。根据查询语句实现读写分离。DB_driver.php中的simple_query方法可以理解为最后执行SQL语句的方法,我们可以在这里进行数据库链接的判断。

重写DB_driver.php

到这里读写分离即基本实现了,但做事情得善始善终,链接的数据库对象需要关闭,可以在公用控制器中执行完毕后关掉连接。

DB_driver.php中也有close方法,可以考虑下是否可以在该方法中关闭?这里认为是不行的。

关闭数据库链接

模型中的使用,为了使每个model中都可使用$this->db,以及不多次连接数据库,这里也是将链接放在CI超级对象中。这里就算不读写分离也可以这么处理,可以很方便的连接多个DB,具体的model要使用其他库只需要在构造函数中传入group name即可。

模型调整

最后的数据库配置方式,只需要在原有的基础上配置一个数组即可。是使用双主还是一主多从就看这里的配置方式。最开始想到直接在原配置上加键名来处理,但主与从的对应关系还是没有这样子明了,这里的定义方式决定了load_db_proxy_setting的实现方式。

database.php配置

最开始的数据库链接并未放到CI超级对象中,发现load多个模型时每次都会打开链接,所以完成读写分离之后一定要测试,可以在数据库链接打开和关闭的地方查看是否按预期执行(方法对应application/core/database/drivers/mysql/mysql_driver.php中的db_connect和_close)。整个调整过程最重要的两点就是simple_query方法以及构造函数中关闭数据库链接。模型中的调整是为了更方便的链接多个库,未实现读写分离时也是这么调整的,常用的方法独立成一个文件,MY_Model去继承。

实现MYSQL读写分离的中间件挺多,在没有用到这些时可以通过程序上的控制来实现读写分离。当然这里只是实现了读写分离,可以强制使用主库。如果想要更好的分配方式,可以好好想想load_db_proxy_setting中的分配方式。

更多关于CodeIgniter框架相关内容感兴趣的读者可查看本站专题:《codeigniter入门教程》和《CI(CodeIgniter)框架进阶教程》。

希望本文所述对大家基于CodeIgniter框架的PHP程序设计有所帮助。

CodeIgniter视图使用注意事项 本文讲述了CodeIgniter视图使用注意事项。分享给大家供大家参考,具体如下:CI中视图即application/views/下的模版文件,模版中支持直接使用PHP,所以模版

CodeIgniter扩展核心类实例详解 本文实例讲述了CodeIgniter扩展核心类的方法。分享给大家供大家参考,具体如下:CI中对核心类、辅助类和函数的扩展是相当方便的,配置文件中指定了s

CodeIgniter辅助之第三方类库third_party用法分析 本文实例分析了CodeIgniter辅助之第三方类库third_party用法。分享给大家供大家参考,具体如下:third_party用来存放系统中引入的第三方类库,类库通常提

标签: codewriter怎么运行

本文链接地址:https://www.jiuchutong.com/biancheng/288192.html 转载请保留说明!

上一篇:PHP实现微信网页授权开发教程(php实现微信网页聊天功能)

下一篇:CodeIgniter视图使用注意事项

  • 资产负债表里的存货包括哪些科目
  • 非税收入包括哪些来源
  • 税控是干什么用的
  • 当月减少的固定资产当月停止折旧
  • 增值税延期滞纳金是多少
  • 社保公积金计提是本月计提下月
  • 退回的税款如何做账
  • 金蝶财务软件固定资产模块固定资产调拨
  • 一般纳税人销项开普票,进项票可以抵扣吗
  • 待摊费用可以转入固定资产吗
  • 土地增值税多交了怎么处理
  • 土地转让如何缴纳增值税
  • 耕地占用税滞纳金是否能减免
  • 银行转账结算的方式有哪些
  • 企业可以不弥补以前年度亏损吗
  • 建筑劳务公司的工资计入什么科目
  • 简易征收可以抵扣进项吗
  • 供应商转让合同
  • 增值税是先交税还是先开票
  • 一个人有多份工作
  • 房屋租赁费发票可以抵扣吗
  • 外贸企业购进货物出口后,应退消费税应当贷记
  • 全面营改增后,某房地产开发企业需要缴纳哪种税,为什么
  • 小微企业增值税税率
  • 母公司代付子公司费用的委托书
  • 跨地区经营汇总纳税企业所得税
  • 企业滞纳金属于什么税
  • 公转私限额多久自动解冻
  • ai自动生成代码
  • 固定资产清理应交税费怎么算
  • php生成唯一标识
  • win8系统出现你的电脑遇到问题需要重新启动
  • 景区门票定价方法
  • macOS Big Sur 11.3 开发者预览版/公测版 Beta 6正式发布
  • 企业注销时实收资本需要交税吗
  • exedown是什么文件夹
  • 整理php防注入和注入
  • 收入的特征包括什么
  • 转出未交增值税和未交增值税区别
  • 如何自定义smartart
  • 网上申报完还需要去税务局吗
  • 销售成本包括销售人员工资吗
  • 税务现金流量表填错了怎么办
  • 计提增值税附加税的账务处理
  • 增值税专用发票和普通发票的区别
  • 开具电费发票如何入账?
  • 地租钱不付如何为
  • 经营利润所得税费用
  • 收到商业汇票计什么科目
  • 交易性金融资产的账务处理
  • 企业房屋折旧年限是多少
  • 管理成本分摊比例是多少
  • 支付宝企业账户在哪里查看
  • mysql修改默认端口方法
  • fedora安装apt
  • 苹果mac怎么复制文字
  • Win7系统设置屏保密码
  • mac os x 10.9.5
  • Win7开机就蓝屏
  • linux如何快速入门
  • win8如何免费升级win10
  • iis安装步骤 windows server 2008
  • 启用win8 metro启动界面
  • jquery 多选
  • Unity3D游戏开发标准教程吴亚峰于复兴人民邮电出版社
  • javascript相对路径
  • java的匿名内部类
  • 批处理截取字符串
  • 小说温故知新
  • shell脚本实现文件移动、复制等操作
  • 手机unity游戏
  • “python”
  • jquery实现搜索功能
  • js 字符串转字节
  • 浙江国税局电话客服热线
  • 辽宁省国家税务局官网
  • 不用税控盘可以清卡吗
  • 武汉税务电话号码
  • 河南省印花税核定征收暂行办法
  • 建设工程造价咨询合同需要交印花税吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设