连接池技术和数据库事务文档-20121031.doc

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
连接池和数据库事务的使用 文档目的 该文档指导项目开发过程中,关于连接池技术和数据库事务的原理以及他们在项目中使用是如何被使用等问题提供参考。以便开发人员理解并使用这些技术用于开发项目,减少项目存在的隐患风险以及提高项目开发效率等。 连接池技术的应 连接池的历史 数据库连接技术或者池化技术应该很早就有了。 1990年JAVA发明的时候,世界上应该就有连接池技术了。一般为专有技术,但真正大面积使用这个技术应该到90年代末。 2002年8月份开源的dbcp发布,意味着已经可以非常方便安全的使用连接池技术。 连接池的作用 数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。 连接池的工作原理 建立连接是一个费时的活动,每次都得花费0.05s~1s的时间,而且系统还要分配内存资源。这个时间对于一次或几次数据库操作,或许感觉不出系统有多大的开销。可是对于现在的Web应用,尤其是大型电子商务网站,同时有几百人甚至几千人在线是很正常的事。在这种情况下,频繁的进行数据库连接操作势必占用很多的系统资源,网站的响应速度必定下降,严重的甚至会造成服务器的崩溃。不是危言耸听,这就是制约某些电子商务网站发展的技术瓶颈问题。其次,对于每一次数据库连接,使用完后都得断开。否则,如果程序出现异常而未能关闭,将会导致数据库系统中的内存泄漏,最终将不得不重启数据库。还有,这种开发不能控制被创建的连接对象数,系统资源会被毫无顾及的分配出去,如连接过多,也可能导致内存泄漏,服务器崩溃。150个,一般好一点的服务器会配到300个。所以如果没有正确关闭连接,正式系统上线,只需要几分钟就绝对崩溃了。这种情况一般不会发生,我们仅讨论一下如果不用连接池,自己每次打开连接并关闭的情况。 随便以一个网站,如12345为例,页面有数据的内容有10块,其至少产生10次查询。假设进首页的人反应比较慢,他可能需要30秒才能找到自己感兴趣的内容并且点到详细页面。那么相当于3秒有一次数据库连接的创建。如果数据库连接耗时平均为0.5秒。那么这个网站只要900人在线就有可能发生崩溃。而根据峰值定律。他只需要180人在线,就有崩溃的危险。这个崩溃的概率不仅停留在理论上。我们随便一个正式的应用,都可以轻易突破180人。 结论:正式项目中任何功能必须使用连接池。 对于共享资源,有一个很著名的设计模式:资源池(Resource Pool)。该模式正是为了解决资源的频繁分配﹑释放所造成的问题。为解决上述问题,可以采用数据库连接池技术。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量﹑使用情况,为系统开发﹑测试及性能调整提供依据。连接池的基本工作原理见下图 性能比较(连接耗时——通过不断循环n次获取连接和释放连接) 连接次数 分类 10 20 30 40 50 100 连接池 343ms 345ms 335ms 338ms 336ms 337ms 创建连接 594ms 1165ms 1875ms 2291ms 2895ms 6179ms 安全性 可以控制创建出来的数据库连接数,并管理好这些连接,在某个连接超过最大空闲时间时,连接池可以将这个连接交还给数据库,防止数据的崩溃;若连接数小于最小连接数则新建一个新的连接到连接池中,保证连接池中有最小连接数。同时还可以防止应用因为无限创建连接造成巨大的资源开销。 连接池可能有的副作用 连接池的连接数达到最大连接数时,则不能再创建新的连接,需要等待其他连接的释放才能获取到连接。 假如调用的连接没有及时释放回连接池中去,而连接池中没有空闲的连接时,连接池就需要去创建新的连接,当达到最大连接数时,就会发生(1)的情况,所以在项目开发过程中,要注意及时地将用完结束的连接释放到连接池中去。 使用连接池时,要根据项目需求配置好合理的初始连接数和最大连接数,初始连接数太小,对于高并发的访问空闲连接数不足时需要去创建新的连接,这样换来的代价高。初始连接数太大,启动初始化时时间比较长,而项目不需要这么多连接,造成资源浪费。 在项目中有可能用到的开源的连接池主要有DBCP、c3p0、proxool和BoneCP,还有其他的开源连接池还有DDConnectionBroker、DBPoo、XAPool、Primrose、SmartPool

文档评论(0)

gangshou + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档