高并发访问下数据库连接池的研究与设计
2017-06-01董鹏李海涛
董鹏 李海涛
摘要:随着互联网网络的快速发展,互联网通讯技术也得到了飞速的提高,与此同时,用户对与网络的要求也是日益增好。现在对于通讯访问的便捷性和高校性,已经成为现在网络通讯的宗旨,然而随着网络技术的提高,随之而来的问题也是接踵而至,在网络访问中,最为复杂也就属远程数据库访问了,在访问用户以较少的情況下,访问效果并不会受到太大的影响。但是网络的环境是复杂多变的,大型的网络数据库是不可能只有极少数的用户访问,如果还是采用传统的访问模式的话,就很有可能会造成许多问题,如用户等待时间过长、系统崩溃等问题,随各种模式的连接池开始脱颖而出“连接池”,解决了现有网络高并发的访问难题,而对于数据库连接池的性能优化却很少被研究,该文主要研究如何将数据库连接池的性能达到最优化。
关键词:互联网;高并发;数据库连接池
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2017)08-0001-03
1背景
传统的数据库访问是非常简单和笨拙的,以Connection数据库连接为例,在最初的数据库用户访问时,为了实现用户访问的同步性,我们为每一个请求访问的链接创建新的Connec-tion数据库连接接口,等此访问结束后再将其Connection接口关闭和内存释放。在这种情况下,如果用户访问数不高,且服务器性能非常高的话,用户对等待时间还可以接受,而当用户访问数非常高时,则在同时访问的用户中,最后一位完成访问的用户将会等待比较长的时间。
在连接方式方式,数据库连接又存在着长连接和短连接的情况,下面我们了解一下什么是长连接和短连接:所谓长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差,所谓短连接指建立SOCKET连接后发送后接收完数据后马上断开连接,一般银行都使用短连接。长连接就是指在基于tcp的通讯中,一直保持连接,不管当前是否发送或者接收数据。短连接就是只有在有数据传输的时候才进行连接,客户一服务器通信/传输数据完毕就关闭连接。长连接就是在程序生命周期当中使用同一个或者多个数据库连接短连接一般就是每一个操作都要打开和关闭数据库连接长连接,启动客户端进行唯一连接,只要进程不退出,则不断开此连接;短连接,每次操作数据库进行连接,操作完成之后关闭连接,下次再操作再建立连接。
而多数远程数据访问(网路访问)多是以短连接的形式为主,因为这样可以节省服务器资源,并能在短时间内接受更多的用户访问。而服务器资源的有限性和用户访问的庞大,使得传统的访问方式的笨拙性表现了出来,所以拿出一套能够有效地提高访问效率的方法产生:连接池的出现。
在实际应用开发中,数据库连接池技术的思想非常简单,将数据库连接作为对象存储在一个Vector对象中,一旦数据库连接建立后,不同的数据库访问请求就可以共享这些连接,这样,通过复用这些已经建立的数据库连接,可以克服上述缺点,极大地节省系统资源和时间。
数据库连接池的主要操作如下:
1)建立数据库连接池对象(服务器启动)。
2)按照事先指定的参数创建初始数量的数据库连接(即:空闲连接数)。
3)对于一个数据库访问请求,直接从连接池中得到一个连接。如果数据库连接池对象中没有空闲的连接,且连接数没有达到最大(即:最大活跃连接数),创建一个新的数据库连接。
4)存取数据库。
5)关闭数据库,释放所有数据库连接(此时的关闭数据库连接,并非真正关闭,而是将其放入空闲队列中。如实际空闲连接数大于初始空闲连接数则释放连接)。
6)释放数据库连接池对象(服务器停止、维护期间,释放数据库连接池对象,并释放所有连接)。
1.1系统设计
1.1.1使用到的技术和工具
1)数据库:MySQL6.6
2)开发工具Eclipse4.4
3)编程语言:java1.7
4)UML建模
5)Socket通信
6)JDBC应用
1.2模块化设计
系统可分为以下几大模块:客户端用户登录,访问用户在访问前首先要进行的登陆及与服务器端先实现通讯连接,只有这样才能让用户在之后的访问实现即时通讯;服务器端管理访问,在大量用户同时访问时,需要服务器端使用数据库连接池对数据访问进行有效的管理;数据库查询,通过连接对数据库信息表进行索引查询,并将信息返回给服务器端,服务器端在转交给客户端。如图3、4、5所示:
在客户端访问中,可重复性访问的方式多采用数据库短连接访问,这样可以减少服务器端的负载。
服务器端界面设计含有:对话框区,广播区和用户列表区。分别是用来客户端发送信息,显示用户发送信息和广播信息,存储用户名列表。由于服务器端需要同时连接客户端和服务器,所以程序复杂性较高。
2数据库连接池的测试与分析
2.1有连接池与没有连接池访问的性能对比测试
为了测试数据连接池的性能,在设计时同时设计了没有连接池的数据访问情况,并对他们的数据访问情况进行了有效的统计和审核,并将它们规范征表格,以二维数组表的形式表现出来。以下为两个访问的对比数据。
2.1.1做1000个用户并发的测试
1)本地测试
首先我们将使用本地服务器作为资源,通过测试得出本地数据库访问情况的以下列表:
由以上两个表,可得到图6有连接池访问与无连接池访问的线性关系:(此数据库条数为100条):
由线性关系图6不难看出,有连接池的访问总体优于没有连接池的数据库访问,而随连接容器中的最大连接数的增多,数据库的访问性能并不是在一直提高,而是呈现一种抛物线模式,在30~40之间达到最高效率。
当单个用户数据查询条数增加到1000条时,的线性关系图如下:
由图7可以看出基本和之前的访问情况相似,但是最优连接池容量数发生了变化,区间大约在10与20之间。
2)远程测试
为了保证数据的有效性和真实性,将本地测试数据架设到远程互联网服务器上进行访问访问与测试,得到以下列表数据:
由表3数据生成远程访问有连接池与无连接池的线性关系图:(100条数据库记录j
通过比较图6与图8可以发现,远程访问数据的结果基本和本机测试数据一致。
把单个用户数据库查询条数增致1000条信息的远程访问线形图:
由图9和图7作比较,可得出远程访问的数据访问条数增多的结果也基本和本机测试一致。
通过上面两个表对比,不难发现,当单个用户访问数据库查询信息的数量不同,两个表的最优数据连接数区间也会有所不同。
这是因为,当一个用户访问占用了太多的查询资源时,数据库的并发性能下降,在这个时候数据库连接池容器中有太多的激活链接并不会提高访问效率,反而会增加服务器的负担,使访问效率降低。
3实验结果
3.1数据集
本次试验数据采用的通过模拟1000位用户集访问的方-法,分别对本地服务器与远程互联网服务器上的设计出来的数据库连接池做了访问实验,并通过修改数据库查询条件(100条1000条)得到不同情况下数据库的性能指标。
3.2实验结论
由以上图表结果可以得出在并发量比较大的数据库访问中,有数据库连接池的访问效率要远远高于没有连接池的访问。而数据库的访问效率并不会完全跟随数据库连接池容器中连接个数的增多而一直提高,通过实验我们会发现连接池的最优连接数是有一个区间的,连接池中最大连接数高于或低于这个数值都会造成数据库访问的性能下降。而且连接数的最优区间会因访问环境的变化而变动。
当我们连接任何数据库时,数据库连接的初始化是一个非常耗资源的操作,所以当性能问题出现时,只是一味地加大数据库连接池往往并不能提高性能。通常我们需要,先将数据库连接池的大小增大一倍,看看是否可以解決性能问题,如果可以,再逐步减少数据库连接池的值,找到性能瓶颈以及达到最优性能时连接池的大小。一般来讲,数据库连接池的值小于Web容器线程池的值是比较好的选择。
4结束语
本文提出了验证数据库连接池存在最优区间的方法。在不同的系统应用中,对数据库连接池的调优都是非常必要的。由于数据库连接池的最大连接数会由于访问环境的不同而有所不同,所以在实际的环境中,我们可以利工具去监控数据库连接池的使用情况,以此来调整数据库连接池的大小,从而确定最优的调优策略。可以从数据工具下监测值中寻找答案。