一般常见的有三种做法,

1,自动判断sql是否为读,来选择数据库的连接:

实例化php DB类的时候,需要一次连接两台服务器,然后根据slq选择不同的连接,举个例子:

  1. $link_w = mysql_connect($w_host,$user,$pwd);
  2. $link_r = mysql_connect($r_host,$user,$pwd);
  3. //执行sql
  4. if(preg_match("/^select/i", trim($sql))) {
  5. mysql_query($sql,$link_r);
  6. }else {
  7. mysql_query($sql,$link_w);
  8. }
 

这个方法的优点就是开发者执行sql不用区分读或者写,在db类的底层自己判断,缺点是,往往只需要读或者写时也需要打开两个连接。

2,调用的时候自己选择:

当执行sql前一般是能确定是写还是读,所以开发者需要手动的调用不同的连接,举个例子:

$w_db = new DB('w');
$w_db -> query('insert into .....');
当sql为读:
$r_db = new DB('r');
$r_db -> query('select .....');

主要通过,传的参数来区别sql是读还是写,每次调用sql前需要调用开发者自己判断。

3,使用MySQL
Proxy做中间层代理,会自动将判断sql是读或者写,将请求转发给服务器。优点是程序不用更改任何代码,只要启动mysql proxy
时分别指定读或写的服务器:

--proxy-backend-addresses
--proxy-read-only-backend-addresses

 

最新文章

  1. 初学HTML 常见的标签(三) 插入类标签
  2. Lua string库整理
  3. JAVA 设计模式 命令模式
  4. Javascript Window的属性
  5. Spring Roo
  6. cts 测试环境安装 ubuntu
  7. POJ 1837 Balance 【DP】
  8. Verilog HDL常用的行为仿真描述语句
  9. PAT---1013. Battle Over Cities (25)
  10. lucene定义自己的分词器将其分成单个字符
  11. spring 入门篇
  12. Apollo单向SSL认证(2)
  13. 大前端的自动化工厂(5)—— 基于Karma+Mocha+Chai的单元测试和接口测试
  14. python3 与 Django 连接数据库报错:ImportError: No module named 'MySQLdb'
  15. TCP/IP模型及OSI七层参考模型各层的功能和主要协议
  16. LeetCode题解之N-ary Tree Postorder Traversal
  17. HTML5页面开发的基础性模板
  18. Vuex 实践讲解
  19. CSS :after、before、<!DOCTYPE>
  20. 32. My Experiences in the Factories 我在工厂的经历

热门文章

  1. gdb tui设置默认窗口高度
  2. Pytest权威教程25-配置
  3. <c:choose>
  4. Tuxedo 介绍
  5. mac使用poetry
  6. BurpSuite intuder里保存所有网页的特定内容:以bugku的cookies欺骗为例题
  7. Leet Code 1.两数之和
  8. 深度学习面试题12:LeNet(手写数字识别)
  9. 微信小程序左滑删除未操作有复位效果
  10. 回声消除(AEC)原理