我们公司的网站做项目使用的是自己封装的Mysql查询函数(注意,是函数,不是过程),没有使用框架,使用的模板也是老板自己写的,所以做读写分离是件比较麻烦的事情。

一般来说,读写分离有2中方法:

  • 1.代码端
    在代码段数据库访问部分进行修改,这点如果项目本身采用框架,或者封装了访问过程,又保证没有直接通过mysql_query()函数来进行查询的话是很简单的一个方法,很多框架默认都是直接读写分离的,只要稍微修改一下配置文件即可。
    但这样做有几个缺点:
    • 1.如果数据库服务器做分布式,比如说有2台进行写操作,2台进行读操作,那么读写数据库时的权重是个很麻烦的问题。
    • 2.如果需要添加数据库服务器,那么需要修改配置文件和权重分配,又是一个麻烦的事情。
    • 3.一旦其中一台数据库挂掉,单纯的改配置显然是应付不了的。
  • 2.数据库访问代理
    就是说在数据库和网络之间增加一层访问代理。这层代理是透明的,外界几乎看不出来区别,所以对于程序员来说,几乎不需要做任何事,只要把端口改成代理的端口就可以了,代码什么的,原封不动。
    • 而且代理服务器的另一个好处是,权重和负载均衡,就算有一台服务器挂掉了,也不影响数据库访问。
    • 另一个优点是,代理支持水平垂直分表分库,只要做好相应的规则,那么外界访问的时候就不需要管数据库的分表问题。比如说,我要查询用户的信息,只需要select * from user where user_id = ?,不需要再先计算用户属于哪个库那个表之类的,方便啊~,但是要做到这个,就需要对以前的代码做大范围的修改,所以这步我们暂且不做。

两个比较有名的开源数据库代理软件:

1.Amoeba_proxy

2.Mysql_proxy

我们用的是第一个,具体原因嘛,很简单,mysql_proxy 已经好几年没维护了。。。