扩展yii的数据库访问层cDbConnection组件,请提供建议
时间:2013-05-20
来源:互联网
因项目中使用yii框架,但其自带的数据库访问层不支持主从复制,我准备扩展一个新组件(继承自CDbConnection, 并可以完全兼容其接口,仅通过修改配置文件即可直接使用)
我目前想到的功能:
从CDbConnection派生新类,实现以下新功能
1. 支持一主多从模式
2. 自动读写分离(读请求自动转发到从库 写请求自动分发到主库)
3. 从库负载均衡
4. 强制主库读(对数据一致性要求较高场合使用较多 Mysql_proxy无此功能)
5. 强制指定读取从库节点(默认情况下随机选择从库)
6. 查询缓存(仅对select,show查询有效, 无论查询发生在主库还是从库上 yii已实现)
7. 从库故障转移 当从库产生故障时 自动选取其它从库 所有从库不可用时使用主库
8. 如果没有配置从库,所有的读写请求发送到主库
9. 从库可指定不同相对的权重,较高权重的从库处理的查询较多
10. 同一次PHP程序执行过程中,默认只会使用一台从库(这是出于性能考虑,避免随机连接过多从库影响性能),PHP多次执行时,就会使用不同的从库,从而达到负载均衡的目的。
11. 支持SQL hash 这意味着相同的查询会被固定发送到某个从库节点上,这将使用mysql server的query_cache更有效。
我一直是比较排斥使用mysql_proxy来实现这些功能的,一方面增加了运维的维护工作量,另一方面增加了可能的故障点,再次其并不灵活,如上述提到的强制主库读:
比如主从复制因意外原因中断,用户现在进行余额消费,主库上减去了余额,但未同步到从库,这时仍然可以继续消费(取余额的查询发生在从库上),这时就会导致对账错误。这时强制主库读,是比较好的解决方法。
这是我目前想到,并已经初步实现的功能,各位若有其它好的功能建议,欢迎提出,等完成之后,我会发布出来供大家参考。
我目前想到的功能:
从CDbConnection派生新类,实现以下新功能
1. 支持一主多从模式
2. 自动读写分离(读请求自动转发到从库 写请求自动分发到主库)
3. 从库负载均衡
4. 强制主库读(对数据一致性要求较高场合使用较多 Mysql_proxy无此功能)
5. 强制指定读取从库节点(默认情况下随机选择从库)
6. 查询缓存(仅对select,show查询有效, 无论查询发生在主库还是从库上 yii已实现)
7. 从库故障转移 当从库产生故障时 自动选取其它从库 所有从库不可用时使用主库
8. 如果没有配置从库,所有的读写请求发送到主库
9. 从库可指定不同相对的权重,较高权重的从库处理的查询较多
10. 同一次PHP程序执行过程中,默认只会使用一台从库(这是出于性能考虑,避免随机连接过多从库影响性能),PHP多次执行时,就会使用不同的从库,从而达到负载均衡的目的。
11. 支持SQL hash 这意味着相同的查询会被固定发送到某个从库节点上,这将使用mysql server的query_cache更有效。
我一直是比较排斥使用mysql_proxy来实现这些功能的,一方面增加了运维的维护工作量,另一方面增加了可能的故障点,再次其并不灵活,如上述提到的强制主库读:
比如主从复制因意外原因中断,用户现在进行余额消费,主库上减去了余额,但未同步到从库,这时仍然可以继续消费(取余额的查询发生在从库上),这时就会导致对账错误。这时强制主库读,是比较好的解决方法。
这是我目前想到,并已经初步实现的功能,各位若有其它好的功能建议,欢迎提出,等完成之后,我会发布出来供大家参考。
作者: xuer 发布时间: 2013-05-20
折腾, Drupal的数据层封装基本上就满足你的需求了.
作者: idesigner 发布时间: 2013-05-20
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28