PHP Db类强制读主库(master)的设计

这段时间Db不给力,经常出现主从同步延迟或者挂掉的情况,导致很多业务出现异常,大家就讨论怎么样让程序强制读master,关于这个方面的讨论比较激烈,主要为两种。

  • 底层DB类不应该关注主从的抉择,应该交于业务侧的用户抉择,这样业务层使用起来比较灵活。
  • 业务层的用户不应该关注主从的抉择,应该交给DB层解决,因为如果业务层人为不小心把强制读master的代码上到了压力大的线上,会对Db造成很大的压力,会出现很多不可控的因素。

我本人持第二种观点,程序中的bug,大部分都是人的失误造成的,在编程的世界里,人才是最大的bug,不应该把业务的稳定性依赖于人。

但是现在业务上主从的问题要解决,并且再快的主从同步也会出现延迟,在不依赖其他的存储工具的情况下,使用强制读master是必须要实现的功能,那么怎么才能设计出来一个安全性高一些的操作方式呢?

最初的想法,通过在调用查询函数时加入强制读master参数。

$daoCity = new \dao\City();

$ret = $daoCity->findAllBySql("select * from city limit 1",$useMaster=true);

这个想法很快被淘汰了,原因如下。

  • 所有要修改的读取函数太多,太麻烦。
  • 使用方法不优美,忍不了。
  • 如果出现不了解的程序员直接拷贝代码,将其上线到线上环境,可能出现事故。

接着出现了第二版的设计,通过一个函数来开启master读取,再主动关闭master读取。

$da
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值