dbproxy思想

这里所提及的dbproxy,是PHP和Mysql服务器之间的一个联系桥梁... ...

正常情况下的PHP应用程序中(包括其它非PHP的数据库应用),,每个请求或者说进程/线程均直接与MySQL服务器对话直接查询,并维护这条连接直到程序或请求结束,但是在高并发或大量持久连接(应用程序为持久进程)时,对于MYSQL等各类数据库服务器来说负载相当重。

这里的dbproxy的想法就是:让PHP直接与dbproxy对话, 而dbproxy与MYSQL直接对话,起到一个中介代理作用。
PHP ---> dbproxy ---> mysql 

dbproxy本身是一个单进程轮循服务的守护程序,它维护着一条MYSQL连接(暂时只访问一个库),大量来自PHP的数据库查询请求均由dbproxy进行代理查询,所以看起来一般情况下用dbproxy的效率反而会比直接与MYSQL相连来得差。但dbproxy针对各类查询设计了一套缓冲系统,有效的降低了数据库的负荷,避免某些高并发的应用经常出现 too many connections 的错误,一个dbproxy可以方便的允许大量并发连接的起起落落而不影响到 MYSQL 服务器本身。
1> 对于SELECT缓冲策略: 针对完整的SQL语句求出 md5值,将查询结果句柄缓存,最多缓存 1000个, 超出后删除最早进来的,取缓存时对比时间戳记和md5值,缓冲有效时间可以自己设定。
2> 对于UPDATE/INSERT... 类的缓存策略:是将SQL语句放到一个队列中,等主进程比较闲的时候再把数据统一发向数据库,会造成写入延迟,对于不太重要的数据可以这么操作。

dbproxy作为一个中间件,需要常驻内存,如果开发一个dbproxy中间件,最好用C/C++语言来开发守护程序。由于PHP多数用于web请求(一个进程/线程一会儿就结束了),并没有大规模用于长驻进程,用PHP做长驻程序可能效果不好甚至可能有重大隐患。

你可能感兴趣的:(缓存,dbproxy)