所有提交的电磁系统将被重定向到在线手稿提交系统。作者请直接提交文章在线手稿提交系统各自的杂志。

实现连接池没有特定的包

辛格Satpal Kushwaha1,Gurleen Virdi2
  1. 助理教授,CSE称,现代技术研究所与研究中心,Alwar,拉贾斯坦邦,印度
  2. M。科技学者,CSE称,现代技术研究所和研究中心,Alwar,拉贾斯坦邦,印度
相关文章Pubmed,谷歌学者

访问更多的相关文章国际期刊的创新在计算机和通信工程的研究

文摘

体积的增加用户的信息在数据检索提出了挑战随着越来越多的用户的数量,更多的数据量和并发数据访问的必要性。因此,加快任何应用程序的数据检索是至关重要的。使用传统方法进行数据库连接成为一个瓶颈。一个有效的解决方案提供的数据库连接池已经各种人员,因此,数据库供应商。但是所有的解决方案到现在重应用程序提供了成千上万的用户同时需要一个数据库连接。这类应用程序的完全可行的使用沉重的包和特定于供应商的司机和api。但当我们减少应用程序以较小的组织就像一个大学管理、店铺管理应用程序,一个医院管理应用程序,可能几数百个用户访问,但足以阻塞数据库服务器,这些沉重的包解决方案有一些开销。在本文中,我们试图缩小这一概念,试图实现相同的连接池校长但没有使用特定于供应商的驱动程序或池特定的包。

关键字

数据库连接池、扩展

我的介绍。

“数据库”指的是数据本身和支持数据结构。数据库创建大量的信息输入,存储、检索和管理信息[1]。随着科技的进步,信息交换和保存了一个巨大的增长。JDBC提供了一个用于访问关系数据库的标准库。使用JDBC API,可以获得各种不同的SQL数据库完全相同的Java语法。有七个标准步骤查询数据库[2]:1。加载JDBC驱动程序2。3定义连接URL。4建立连接。创建一个声明对象5。 Execute a query or update 6. Process the results 7. Close the connection
打开一个连接到一个数据库是一个耗时的过程。对于短的查询,它可以打开连接需要更长的时间比执行实际的数据库检索。因此,在应用程序重用连接对象反复连接到同一个数据库中。来了需要和连接池的概念的重要性。
“连接池”传播跨几个用户请求连接开销,从而节约资源为未来的请求。它可以提高应用程序的响应时间,需要连接,尤其是基于web的应用程序。但如果我们说小的用户数量,但足够大油门数据库服务器,然后我们需要找到解决方案。这是因为我们必须依赖供应商特定的用户,完成“单界面多使用”的Java应用程序的概念。同时,包用于实现连接池机制创建开销小缩放应用程序在内存中。

二世。相关工作

连接池技术的基本思想是pre-establish一些连接对象并将其保存在内存使用,当需要建立数据库连接程序只采取一个使用从内存中没有新的,使用后只需要替换它们在内存中,建立和断开的链接都是由连接池管理本身[3]。一个连接池类应该能够执行以下任务:
1。Preallocate连接:提前分配更多的连接速度东西如果会有许多并发请求,但引起初始延误。
2。管理可用连接:如果需要连接和一个空闲连接可用,把它放在忙连接的列表,然后返回它。
3所示。分配新连接:如果连接是必需的,没有可用的空闲连接,然后连接限制没有达到,开始一个后台线程分配一个新的连接。然后,等待第一个可用的连接,是否新分配的。
4所示。等待连接可用:这种情况发生在没有空闲的连接,你达到的限制连接数。这个等待应该没有不断的轮询。
5。密切联系时要求:注意,连接关闭垃圾收集时,你不总是显式关闭它们。但是,你有时会想要更多的显式控制过程[2]。
集中的连接池的配置参数[3]包括:
1。Min-Connections建立了连接池,即空闲连接保持动态连接池;
2。最大连接在连接池;
3所示。连接保持动态连接池中
最大连接= Min-Connections +连接;
4所示。Wait-Connection-Times没有空闲连接;
5。Connection-Use-Count;
6。Wait-Release-Time。
c3p0包[4]是一个易于使用的库进行传统JDBC驱动程序“企业级”通过增加功能定义的jdbc3 jdbc2规范和可选的扩展。c3p0希望提供数据源实现多适合使用大容量“J2EE企业应用程序”。
“commons-dbcp”包由Apache依赖代码[5]commons-pool包中提供的底层对象池机制,它利用。DBCP 2是基于共享池2并提供性能增加,JMX支持以及许多其他新特性相比DBCP 1. x。
由Oracle数据库连接池居民(DRCP)[6]池“专用的”服务器。联合服务器相当于一个前台进程服务器和一个数据库会话的总和。DRCP补充中间层连接池中线程之间共享连接中间层的过程。此外,DRCP使共享数据库连接的中间层流程相同的中间层主机上,甚至在中间层主机。
Java命名和目录接口(JNDI)是一个Java API[7]一个目录服务,允许Java软件客户发现和查找数据和对象通过一个名字。像所有的Java api接口与主机系统,JNDI是独立于底层实现。此外,它指定了一个服务提供程序接口(SPI),允许插入目录服务实现框架。它可能使用一个服务器,一个平面文件,或一个数据库;选择供应商。
JNDI JDBC: JDBC java数据库API,而JNDI是java命名和目录接口API。在这里最主要的是,你实际上在JNDI目录中存储一个JDBC数据源,所以,你只是使用JDBC和获得一个连接通过JNDI查找[8]。简而言之词:JDBC数据库域,JNDI可以让你在一个虚拟存储对象上下文(目录),可以是本地,远程(实现细节通常不重要)。
数据来源:JDBC 2.0扩展API数据源的概念,介绍了标准,通常对象指定数据库或其他资源的使用。数据源可以被绑定到Java命名和目录接口(JNDI)实体,这样您就可以访问数据库的逻辑名称,为了方便和可移植性[9]。
由IBM DB2 (R)连接企业版服务器通常为成千上万的同步客户机请求提供数据库连接。在DB2 Connect版本6,后来连接池默认激活[10]。
当DB2 Connect实例开始创建一个群协调代理。
步骤1:当一个连接请求代理分配给此请求。代理将连接到DB2服务器,并将在DB2中创建一个线程。
步骤2:当应用程序发出断开请求,代理不会将这个请求并传递到DB2服务器。相反,代理放回池中。代理池中仍然拥有其连接到DB2服务器和相应的DB2线程。
步骤3:当另一个应用程序发送一个连接请求,该代理分配给这个新应用程序。确保安全操作,用户身份信息被传递到DB2线程反过来执行用户身份验证。
第四步:当一个应用程序请求从主机断开,DB2 Connect滴入站连接的应用程序,但会让出站连接到主机在一个池中。
提供的连接池OCI司机Oracle9i[9]允许应用程序有许多逻辑连接,所有使用少量的物理连接。每次调用这个逻辑连接将路由可用的物理连接。基于将通话时长是一个更加可伸缩连接池的连接池的解决方案。

三世。算法

一个。设计注意事项:
吗?前端(编程env。): Java 5 (jdk1.5和jre 1.5)或以上
吗?IDE: Eclipse IDE Java EE Web开发人员;朱诺服务版本2
吗?后端(数据库):MySQL 6.0
吗?应用程序服务器:JBoss 5.0(这是建立在Apache Tomcat)
B。该算法的描述:
我们将使用简单的数据结构提供了Java 5和并发应用程序开始。
1。实施:的一个重要界面,我们在这个框架是实施接口。它仅仅是一个对象,执行可运行的任务。它将任务提交从如何执行一项任务的细节。
2。ConcurrentLinkedQueue基于链接节点:一个无界的线程安全队列。这个队列订单元素FIFO(先进先出)。这是一个合适的选择,许多线程将共享共用一个集合。
3所示。ScheduledExecutorService:是一个ExecutorService可以计划任务运行过一段时间后或执行多次与一个固定的间隔时间之间执行。任务由一个工作者线程上异步执行,而不是线程将任务交给ScheduledExecutorService。
我们正在使用的基本参数来处理连接池操作:
1。MIN_IDLE:最小数量的空闲池中连接对象出现
2。MAX_CON:最大数量的连接对象池系统。这包括闲置以及活跃的连接。
3所示。WAIT_TIME:时间间隔在一个单独的线程,检查满足这两个约束。
我们使用2队列实现池集体:
(我)空闲队列:也就是但闲置的连接对象。空闲的连接是没有参与任何交易,可用。
(二)活动队列:将持有和活跃的连接对象。活跃在这里意味着连接忙于一些事务。
1。PoolCreation:一个方法用于初始化池MIN_IDLE MAX_CON对象的对象数量和维护系统的队列
2。BorrowObject:这种方法用于从池中分配对象的连接要求。
3所示。ReturnObject:这个方法是用来返回对象池,自找的。
4所示。CreateObject:这是其中一个重要的方法,实际上做的工作连接对象创建和建立数据库连接。
全局变量:POOLSIZE = no。的对象在闲置+不。在活跃的对象

四、伪代码

算法1 PoolCreation (MIN_IDLE MAX_CON WAIT_TIME):
(1)(a)初始化与MIN_IDLE空闲队列连接对象的数量。使用CreateObject方法创建一个连接对象,使其生活和准备使用。
(b) POOLSIZE - = MIN_IDLE
(2)池的初始化、调度的并行线程将继续检查每WAIT_TIME秒的对象数。
如果(POOLSIZE > MAX_CON)
而(闲置> 0)
从空闲(i)删除对象
(2)减少POOLSIZE作为一个原子操作
算法2:BorrowObject:
(1)如果(空闲队列是空的,POOLSIZE < MAX_CON)
(我)通过CreateObject方法创建一个连接对象
(2)增加POOLSIZE作为一个原子操作。
(2)如果(闲置不空)
(我)从空闲队列中删除一个对象和存储在一个变量中。
(3)添加对象(在步骤1中创建或借用步骤2)活动队列。
(4)返回的对象。
算法3:ReturnObject (OBJ):
(1)删除的特定连接对象OBJ活跃
(2)添加这个对象OBJ,闲置

诉仿真结果

一个测试计划定义和提供的布局和测试。它可以被视为一个容器运行测试(测试用例)。考虑我们的应用,网上购物门户,我们认为是最复杂的测试用例来测试我们的机制即“注册用户”?浏览网站吗?使购买?检查出来?终于完成了。这火灾新鲜查询为每个用户每一步。所以这个测试用例生成最密集的SQL查询,因此在并发环境中最密集的要求的数据库连接。我们考虑的负载测试执行测试用例通过广泛和免费开源的负载测试工具“JMeter”。3版本的测试用例是测试一个更好的比较:
1。非池版本(WOCP,没有连接池),使用传统方法的数据库连接。
2。JNDI版本(WJNDI, JNDI),与使用JNDI连接池,一个最简单的机制在大规模池。
3所示。混合版本的应用程序,我们的机制集成到应用程序中。
测试脚本记录元素是用于创建测试脚本和测试用例运行在不同的载荷如表1中所示
通过计算各自的比率“WOCP池”和“WJNDI池”的吞吐量,我们来到下面的结果
池/ WOCP = 1.178(大约)?汇集= 1.178 X WOCP ?~ 18%性能增加
(吞吐量)要在没有缓冲的、生命期的环境
池/ WJNDI = 1.041(大约)?汇集= 1.041 X WJNDI ?~ 4%性能增加
在JNDI(吞吐量)机制
这种方法扩展应用程序和实现数据库连接池不仅对于较小的应用程序执行速度更快,而且维护简单的两层架构的应用程序架构。一级二级时被应用程序的客户端是服务器端(包括应用服务器和数据库服务器)。虽然可用简单的方法我们使用的池,JNDI命名与连接池,把应用程序分为3层结构。一级客户,二级是应用程序服务器和3级数据库服务器,隐藏在应用程序服务器的JNDI命名。

六。结论和未来的工作

结果表明,该算法与整体性能以及更好地执行架构的好处。JNDI把应用程序分为3层架构而我们提出了系统维护应用程序的一个简单的两层的架构。它有一个小范围的改进,它不包括等待时间请求线程池是否完全占领,没有余地进一步添加新连接对象。这可以被认为是本文工作的未来的工作。

表乍一看

表的图标 表的图标
表1 表2

数据乍一看

图1
图1

引用