一、引言
近年来,随着 Internet/Intranet 建网技术的飞速发展和在世界范围内的迅速普及,电子商务的冲击波又一次在世界范围内掀起巨浪,各类商务网站吸引着大量用户的青睐,商务网站的访问量也就越来越大。这种批量、并发性的访问使得商务网站对用户的响应速度会明显变慢,甚至有可能使用户无法登陆网站。不堪重荷的商务网站管理公司,除了提高和优化网站服务器的整体性能外,目标也同时转向程序设计方面,数据库的连接性能优化方面已经成为重点。JAVA 语言的跨平台性、可移植性及安全性等特性,使其应用越来越广泛,尤其在网络应用中更显优势。采用以 JAVA 语言为基础的连接池技术是解决连接数据库瓶颈的一种很好的解决方案。它能够高效地实现数据库连接的管理,从而使系统性能获得显著的改善。
二、传统模式数据连接的分析
一般情况下,在使用 JAVA 开发基于数据库的 Web 程序时,传统的开发模式基本是按以下步骤:首先在主程序(如 Servlet、Beans)中建立数据库连接;然后进行 SQL 操作,对数据库中的对象进行插入、修改和删除等操作;最后断开数据库连接。
从图 1 中可以看出,这种开发模式虽然对程序设计和开发者来说比较简单,但也存在很多问题。对于一个简单的数据库应用,由于数据库的访问不是很频繁,只需要在访问数据库时创建一个连接,用完后就关闭它,这样做不会明显地增大系统的开销。但是对于一个复杂的数据库应用,情况就完全不同:
- 首先,频繁的建立、关闭数据库,会极大的降低系统的性能,增大系统的开销,导致网站的响应速度下降,严重的甚至会造成服务器的崩溃,成为系统的瓶颈。
- 其次,使用这种传统的模式,还必须管理数据库的每一个连接,以确保他们使用完后都得断开。否则,如果程序出现异常而未能关闭,将会导致数据库系统中的内存泄漏,最终将不得不重启数据库。、
- 最后,这种开发不能控制被创建的连接对象数,系统资源会被毫无顾及地分配出去,如连接过多,也可能导致内存泄漏,服务器崩溃。
因此采用运行速度更快、数据库访问效率更高的数据库技术,以提高系统的运行效率将是至关重要的。
三、连接池的解决方案
上述问题的产生根源是在对连接资源的低效管理,采用数据连接池能够很好地解决此类问题,避免了对于连接的任意、无规则地使用。
连接池是众多连接对象的“缓冲存储池”,也就是连接对象的集合体,其核心思想是预先建立一些数据库连接的对象并放置于内存中以备使用(图 2)。当程序中需要建立数据库连接时,只需从内存对象(连接池)中取一个来用而不用新建。同样,使用完毕后,只需放回内存即可。而连接的建立、断开都由连接池自身来管理。同时,还可以通过设置连接池的参数来控制连接池中的连接数、每个连接的最大使用次数等等。
连接池主要由 3 部分组成:连接池的建立、连接池中连接的使用管理、连接池的关闭。具体分析涉及以下方面: