关于PHP数据库连接池

在最近一个项目中,为了统一数据接口,搭建可扩展性较强的程序架构,CTO要求构建一个数据库中间层,实现对数 据的统一操作,所有的数据请求都通过这个中间层来分发,其


实也就是相当于建立一个数据库连接池,最后写一个统一的数据接口,这个问题在java中可以轻松 搞定,因为java有很多开源的比较成熟的数据库连接池程序,而且java本身也支


持这种对象映射,可是PHP实现起来就非常的麻烦,甚至是一项不可能完 成的任务。
其实,有一个开源的数据库连接池程序可以使用:sqlrelay,它支持的数据库非常多,常见的 MySQL,mssql/oracle都自不用说,不过这个程序的效率却一直广受诟病,也为它的


推广使用带来了很多障碍。尤其国内应用的非常少,几乎没有 什么中文的使用感受和文档可用,操作sqlrelay的class也只有陶峰写过一个。抛开效率不谈,sqlrelay还是非常优


秀的,至少是一个不错的 选择。


关于sqlrelay的安装配置和使用方法,本站将另文详述。本文重点在于扫盲,介绍一下数据库连接池的基本知 识。


数据库连接池的工作机制是什么?它怎么提高数据的访问速度呢?  
---------------------------------------------------------------  


连接池的作用主要是节省打开数据库的时间。  
由于打开数据库连接比较耗时,所以连接池机制预先打开N个数据库连接,把它们缓存起来,当需要使用数据库的时候就直接使用这些已经打开的连接,从而节省了 时间。 
---------------------------------------------------------------  
 
创建新的对象并初始化的操作,可能会消耗很多的时间。在这种对象的初始化工作包含了一些费时的操作(例如,从一台位于20,000千米以外的主机上读出一 些数据)的时候,尤


其是这样。在需要大量生成这样的对象的时候,就可能会对性能造成一些不可忽略的影响。要缓解这个问题,除了选用更好的硬件和更棒的虚拟 机以外,适当地采用一些能够减少


对象创建次数的编码技巧,也是一种有效的对策。对象池化技术(Object Pooling)就是这方面的著名技巧.  


对象池化的基本思路是:将用过的对象保存起来,等下一次需要这种对象的时候,再拿出来重复使用,从而在一定程度上减少频繁创建对象所造成的开销。用于充当 保存对象的“


容器”的对象,被称为“对象池”(Object Pool,或简称Pool)。  


数据库连接pool是专门保存和管理数据库连接的pool.  


恰当地使用对象池化技术,可以有效地减少对象生成和初始化时的消耗,提高系统的运行效率。  


采用对象池化的本意,是要通过减少对象生成的次数,减少花在对象初始化上面的开销,从而提高整体的性能。然而池化处理本身也要付出代价,因此,并非任何情 况下都适合采


用对象池化。    


基本上,只在重复生成某种对象的操作成为影响性能的关键因素的时候,才适合进行对象池化。如果进行池化所能带来的性能提高并不重要的话,还是不采用对象池 化技术,以保


持代码的简明,而使用更好的硬件和更棒的虚拟机来提高性能为佳。    


恰当地使用对象池化,可以有效地降低频繁生成某些对象所造成的开销,从而提高整体的性能。而借助Jakarta Commons  Pool组件,可以有效地减少花在处理对象池化上的工作量


,进而,向其它重要的工作里,投入更多的时间和精力。


数据库连接池的原理:


J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。
客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。
如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。
当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值