ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:39.74KB ,
资源ID:10615428      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10615428.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(连接池技术和数据库事务文档1031资料.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

连接池技术和数据库事务文档1031资料.docx

1、连接池技术和数据库事务文档1031资料连接池和数据库事务的使用1. 文档目的该文档指导项目开发过程中,关于连接池技术和数据库事务的原理以及他们在项目中使用是如何被使用等问题提供参考。以便开发人员理解并使用这些技术用于开发项目,减少项目存在的隐患风险以及提高项目开发效率等。2. 连接池技术的应用2.1. 连接池的历史数据库连接技术或者池化技术应该很早就有了。1990年JAVA发明的时候,世界上应该就有连接池技术了。一般为专有技术,但真正大面积使用这个技术应该到90年代末。2002年8月份开源的dbcp发布,意味着已经可以非常方便安全的使用连接池技术。2.2. 连接池的作用数据库连接池负责分配、管

2、理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这样一来可以大大减小应用程序中频繁创建和销毁连接对象的操作次数,降低服务器端的开销。这项技术能明显提高对数据库操作的性能。2.3. 连接池的工作原理建立连接是一个费时的活动,每次都得花费0.05s1s的时间,而且系统还要分配内存资源。这个时间对于一次或几次数据库操作,或许感觉不出系统有多大的开销。可是对于现在的Web应用,尤其是大型电子商务网站,同时有几百人甚至几千人在线是很正常的事。在这种情况下,频繁的进行数据库连接

3、操作势必占用很多的系统资源,网站的响应速度必定下降,严重的甚至会造成服务器的崩溃。不是危言耸听,这就是制约某些电子商务网站发展的技术瓶颈问题。其次,对于每一次数据库连接,使用完后都得断开。否则,如果程序出现异常而未能关闭,将会导致数据库系统中的内存泄漏,最终将不得不重启数据库。还有,这种开发不能控制被创建的连接对象数,系统资源会被毫无顾及的分配出去,如连接过多,也可能导致内存泄漏,服务器崩溃。数据库连接默认只有150个,一般好一点的服务器会配到300个。所以如果没有正确关闭连接,正式系统上线,只需要几分钟就绝对崩溃了。这种情况一般不会发生,我们仅讨论一下如果不用连接池,自己每次打开连接并关闭的

4、情况。随便以一个网站,如12345为例,页面有数据的内容有10块,其至少产生10次查询。假设进首页的人反应比较慢,他可能需要30秒才能找到自己感兴趣的内容并且点到详细页面。那么相当于3秒有一次数据库连接的创建。如果数据库连接耗时平均为0.5秒。那么这个网站只要900人在线就有可能发生崩溃。而根据峰值定律。他只需要180人在线,就有崩溃的危险。这个崩溃的概率不仅停留在理论上。我们随便一个正式的应用,都可以轻易突破180人。结论:正式项目中任何功能必须使用连接池。对于共享资源,有一个很著名的设计模式:资源池(Resource Pool)。该模式正是为了解决资源的频繁分配释放所造成的问题。为解决上述

5、问题,可以采用数据库连接池技术。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量使用情况,为系统开发测试及性能调整提供依据。连接池的基本工作原理见下图。2.4. 连接池带来的性能提升和安全性性能比较(连接耗时通过不断循环n次获取连接和释放连接)连接次数分类1020304050100连接池343ms345ms335ms338ms336ms337ms创建连接5

6、94ms1165ms1875ms2291ms2895ms6179ms安全性可以控制创建出来的数据库连接数,并管理好这些连接,在某个连接超过最大空闲时间时,连接池可以将这个连接交还给数据库,防止数据的崩溃;若连接数小于最小连接数则新建一个新的连接到连接池中,保证连接池中有最小连接数。同时还可以防止应用因为无限创建连接造成巨大的资源开销。2.5. 连接池可能有的副作用(1) 连接池的连接数达到最大连接数时,则不能再创建新的连接,需要等待其他连接的释放才能获取到连接。(2) 假如调用的连接没有及时释放回连接池中去,而连接池中没有空闲的连接时,连接池就需要去创建新的连接,当达到最大连接数时,就会发生(

7、1)的情况,所以在项目开发过程中,要注意及时地将用完结束的连接释放到连接池中去。(3) 使用连接池时,要根据项目需求配置好合理的初始连接数和最大连接数,初始连接数太小,对于高并发的访问空闲连接数不足时需要去创建新的连接,这样换来的代价高。初始连接数太大,启动初始化时时间比较长,而项目不需要这么多连接,造成资源浪费。2.6. 几种连接池的对比在项目中有可能用到的开源的连接池主要有DBCP、c3p0、proxool和BoneCP,还有其他的开源连接池还有DDConnectionBroker、DBPoo、XAPool、Primrose、SmartPool等。下面主要是DBCP、c3p0、proxoo

8、l和BoneCP这四个开源连接池的比较。1. DBCP连接池DBCP可能是使用最多的开源连接池,原因大概是因为配置方便,而且很多开源和tomcat应用例子都是使用的这个连接池吧。这个连接池可以设置最大和最小连接,连接等待时间等,基本功能都有。使用评价:在具体项目应用中,发现此连接池的持续运行的稳定性还是可以,不过速度稍慢,在大并发量的压力下稳定性有所下降,此外不提供连接池监控。配置:需要导入的包:commons-dbcp.jar和commons-pool.jar(或者用tomcat-dbcp.jar一个包就行)以及数据库驱动包(下略。其中oracle为classes12.jar;mysql为m

9、ysql-connector-java-5.0.8-bin.jar等)applicationContext.xml中配置如下: (主页:http:/commons.apache.org/dbcp/)2. c3p0连接池c3p0是另外一个开源的连接池,在业界也是比较有名的,这个连接池可以设置最大和最小连接,连接等待时间等,基本功能都有。使用评价:在具体项目应用中,发现此连接池的持续运行的稳定性相当不错,在大并发量的压力下稳定性也有一定保证,此外不提供连接池监控。c3p0有自动回收空闲连接功能,连接池解决了dbcp无法自动重连问题。配置:需要导入的包:c3p0-0.9.1.2.jar(这个包本身导

10、入spring库的时候就已经导入)以及数据库驱动包。applicationContext.xml中配置如下: (主页:3. Proxool连接池Proxool这个连接池可能用到的人比较少,但也有一定知名度,这个连接池可以设置最大和最小连接,连接等待时间等,基本功能都有。使用评价:在具体项目应用中,发现此连接池的持续运行的稳定性有一定问题,有一个需要长时间跑批的任务场景任务,同样的代码在其他的开源连接池中成功结束,但在Proxool中出现异常退出。但是Proxool有一个优势-连接池监控。配置:需要导入的包:proxool-0.9.1.jar和proxool-cglib.jar以及数据库驱动包。

11、配置方法一:与其他连接池的配置类似,直接在applicationContext.xml中配置: 配置方法二: 在WebRoot/WEB-INF下新建一个proxool.xml文件,内容如下: usernameDb jdbc:oracle:thin:127.0.0.1:1521:orcl oracle.jdbc.driver.OracleDriver 30 10 select 1 from dual 在web.xml中调用proxool.xml,配置如下: proxoolServletConfigurator org.logicalcobwebs.proxool.configuration.Se

12、rvletConfigurator xmlFile WEB-INF/proxool.xml 1在applicationContext.xml中的配置如下: 由于proxool连接可以对连接池进行监控,在web.xml中配置 proxoolAdmin org.logicalcobwebs.proxool.admin.servlet.AdminServlet proxoolAdmin /proxoolAdmin 通过访问proxoolAdmin即可监控连接池的情况(主页:4. BoneCP连接池BoneCP是一个快速,开源的数据库连接池,可以设置最大和最小连接,连接等待时间等,基本功能都有。使用评

13、价:BoneCP连接池帮你管理数据连接让你的应用程序能更快速地访问数据库,比c3p0/DBCP连接池快25倍,并且有自动连接验证和自动重播任何失败的交易的能力(数据库/网络出现故障等情况下),但它的持续运行的稳定性有一定问题。配置: 需要导入的包:bonecp-0.7.1-rc1.jar、guava-r07.jar、slf4j-api-1.5.8.jar和slf4j-log4j12-1.5.8.jar(这些包从官网上下载下来的时候是zip压缩包,将拓展名改为jar就可以了)以及数据库驱动包。applicationContext.xml中配置如下: (主页:总结: 综上所述,这几种开源连接池各有

14、优劣,看了网络上很多评论,大都推荐使用DBCP和c3p0,经检验这种连接池性能稳定,承压能力强。而Proxool尽管有明显的性能问题,但由于它具备监控功能,因此建议在开发测试时使用,有助于确定是否有连接没有被关掉,可以排除一些代码的性能问题。BoneCP拥有很高的性能,但是稳定性有一定问题。另外,各连接池配置常用的一些参数比较如下(参考网址:DBCPc3p0proxoolboneCP数据库用户名称UsernameUserusername数据库密码PasswordPasswordpassword驱动名称DriverClassNameDriverClassdriver-classdriverCla

15、ssJdbc连接串UrlJdbcUrldriver-urljdbcUrl初始化大小InitialSizeInitialPoolSize连接池最小空闲MinIdleMinPoolSizeminimum-connection-countminConnectionsPerPartition连接池最大空闲MaxIdle连接池最大使用连接数量MaxActiveMaxPoolSizemaximum-connection-countmaxConnectionsPerPartition最小逐出时间MinEvictableIdleTimeMillismaxIdleTimehouse-keeping-sleep-

16、time获取连接时测试是否有效TestOnBorrowTestConnectionOnCheckouttest-before-use归还连接时是否测试有效TestOnReturnTestConnectionOnCheckintest-after-use连接空闲时测试是否有效TestWhileIdle获取连接最大等待时间maxWait性能比较,模拟A个线程循环B次并发访问数据库对比:(网络参考数据,参考网址:连接池并发数DBCPc3p0proxoolboneCP10A10B1188ms953ms1625ms63ms20A10B1204ms1000ms1640ms110ms30A10B1250ms

17、1047ms1657ms156ms50A10B1406ms1343ms1843ms172ms100A10B1641ms2703ms2031ms532ms200A10B2093ms4891ms2406ms936ms500A10B3219ms11703ms3343ms1922ms1000A10B5187ms12563ms4703ms3610ms3000A10B14094ms16297ms11344ms11391ms5000A10B23610ms22032ms20125ms17125ms现在主流的连接池不多,一般选择主流,因为他有很多人共同发现问题,共同调优,并且版本在跟进。DBCP 和C3P0 一

18、般是选择最多的。因为连接池性能本身已经挺高了。所以如果不是极端情况,并不过分关心性能。而他们最主要的区别是。如果某个连接断掉(比如网络不稳定),C3P0会一直等待到超时,如果这期间恢复了连接,他就平滑过渡。这个特性也不一定就算好事,如果页面访问量大,这个特性可能导致页面等待多了,发生拒绝访问。根据项目需要选用。另外hibernate3早期,因为DBCP的BUG而放弃对DBCP的支持。现在这个BUG应该不需要太过在意。但是配置的时候,请参考阮杰锋在JIRA上记载的经验。但如果我们使用专业服务器。比如weblogic或websphere的时候。他们自带连接池,而且他们操作图形化,非常方便的调优和监控,往往也能带来便利。不过这些服务器要钱,只有项目中允许,才能使用。 property name=us

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1