数据读写分离架构方式并不是适合所有网站,一点博主认为只有最合适的架构没有最好的方案,读写分离一般适用于对读需求较大的网站,例如新闻网等。本文只是为做一个引子供大家参考学习,并不是商业行完整深入方案,读写分离的核心在于读库和写库中的数据保持一致性,所以需要实现数据库的数据复制方案,在之前文章中有发布关于MYSQL如何实现主从复制,配置好主从复制以后,就可以在需要读的时候去链接读库,写的时候去链接写库,参考代码(demo):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
classdb { publicfunction__construct($sql) { $chestr = strtolower(trim($sql)); //判断sql语句有select关键字的话,就连接读的数据库,否则就连接写数据库 if(substr($chestr,0,6)=='select') { echo'I am using select db..<br>'; $link = mysql_connect("127.0.0.1:3306", "root", "") or die("Could not connect: " . mysql_error()); mysql_select_db("test"); $result = mysql_query($sql); while ($row =mysql_fetch_array($result, MYSQL_NUM)) { printf("%s %s", $row[0],$row[1]); } echomysql_get_host_info($link).mysql_get_server_info($link).mysql_get_proto_info($link).mysql_get_client_info().'<br>'; } else { echo'I am using insert db..<br>'; $link = mysql_connect("127.0.0.2:3306","root","") or die("Could not connect: " . mysql_error()); mysql_select_db("test"); $result = mysql_query($sql); echo@mysql_affected_rows($result); echomysql_get_host_info($link).mysql_get_server_info($link).mysql_get_proto_info($link).mysql_get_client_info().'<br>'; } } } $d = new db(" update `users` set `select`='fasdf' where `id` =1"); $d2 = new db(" SELECT * from `users`"); 注:再次声明本文仅仅是个简单的引入概念作用。 |