- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Web应用程序中采用数据库连接池技术必要性研究
Web应用程序中采用数据库连接池技术必要性研究
摘要:Web应用系统大多需要数据库的支持,数据库访问方式的选择极大地影响了应用系统的性能。针对Internet的数据库访问环境,在实践的的基础上阐述了数据库连接池产生的原因?p讨论了使用连接池技术的数据库连接管理的必要性并给出了一个实现模型。
关键词:分布式数据库 数据库访问 连接池
中图分类号: TP311.11 文献标识码:A 文章编号:1007-9416(2011)10-0139-02
连接池最基本的思想就是预先建立一些连接放置于内存对象中以备使用,利用连接池技术可以帮助解决基于数据库的Web系统中所存在的瓶颈问题。
1、数据库连接池产生的原因
一般情况下,在使用开发基于数据库的Web程序时,传统的模式基本是按以下步骤:
(1)在主程序(如Servlet、Beans)中建立数据库连接。(2)进行SQL操作,取出数据。(3)断开数据库连接。使用这种模式开发存在很多问题。首先,我们要为每一次Web请求(例如查看某一篇文章的内容)建立一次数据库连接,对于一次或几次操作来讲,或许你觉察不到系统的开销,但是,对于Web程序来讲,即使在某一较短的时间内,其操作请求数也远远不是一两次,而是数十、上百次(想想全世界的网友都有可能在你的网页上查找资料),在这种情况下,系统开销是相当大的。事实上,在一个基于数据库的Web系统中,建立数据库连接的操作将是系统中代价最大的操作之一。很多时候,可能你的网站速度瓶颈就在于此。其次,使用传统的模式,你必须去管理每一连接,确保它们能被正确关闭,如果出现程序异常而导致某些连接未能关闭,将导致数据库系统中的内存泄漏,最终我们将不得不重启数据库。
2、采用数据库连接池的必要性
针对以上问题,我们首先想到可以采用一个全局的Connection对象,创建后就不关闭,以后程序一直使用它,这样就不存在每次创建、关闭连接的问题了。但是,同一个连接使用次数过多,将会导致连接的不稳定,近而会导致Web Server的频频重启。故而,这种方法也不可取。实际上,我们可以使用连接池技术来解决上述问题。首先介绍一下连接池的基本原理。顾名思义,连接池最基本的思想就是预先建立一些连接放置于内存对象中以备使用,如图1所示。
如图1所示,当程序中需要建立数据库连接时,只需从内存中取一个来用而不用新建。同样,使用完毕后,只需放回内存即可。而连接的建立、断开都由连接池自身来管理。同时,我们还可以通过设置连接池的参数来控制连接池中的连接数、每个连接的最大使用次数,等等。通过使用连接池,将大大提高程序效率,同时,我们可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。下面我们以一个名为ConnectionPool的连接池为例来看看连接池的实现。先看看ConnectionPool的基本属性。
p_ConnectionPoolSize:连接池中连接数量下限
p_ConnectionPoolMax:连接池中连接数量上限
p_ConnectionPoolUseCount:一个连接的最大使用次数
p_ConnectionTimeout:一个连接的最长空闲时间
p_MaxConnections=-1:同一时间的最大连接数
p_timer:定时器
这些属性定义了连接池与其中的每个连接的有效状态值。连接池的自我管理,实际上就是指通过定时地对每个连接的状态、连接的数量进行判断而进行相应操作。
我们根据需求可以定义出ConnectionPool要完成管理所需要的基本接口:Public class ConnectionPool implementsTimerL istener{
public Boolean initialize( ) //初始化连接池
public void destroy( ) //连接池的销毁
public synchronized java.sql.Connection getConnection ( ) //取一个连接
public synchronized void close( ) //关闭一个连接
private synchronized void removeFromPool( ) //把一个连接从连接池中删除
private synchronized void fillPool() //维护连接池大小
public synchronizedvoid TimerEvent()//定时器事件处理函数
}
通过这几个接口,已经可以完成连接池的基本管理。在TimerEvent()函数中完成连接池的状态检验工作,fil
文档评论(0)