数据库连接池技术

2024-09-30

数据库连接池技术(共7篇)

数据库连接池技术 篇1

一、引言

随着银行业信息化进程的深入, 数据库应用已成为企业信息处理的主要组成部分, 当前任何一个稍具规模的网站, 其后台必然涉及大型数据库的访问, 换句话说, 基于对数据库的应用已经成为当前Web系统的主要特征。一般情况下, 在开发基于数据库的Web系统时, 传统的模式为:首先在主程序 (如Servlet, Beans) 中建立数据库连接;然后进行SQL操作, 对数据库中的对象进行查询、修改和删除等操作;最后断开数据库连接。使用这种模式开发, 存在很多问题。

首先, 要为每一次Web请求 (例如查看某一业务信息) 建立一次数据库连接, 对于一次或几次操作来讲, 或许系统的开销不大, 但是, 对于Web程序来讲, 即使在某一较短的时间段内, 其操作请求数也远远不是一两次, 而是数十上百次, 在这种情况下, 系统开销是相当大的。事实上, 在一个基于数据库的Web系统中, 建立数据库连接的操作将是系统中代价最大的操作之一。很多时候, 网站速度瓶颈就在于此。其次, 必须管理每一个连接, 确保其能被正确关闭, 如果出现程序异常而导致某些连接未能关闭, 将导致数据库系统中的内存泄露, 最终将不得不重启数据库。

为了解决这些问题, 可以采用数据库连接池技术。JDBC2.0提出了JDBC连接池技术, 通过在客户之间共享一组连接, 而不是在需要时再生成, 这样可以改善资源使用, 提高应用程序的响应能力。

二、连接池技术

(一) 连接池原理

连接池 (Connection Pool) 是众多连接数据库对象的“缓冲存储池”。其最基本的思想就是预先建立一些连接放置于内存对象中以备使用, 当程序中需要建立数据库连接时, 只需从内存中取一个空闲连接来使用而不必新建。使用完毕后, 只需把连接放回内存即可。而连接的建立、断开都由连接池自身来管理。连接池的工作原理包括连接池的建立、管理和关闭, 如图1所示。

连接池技术通过建立一个数据库连接池以及一套连接使用、分配、管理策略, 有效实现了高效、安全的连接复用, 避免了数据库频繁连接建立、关闭的开销。另外, 由于对JDBC中的原始连接进行了封装, 从而方便了数据库应用对连接的使用 (特别是事务处理) , 提高了开发效率。也正是因为这个封装层的存在, 隔离了应用本身的处理逻辑和具体数据库访问逻辑, 使应用本身的复用成为可能。

(二) 连接池的建立

应用程序中建立的连接池是静态的。所谓静态的连接池是指连接池中的连接在系统初始化时已分配好, 且不能随意关闭连接。Java中提供了很多容器类, 可以方便地构建连接池, 如Vector, Stack, Servlet, Bean等, 通过读取连接属性文件Connections.properties与数据库实例建立连接。在系统初始化时, 根据相应的配置创建连接并放置在连接池中, 以便需要使用时能从连接池中获取, 这样可以节省连接随意地建立、关闭造成的开销。

(三) 连接池的管理

连接池的管理策略是连接池机制的核心。当连接池建立后, 如何对连接池中的连接进行管理, 解决好连接池内连接的分配和释放, 对系统的性能有很大的影响。连接的合理分配、释放可提高连接的复用效率, 节约了系统建立新连接的开销, 同时加速了用户的访问速度。

连接池的分配、释放策略对于有效复用连接非常重要, 我们采用一个很有名的设计模式——Reference Counting (引用记数) 。该模式在复用资源方面应用非常广泛, 把该方法运用到连接的分配释放上, 为每一个数据库连接保留一个引用记数, 用来记录该连接的使用者的个数, 具体的实现方法描述如下。

当用户请求数据库连接时, 首先查看连接池中是否有空闲连接 (指当前没有分配出去的连接) 。如果存在空闲连接, 则把连接分配给客户并作相应处理 (即标记该连接为正在使用, 引用计数加1) 。如果没有空闲连接, 则查看当前所开的连接数是不是已经达到maxConn (最大连接数) , 如果没达到就重新创建一个连接给请求的用户;如果达到就按设定的max Wait Time (最大等待时间) 进行等待, 如果等待max Wait Time后仍没有空闲连接, 就抛出无空闲连接的异常给用户。

当用户释放数据库连接时, 先判断该连接的引用次数是否超过了规定值, 如果超过就删除该连接, 并判断当前连接池内总的连接数是否小于min Conn (最小连接数) , 若小于就将连接池充满;如果没超过就将该连接标记为开放状态, 可供再次复用。可以看出正是这套策略保证了数据库连接的有效复用, 节约了频繁地建立、释放连接所带来的系统资源开销。

(四) 连接池的关闭

当应用程序退出时, 应关闭连接池, 此时应把在连接池建立时向数据库申请的连接对象统一归还给数据库 (即关闭所有数据库连接) , 这与连接池的建立正好是一个相反过程。

(五) 连接池的配置

数据库连接池中到底要放置多少个连接, 才能使系统的性能更佳, 可用min Conn和max Conn来限制。min Conn是当应用启动时连接池所创建的连接数, 如果min Conn过大启动将变慢, 但是启动后响应更快;如果min Conn过小启动将加快, 但是最初使用的用户将因为连接池中没有足够的连接, 不可避免地延缓了执行速度。因此, 应该在开发的过程中设定较小min Conn, 而在实际应用的中设定较大min Conn。max Conn是连接池中的最大连接数, 可以通过反复试验来确定此饱和点。为此, 在连接池类Connection Pool中加入get Active Size () 和get Open Size () 两个方法, Active Size表示某一时间有多少连接正被使用, Open Size表示连接池中有多少连接被打开, 反映了连接池使用的峰值。将这2个值在日志信息中反映出来, min Conn的值应该小于平均Active Size, 而max Conn的值应该在Active Size和Open Size之间。

三、连接池应用的实现

一个完整的连接池应用包括3个部分:DBConnection Pool类、DBConnection Manager类和应用程序连接池的使用。DBConnection Pool类, 负责从连接池获取 (或创建) 连接、将连接返回给连接池、系统关闭时关闭所有连接释放所有资源;DBConnection Manager类, 负责装载和注册JDBC驱动、根据属性文件中定义的属性创建DBConnection Pool、跟踪应用程序对连接池的引用等。

本文实现的数据库连接池包括一个管理类DBConnection Manager, 负责提供与多个连接池对象 (DBConnection Pool类) 之间的接口。每一个连接池对象管理一组封装过的JDBC连接对象Conn, 封装过的JDBC连接对象Conn可以被任意数量的Model层的组件共享。

类Conn的设计很简单, 即:

四、结束语

当前Web应用程序广泛采用B/S结构, 其并发性必定导致多用户同时访问数据库的问题。本文阐述的基于JDBC的数据库连接池技术已成功应用于基于Web的银行管理系统开发中。实践证明, 充分运用连接池访问技术, 可以提高数据库的访问效率, 改善Web应用, 从而减少系统开销, 大大提高了整个Web应用系统的运行效率。

参考文献

[1]Jim Keogh.J2EE参考大全[M].宁建平, 译.北京:电子工业出版社, 2003.

[2]Martin Bond.21天学通J2EE[M].周辉, 译.北京:人民邮电出版社, 2005.

[3]王秀义.基于JDBC的数据库连接池及实现[J].计算机系统应用, 2005.

[4]罗荣, 唐学兵.基于JDBC的数据库连接池的设计与实现[J].计算机工程, 2004.

数据库连接池技术 篇2

1、数据库连接池产生的原因

一般情况下, 在使用开发基于数据库的Web程序时, 传统的模式基本是按以下步骤:

(1) 在主程序 (如Servlet、Beans) 中建立数据库连接。 (2) 进行SQL操作, 取出数据。 (3) 断开数据库连接。使用这种模式开发存在很多问题。首先, 我们要为每一次Web请求 (例如查看某一篇文章的内容) 建立一次数据库连接, 对于一次或几次操作来讲, 或许你觉察不到系统的开销, 但是, 对于Web程序来讲, 即使在某一较短的时间内, 其操作请求数也远远不是一两次, 而是数十、上百次 (想想全世界的网友都有可能在你的网页上查找资料) , 在这种情况下, 系统开销是相当大的。事实上, 在一个基于数据库的Web系统中, 建立数据库连接的操作将是系统中代价最大的操作之一。很多时候, 可能你的网站速度瓶颈就在于此。其次, 使用传统的模式, 你必须去管理每一连接, 确保它们能被正确关闭, 如果出现程序异常而导致某些连接未能关闭, 将导致数据库系统中的内存泄漏, 最终我们将不得不重启数据库。

2、采用数据库连接池的必要性

针对以上问题, 我们首先想到可以采用一个全局的Connection对象, 创建后就不关闭, 以后程序一直使用它, 这样就不存在每次创建、关闭连接的问题了。但是, 同一个连接使用次数过多, 将会导致连接的不稳定, 近而会导致Web Server的频频重启。故而, 这种方法也不可取。实际上, 我们可以使用连接池技术来解决上述问题。首先介绍一下连接池的基本原理。顾名思义, 连接池最基本的思想就是预先建立一些连接放置于内存对象中以备使用, 如图1所示。

如图1所示, 当程序中需要建立数据库连接时, 只需从内存中取一个来用而不用新建。同样, 使用完毕后, 只需放回内存即可。而连接的建立、断开都由连接池自身来管理。同时, 我们还可以通过设置连接池的参数来控制连接池中的连接数、每个连接的最大使用次数, 等等。通过使用连接池, 将大大提高程序效率, 同时, 我们可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。下面我们以一个名为ConnectionPool的连接池为例来看看连接池的实现。先看看ConnectionPool的基本属性。

这些属性定义了连接池与其中的每个连接的有效状态值。连接池的自我管理, 实际上就是指通过定时地对每个连接的状态、连接的数量进行判断而进行相应操作。

我们根据需求可以定义出ConnectionPool要完成管理所需要的基本接口:Public class ConnectionPool implementsTimerL istener{

通过这几个接口, 已经可以完成连接池的基本管理。在TimerEvent () 函数中完成连接池的状态检验工作, fillPool () 使连接池至少保持最小连接数。因为我们要保持每一连接的状态, 所以还需要一个数据库连接对象:

加入了ConnectionObject对象后, 在ConnectionPool中操作的应该只是ConnectionObject, 而其他进程需要的只是Connection Object的con属性, 因此我们再加入一个类, 作为其他进程获得与返回连接的接口:

最后我们的整个系统总的架构如图2所示。

3、结语

在W e b应用系统的开发中, 数据库连接的管理是一个难点。很多时候, 连接的混乱管理所造成的系统资源开销过大成为制约大型企业级应用效率的瓶颈。对于众多用户访问的Web应用, 采用数据库连接池技术的系统在效率和稳定性上比采用传统的其他方式的系统要好很多。本文阐述了数据库连接池产生的原因、讨论了使用连接池技术的数据库连接管理的必要性并给出了一个实现模型。文章所给出的是连接池管理程序的一种基本模式, 为提高系统的整体性能, 在此基础上还可以进行很多有意义的扩展。/是否被使用标志public long lastAcess;//最近一次开始使用时间public int useCount;//被使用次数}

摘要:Web应用系统大多需要数据库的支持, 数据库访问方式的选择极大地影响了应用系统的性能。针对Internet的数据库访问环境, 在实践的的基础上阐述了数据库连接池产生的原因﹑讨论了使用连接池技术的数据库连接管理的必要性并给出了一个实现模型。

关键词:分布式数据库,数据库访问,连接池

参考文献

[1]飞思科技产品研发.开发专家之Sun One-Jsp应用开发详解[M].北京:电子工业出版社, 2005.

[2]孙叶枫, 宋中山.JSP中基于连接池的数据库访问技术[J].计算机应用, 2004, 24 (6) .

[3]王峰, 顾明, 李丽.基于J2EE应用的数据库访问的性能优化[J].计算机工程, 2003, 29 (1) .

基于Web的数据库连接池研究 篇3

关键词:数据库,连接池,设计

0 引言

当前,数据库的应用已成为Web系统的主要特征之一,一般情况下,在使用Java开发基于数据库的Web系统时,传统的操作模式是按照以下步骤进行的:(1)在主程序中建立数据库连接;(2)进行SQL操作,在数据库中进行查询、修改、删除等操作;(3)断开数据库连接;使用这种操作模式进行开发,存在很多问题,主要表现在以下几个方面:

(1)每一次Web请求建立一次数据库连接,在完成操作后都要关闭连接。虽然,进行一次或者几次数据库的连接,系统开销不会太大,对用户来讲,系统运行的速度也不会受到太大影响。但是,对于Web系统程序来讲,在很短的时间内,其操作请求数绝不是几次或是几十次,而是上百次,因次,系统开销会非常大。因为,世界上的任何一个角落都可以连接到互联网,全球只要几十万分之一的人同时操作一个网页,系统开销就会很大,这种情况下,对数据库频繁的关闭连接会影响到Web系统的运行速度。

(2)对于传统的操作模式来讲,必须确保每一个连接都能正确关闭,在操作过程中若出现程序异常,就会导致某些连接不能关闭,最终用户不得不重启数据库。

针对这些问题,我们可以采用数据库连接池技术予以解决。我们先建立数据库连接池,当程序中需要建立数据库连接时,我们不用新建一个数据库连接,只要从数据库连接池中取一个空闲连接。使用完毕后,将连接放回数据库连接池中,由连接池自身来管理连接的建立和断开。另外,我们还可以通过连接池的参数设置来控制连接池中的连接数以及连接的最大使用次数等等。

1 连接池的原理

1.1 数据库连接池简介

连接池是一个连接数据库对象的缓冲池,基本思路是在内存对象中先建立一些连接,当程序需要建立连接时,只需从内存对象中取出一个连接即可,使用完毕后,再将其放回内存。在实际的数据库运用中,同一个数据库可能存在很多用户反复多次进行连接、断开,这样势必会造成浪费,消耗调很多数据库的资源。但在数据库连接池的应用中,连接池会自动保存用户使用过的一些连接,当用户想再次使用连接时,只用在连接上调用Open,看连接池中是否有可用的连接,若有,则程序会将该连接返回给用户,不用打开新连接,这样便节约了连接资源,提高了数据库的使用效率。同样,当用户在连接上调用Close时,已用过的连接不会真正关闭,只是会返回到连接池中,以方便用户下一次运用。

1.2 连接池的管理

连接池的建立、连接池的使用管理、连接池的关闭三部分共同组成了连接池的管理。系统通过这三部分,使得连接池成为连接对象的缓冲池,也就是连接对象的集合体,它控制着连接池中连接对象的获取、释放以及连接对象的数目。

1.2.1 连接池的建立

在系统初始化时就建立一个已分配好连接数目的静态连接池,这些连接都是应用程序可以分配的自由连接,之后使用的连接都是从这个静态连接池中获取的。这样就减少了因新的连接和断开所产生的开销。

1.2.2 连接池的使用管理

连接池的管理机制核心就是连接池的使用管理。用户在申请连接时不用向数据库申请,只需向连接池申请即可。同样,当用户释放连接时,也是向连接池进行释放,而不用关闭数据库。连接池设有空闲连接和已分配连接,空闲连接里存放没有使用的连接,已分配连接里存放正在使用的连接。当用户申请数据库连接时:

(1)若有空闲连接,则将空闲连接分配给该用户,并注册到已分配连接中。连接池中的连接数会控制在一定的空闲连接数内,当用户进行申请时,便可从连接池中获取空闲的连接对象。

(2)因连接池限制了最大连接数,当已分配的连接数达到了最大数,而用户又有新的连接申请,这时,客户就需要等待,等待其他的用户释放连接,再将其分配给该用户。

1.2.3 连接池的关闭

当用户退出应用程序时,要关闭连接池,将在建立连接池时申请的连接对象放回到数据库连接池中,以便其他用户申请连接时,连接池将其分配给其他用户。

2 基于Web数据库连接池的设计

我们以一个名为Connection Pool的连接池为例。在建立连接池之前,我们先设置好数据库的基本属性,如password、URL等。基于此,我们先创设了一个Property Parser类,该类的主要用途是从Properties文件中读取有关数据库的基本属性。因为数据库的基本属性全部或者部分都装在组件里,必须先调取已设置好基本属性的组件,然而再将其修改。我们之所以这样操作,是因为我们写的这个连接池不用关心其是什么样的数据库,直接用Property Parser类就能解析Properties文件,并将在里面调取需要的内容就可以了。

我们给出在Property Parser类中的一个构造函数代码,该函数能解析Properties文件,并读取相关的内容。部分代码如下:

在设置好基本属性后,就可以建立数据库连接池了,在建立连接池时要完成以下几个接口:

//从数据库连接池中获取一个可用的空闲连接,如果没有可用连接,并且正在使用的连接数小于连接池的最大连接数,就可以创新新的连接。

至此,数据库连接池已完成了大部分的操作,接着就需要建立一个能够管理连接池的管理容器类,这个类需要完成的接口大致有以下几个方面:

3 结束语

本文介绍了数据库连接池的基本原理,但建立的数据库连接池只是完成了连接池的基本功能,所介绍的流程也仅是提供一些基本接口,对于一些企业的大型应用,应设计一个功能更加强大的数据库连接池。在数据库应用系统开发中,数据库连接池技术可以提高连接的重复使用,减少系统开销,提高系统的整体性能。目前,数据库连接池技术已经得到了广泛应用,但还是存在很多问题,例如,用户不能根据实际需要调整连接池的容量,通常做法是,在系统资源比较丰富时,用户便放大连接池容量,而在系统资源比较紧张时,就将连接池容量进行收缩,删除使用较少或未被使用过的连接。因此,我们必须不断改善数据库连接池技术,进一步提高连接池的性能,使其能够适应用户的需要。

参考文献

[1]刘菲游,达章.基于Java的数据库连接池的设计与优化[J].微型电脑应用,2008(10).

ADO.NET数据库连接池研究 篇4

很多接触过J2EE平台的开发人员,都知道数据库连接池的重要性。由于J2EE的开放性,数据库连接池有很多实现方式,可以用第三方厂商的框架平台提供的连接池,也可以完全自己开发自定义的连接池。而刚转向.NET平台,掌握了连接数据库的基本方法后,首先要提出的问题就是:ADO.NET有没有数据库连接池功能?要不要自己开发?

.NET平台跟J2EE一样,提供了数据库连接池的功能,而且在程序中使用数据库连接时,隐式地使用到了数据库连接池。下面以SQL Server 2000数据库为例,通过编写一些测试程序来验证ADO.NET的连接池功能。

ADO.NET的连接隐式地使用到了连接池,什么样的连接会放在同一个连接池中呢?答案是连接字符串。连接到数据库,必须指定连接字符串,以便程序知道要连接的数据库种类、数据库名称、验证内容等。请看以下代码:

程序运行点击“打开连接”按钮后,文本框提示两个连接都打开了。可以在SQL Server 2000的查询分析器中运行存储过程sp_who查看连接情况,从查询结果中可以看到有两个使用“Northwind”数据库的进程。这就是在数据库端对应的两个连接。然后点击“关闭连接”按钮,在程序中执行以下部分代码:

程序文本框提示两个连接都已关闭,但是在查询分析器中发现执行sp_who后仍然存在两个使用“Northwind”数据库的进程,这就是数据库连接池起的作用。虽然显示地用代码关闭了连接,但是由于连接池的管理,真正的连接并没有释放,而是将连接放回了池中,以便后面的代码使用。

再次点击“打开连接”按钮,执行代码片断1的功能,文本框提示两个连接重新打开,通过执行sp_who存储过程可知,数据库服务器端还是两个使用“Northwind”数据库的进程,并没有在原来两个进程的基础上,再生成两个新的连接进程变成四个的情况,这种效果也是连接池作用的结果。第二次执行打开连接的代码后,重新生成的连接对象并不是真正的重新创建了和数据库的连接,而是从数据库连接池中取出了现有空闲的连接,再次复用。同理,再次点击“关闭连接”按钮,又一次执行代码片断2的功能,文本框提示两个连接关闭。通过执行sp_who存储过程可知,数据库服务器仍然保持两个连接进程。在客户端程序中,连接对象又放回了连接池备用,没有真正释放。

最后,退出客户端程序,由于程序资源的全部释放,连接池也自动删除,这时再从查询分析器执行sp_who过程,就再也看不到使用“Northwind”数据库的进程了。

通过以上测试程序,可以分析,当使用相同连接字符串创建数据连接时,系统首先检查使用相同连接字符串的连接池内有没有空闲连接,如果有,就取出现成的连接直接使用;如果没有,才真正创建一个新的连接。在连接使用完并且关闭后,连接也不会真正立刻释放,而是放回了池中,以备下一个连接对象取用。所以,连接池的使用不仅能够充分利用现有连接,提高性能,而且可以在连接池没有可用的空闲连接时,重新生成一个新的连接来响应程序的请求。为充分理解这个功能,再用以下代码来进行调试,并在函数第一行代码处设置断点:

单步执行代码,当代码执行完c1对象的创建后,服务器并没有使用“Northwind”的连接进程出现;当c1对象Open以后,经查询,可以看见已经有一个连接进程;当c1对象Close以后,通过查询分析器可见连接进程仍然存在,因为连接放回了池中备用,没有被删除;当c2对象Open后,其实取的是c1刚才创建的连接,所以查询分析器还是显示只有一个连接进程;当c3对象创建并打开后,由于刚才空闲的连接已经给c2用了,而c2仍没关闭,所以c3生成的是新的连接。因此,最后查询的连接进程是两个。

通过以上程序可以分析,在连接使用完毕后,应该及时关闭。否则其他代码请求连接时,没有空闲连接可用,就会重新生成新的连接,这样连接的复用率就比较低。当连接数达到最大值时(默认是100),下一个请求就只能等待,这样会给程序造成延迟响应,如果在等待期间仍没有空闲连接可用,那么超过最大值的连接请求就会因为超时而失败,这种情况比较容易出现在B/S的程序中。解决方法就是在条件允许的情况下,适当加大连接池的最大值(当然,这比较耗资源);同时在连接使用过程中,尽量少占用连接资源,把查询量缩小,并及时关闭放回连接池,增加复用的机会。

虽然通过连接池可以提升数据库应用程序的性能,提高连接的利用率,但不是所有场合都适合使用连接池。把代码1和代码2组成的程序发布成exe文件,然后启动程序,先后点击“打开连接”和“关闭连接”按钮,然后使用查询分析器查看连接进程,可以看见客户端连接关闭后,服务器仍然保留了两个连接进程。在不关闭现有程序的前提下,再次运行同样的Exe程序,生成第二个程序实例,按第一个程序的步骤先打开连接再关闭,然后在查询分析器中查看,可以发现服务器出现了4个连接进程。同理,运行第三个同样的程序实例,按同样步骤操作,可以发现服务器又多出两个连接,变成了6个。因此可以推论,如果相同的程序再多运行几次,服务器的连接进程将会成倍增加。如果程序实例较多,很快就会出现大量的连接进程,这将耗费很多服务器的资源,造成性能下降的结果。

由此可见,数据库连接池只能在一个程序实例中管理,不同实例的程序,各自管理自己的连接池,虽然连接字符串一样,也不能共享连接资源。当所有程序访问同一个数据库时,将大大消耗服务器的连接资源。这种情况比较容易出现在传统C/S的两层架构的程序中,当客户端数量比较大时,容易导致数据库连接资源的浪费。解决这个问题的方法如下:

(1)是把两层架构增加为3层,开发一个应用程序服务器(中间层),用来调度所有客户端程序的连接请求,不过增加了开发难度;

(2)把程序改成B/S模式的web应用程序,但是大家也清楚做Web网页一般还要再请个美工;

(3)简单的把连接池功能禁用,虽然在创建连接时要费点时间,但是用后马上释放,能够保证在客户端数量较大时不容易浪费服务器连接资源。禁用连接池只要在连接字符串中加上“Pooling=false”即可,请看以下代码:

将程序生成exe文件运行,执行“打开连接”功能后,发现有3个连接进程,但执行“关闭连接”功能后,由于禁用了连接池,连接将会真正释放,所以在服务器中可以发现连接进程全部没有了。在不关闭第一个程序的情况下,再次执行同样的程序,生成第2个实例,可以发现效果完全一样。只要在程序中尽快关闭连接,即使客户端数量较多,数据库服务器也不会产生大量无用的连接进程。

数据库连接池技术 篇5

随着计算机技术的迅猛发展,大多数企事业单位都逐步实现了与业务相关的管理信息系统。这些系统在开发时往往没有考虑和其它系统的交互,并且由于开发时期不同、所用技术不同等原因,使得这些系统中的信息和数据是孤立的、相互隔离的,同时在存储方式、访问方式等方面也存在很大的差异,这些系统间很难实现数据共享。因此,要实现企事业内部数据的集中管理,必须共享与合理使用这些异构数据库中的数据。如何解决异构数据库之间的数据共享与交换,传统的数据集成方案越来越显得力不从心,这已经成为当前急待解决的问题。

1 数据集成中间件技术

中间件[1]是可复用的一类软件,这类软件处于操作系统、网络或数据库之上,但处于应用软件的下层,为处于自己上层的应用软件提供运行与开发的环境。

在众多的中间件软件中,有一类是专门为了实现异构数据的共享而设计的软件,这类软件便是数据集成中间件。数据集成中间件以中间件的方式解决异构数据集成的问题,这类中间件屏蔽了异构数据源的差异,完成了异构数据的互操作。

目前的数据集成中间件一般只是进行查询或语义转换,而不具备异构数据库复制的功能。大多数文献中提到的设计方案都是把重点放在分布式查询语句的优化上,设计全局查询模式,需要用到各站点的数据时,才用全局查询语句经过分解,从各站点取出数据,然后再将各数据源的数据进行转换和合并等处理,最终生成用户全局查询的结果服返回给用户。图1是这类数据集成中间件的一般体系结构示意。

其中查询处理器的设计与实现比较困难,它的工作是把用户提交的针对全局模式的查询分解重组为对各个局部数据源的子查询,并最终得到查询结果的文件。通常都是将XML[2]作为全局数据模型,查询结果文件也是XML格式的文件。因为局部数据源可以是关系数据库、XML文件等模式,而局部模式之间的数据交换需要通过全局模式来实现,局部模式与全局模式的交流是通过XML来实现的,那么就需要将局部模式在全局模式中影射成XML模式,这个过程是比较复杂的。

2 数据库连接池技术

2.1 数据库连接池技术的必要性

JDBC作为一种数据库访问技术,具有简单易用的优点。但使用这种模式进行Web应用程序开发,存在很多问题:首先,每一次Web请求都要建立一次数据库连接。建立连接是一个费时的活动,每次都得花费0.05s~1s的时间,而且系统还要分配内存资源。如果频繁的进行数据库连接操作势必占用很多的系统资源,服务器的响应速度必定下降,严重的甚至会造成服务器的崩溃,从而成为制约某些电子商务网站发展的技术瓶颈问题。其次,对于每一次数据库连接,使用完后都得断开。否则,如果程序出现异常而未能关闭,将会导致数据库系统中的内存泄漏,最终将不得不重启数据库。

2.2 数据库连接池的工作原理

为解决上述问题,可以采用数据库连接池技术。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量使用情况,为系统开发﹑测试及性能调整提供依据。图2为单个连接池的基本工作原理图。

2.3 数据库连接池的工作机制

数据库连接池一般指由连接池组件和连接池管理组件构成的一个统一体。在某个特定的连接池中,所有的连接都将连接到同一个数据库,如果一个线程向连接池管理部件发出数据库连接请求,连接池管理部件便调用这个特定连接池对象的获取连接方法。如果该线程成功得到了这个连接,那么其他线程便不能得到这个数据库连接了,这个线程使用连接结束后,便将连接交还给连接池管理部件(通过调用连接池管理部件的释放连接方法实现),连接池管理部件便通知这个连接池对象收回一个连接,以分配给其他等待连接的请求线程。

图3为数据库连接池的工作机制时序图。

3 动态连接池设计

3.1 静态数据库连接池的局限性

目前很多Web应用都是直接使用Web应用服务器自带的连接池功能;同时也有一些开发者自己编写的连接池,管理和控制比较自由。这两种方式都是先在配置文件中按照规定的格式配置好连接池,而后在程序中可以获取连接,用完后必须释放。在实践中已经证明,连接池技术可以提高应用程序连接已知数据库的效率,实现比较简单,但存在以下局限性:

· 静态加载:通常连接池管理部件都是一次性加载连接池的,比如Web应用服务器在启动时从配置文件中获取所有的数据库连接信息(也就是连接池信息),一旦在启动后向配置文件中追加了连接池信息,服务器就无法自动加载新增的连接池,除非重启系统。

· 静态配置策略:现有的连接池在设定最大连接数、最大引用次数等参数时,是在连接池初始化时进行一次设定,不能根据应用的变化而动态调整。

· 管理不方便:现有的连接池没有提供图形化工具让用户进行远程管理,而是限定在服务器端。

· 应用范围不广:现在的连接池一般都用于提高单个数据库的连接性能,没有用到异构数据库系统中,没有充分发挥连接池的潜力。

3.2 动态数据库连接池的模型结构

鉴于静态连接池的局限,本文提出动态加载、修改、删除连接池的动态连接池模型。开发图形化的连接池管理工具,可以让用户在浏览器客户端远程维护数据库连接池,简单易用。图4是动态连接池的模型结构。

3.3 构建动态连接池中间件

动态连接池封装了对数据库(包括异构数据库)的所有操作,而且提供了接口给应用程序进行相应操作,可以直接使用已有的功能,也可以在此基础上进一步扩展应用程序。本文将动态连接池构件集成到resin应用服务器中,开发了用户直接进行远程管理连接池的JSP界面,形成了动态连接池中间件。

3.4 动态连接池中间件体系结构

整个中间件体系分为三层:客户端——中间件层——数据库服务器层,其中客户端可以直接是Web浏览,也可以是Java应用程序或者其它Java业务组件。因为中间件提供了JavaBean组件编写的接口,所以只要是能调用这些接口的应用程序都可以成为客户端。本文用JSP+resin服务器实现了中间件管理连接池的图形化界面,图5为中间件系统的体系结构。

4 基于动态连接池的集成中间件

4.1 体系结构设计

动态连接池中间件是在Web应用服务器以及动态连接池的基础上开发的,扩展成数据集成中间件的时候,只需要扩展业务组件,并加上一个中间件数据库。其中JSP负责用户界面,把重要的业务逻辑封装在JavaBean中,每个JavaBean都是一个业务组件,这里包括两类业务组件:复制组件和查询转换组件,分别用于实现异构数据库复制和提供查询分布式数据库的统一接口。图6为集成中间件体系结构示意。

4.2 复制模式设计

本文数据集成中间件的复制方式采用单向复制方式(主从式复制),只需要将各数据源的数据复制到中间件数据库中,由中间件数据库作为数据集成中心,存放各用户需要的数据。这样能从根本上预防复制冲突的发生,并且在流程和组织上都相对简单。图7为中间件系统的复制模式。

4.3 查询转换组件设计

在数据集成中间件中,数据的分布是完全透明的。为了节省中间件数据库的空间并保证性能,对于一些复杂但并不常用的查询,例如要涉及到多个数据库的多个数据表连接并带有聚合函数与多个连接条件的查询,开发人员可以只是虚拟发布相关表及字段信息(即不创建触发器和订阅表结构),在需要查询时,便只要编写全局SQL语句提供给查询转换组件。查询转换组件内部结构如图8所示。

5 结束语

通过研究数据集成在解决异构数据库访问与数据访问效率方面的技术,设计并实现了基于动态连接池的数据集成中间件,该数据集成中间件不同于以往那些只片面侧重于研究异构性或性能的中间件,而是把异构性和数据访问效率作为整体来研究,并把其应用到了本校财务管理信息系统当中,系统兼顾了查询效率与异构性,并达到了预期的效果。

参考文献

[1]朱锋.异构数据源集成中间件的设计与实现[D].苏州:苏州大学,2005.

[2]邱万彬.数据库之XML中间件设计与应用[D].郑州:解放军信息工程大学,2005.

[3]陈跃国,王京春.数据集成综述[J].计算机科学,2004,31(5):48-51.

[4]贾晖.数据集成中间件研究与实现[D].西安:西北大学,2005.

[5]颜开.数据访问中间件的设计与实现[D].成都:四川大学,2005.

[6]Ashish N.Optimizing Information Mediators By Selectively Materiali-zing Data[D].USC,2000.

数据库连接池技术 篇6

Java是一种面向对象的多线程解释型语言,具有健壮性、安全性、跨平台性、可移植性、动态性等诸多优点。在很多应用中,基于Java的应用开发都会涉及到与后台数据库的连接。目前,Java开发中的主流数据库连接技术有JDBC、连接池、Hibernate框架等几种。

2 Java数据库连接技术

2.1 JDBC数据库连接技术

JDBC(Java DataBase Connection)是应用程序与数据库沟通的桥梁,它提供了Java应用程序与各种不同数据库之间进行对话的接口。使用JDBC,Java程序员可以使用纯Java语言编写完整的数据库应用程序。

JDBC可分为4种类型[1,2]:

(1)JDBC-ODBC桥

最初的数据库连接方式是借助各数据库厂商提供的差异性极大的数据库驱动接口来实现的,因此其实现非常繁琐并且通用性差,具有很大的局限性。为此,微软首先提出了通用的数据库连接机制和标准以实现各种不同关系型数据库统一的互联规范,该规范即为ODBC(开放式数据库连接)。而JDBC-ODBC桥实质上是Java提供的一种以JDBC为介质,通过传统的ODBC驱动程序来访问数据库的方法。通过使用JDBC中连接ODBC驱动的驱动程序,即可实现这种数据库连接。该方案需要在本地安装ODBC类库和驱动程序。

(2)Java到本地API

JDBC-ODBC桥由于采用了一种间接的数据库驱动方式,因此,效率上打了一定的折扣。一种较为高效的JDBC连接方法是JDBC驱动程序使用Java本地接口直接调用本地的数据库API,从而实现对数据库的连接和对数据的操纵。该方案也要求在本地安装连接目标数据库的类库。

(3)Java到网络协议

这类JDBC驱动程序是纯Java的驱动程序,它通过一定的网络协议与数据库服务器上的JDBC中间件通信。由于该类驱动程序不要求在访问数据库的Java程序各地都安装目标数据库的类库,因此,它是最灵活的JDBC方案,使得程序可以通过网络协议与不同的数据库进行通信。

(4)Java到数据库协议

这类驱动程序也是纯Java程序实现的,它通过实现一定的数据库协议直接与数据库通信。由于该方案直接与数据库通信,因此,其效率是4种方案中最高的。

通常,Java应用程序访问数据库的过程分为如下4个步骤:

(1)装载数据库驱动程序。

(2)通过JDBC建立数据库连接。

(3)访问数据库,执行SQL语句。

(4)断开数据库连接。

2.2 连接池技术

利用连接池技术可以解决Java与数据库连接过程中资源频繁分配/释放所带来的效率问题。其核心思想是连接复用:建立一个数据库连接池以及一套连接使用、分配、管理策略,避免数据库连接频繁建立、关闭所带来的频繁资源分配、释放开销。连接池技术通事先建立一些连接并且防止在“缓冲池”中以备使用,当需要建立数据库连接时,并不需要直接向数据库发出请求,而只需要从数据库连接池中取得所需要的连接;而当应用程序使用完一个连接,也不需要从物理上关闭该连接,而是将连接归还给连接池[3,4]。

JDBC的API中并没有提供连接池的方法。一些大型的Web应用服务器如BEA的WebLogic和IBM的WebSphere等提供了连接池的机制,但是必须要有第三方的专用类方法的支持。基于Java的连接池类的设计主要包括3个步骤[4]:

(1)定义连接池类:用于维护连接池中的连接对象,包括连接对象的创建、关闭、连接对象的数量,连接对象状态的监控、日志信息的记录。

(2)创建管理类:用于负责加载和注册所有JDBC驱动程序,根据对象的特点创建多个连接池对象,将客户请求映射到特定的连接池对象上,并提供客户从连接池获取和释放连接的接口,指定日志文件属性,将加载和注销JDBC驱动程序的信息记录到日志中。

(3)管理类与主程序的接口:用于记录最近使用时间、被使用的次数等连接池的状态。

2.3 Hibernate框架技术

通过吸收Spring等框架技术的优点,Sun在EJB3.0上做了一些大的改变和调整,提供了Hibernate框架技术。Hibernate是一个开源的对象关系映射框架,它对JDBC进行了轻量级的对象封装,使得Java程序员可以随心所欲地使用对象编程思想来操纵数据库。

Hibernate框架技术其本质还是JDBC,因为它是基于JD-BC实现的。JDBC本身具有强大的数据库连接功能,但是,由于JDBC复杂繁琐等原因,使用者对其的抱怨一直存在。为此,Sun不得不在Java的数据库连接问题上注入新的思想。为此,Sun提出了O-R Mapping(对象-关系映射)的概念,其基本思想是将Java的一个类与关系型数据库中的一张二维表相对应,这样,这个类的实例便与这张表的一条元组(一行)相对应,这种对应关系则通过其他的Java类(比如Top Link的descriptor类)或者XML文件来进行描述。通过这种映射关系,使得程序员不再需要直接与数据库打交道,而只需要通过操作Java对象。具体的与数据库的交互则交由系统去完成:框架会自动将对类的改动同步到相对应的表中。Hibernate框架正是在这种新思想的推动下产生的。

Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端使用,也可以在Servlet/JSP的Web应用中使用,并且,Hibernate可以在应用EJB的J2EE框架中取代CMP,完成数据持久化。

Hibernate的目标是简化开发者通常的数据持久化编程任务,以便大幅度地减少开发时人工使用SQL和JDBC处理数据的时间。通过使用Hibernate可以轻松解决开发者在使用传统的CMP以及JDBC和DAO技术开发持久层时遇到的困难。

3 结语

具有跨平台性的Java语言已经成为最常用的编程语言之一。在很多应用中,都涉及到使用Java开发的前台应用程序与后台数据库(Oracle、MSSQL Server、MySQL等)的连接和交互。

摘要:Java程序员经常访问数据库,在此介绍并比较了访问数据库的3种主要方法。

关键词:Java,JDBC,连接池,Hibernate

参考文献

[1]林元元.JDBC连接MySQL数据库的方法浅析[J].长沙通信职业技术学院学报,2009,(01).

[2]高伟,李爽,杜瑞庆.基于JDBC的SQL Server数据库访问[J].福建电脑,2008,(01).

[3]孙鑫鸽,陈刚,孙小玲.基于JDBC的数据库连接池技术的研究与设计[J].计算机与信息技术,2006,(08).

数据库连接池技术 篇7

云计算的出现改变了传统电信运营商的发展模式, 使电信企业实现了精细化管理, 尤其是云计算资源集中成为了可能, 便于计算信息服务, 不仅降低了成本与能源消耗, 还促进了企业进一步发展。但依然需要重视与计算资源池数据安全防护, 并联系实际提出保障技术, 只有这样才能促进企业又好又快发展。

二、云计算含义

云计算概念最早出现于2006年, 其定义与内涵一直是IT界讨论重点, 由于认识与理解不同, 导致云计算含义始终没有明确定义。现阶段, 美国相关部门对云计算框架模型进行了描述, 并概括云计算的特征。

云计算特点有以下几点:第一, 网络接入广泛, 即通过云计算实现网络供应, 并涉及大量客户端;第二, 资源池, 它以物理资源为基础, 在虚拟化的作用下, 逐渐映射成为具有虚拟化、模块功能化以及多用户服务的资源池, 并按照系统要求为客户提供服务;第三, 快速弹性计算, 这一特征要求系统规模与计算资源一定联系用户需要实际进行调整;第四, 按需自服务, 它要求云计算服务是不需要人工参与就能进行的服务, 以自助服务为主, 如开通服务、更换配置、缴费等;第五, 服务检测, 它要求运服务是可以进行检测的, 同时也制定了明确的收费标准与政策, 所有服务都是透明的, 便于服务者与用户查询[1]。

三、云计算资源池概述

云计算资源池就是将服务器物理资源转化为逻辑资源, 使得一台服务器可以转化为几台甚至几百台相互隔离的虚拟服务器, 不仅可以提升资源利用率, 还可以使系统管理更加简化, 便于服务器资源整合, 同时也可以使IT界更好的应对业务变化。要利用云计算, 就要构建大容量资源池, 确保在业务高峰期能够满足用户各种要求, 为用户提供优质服务。

四、云计算资源池数据的安全防护与保障技术分析

4.1软件安全防护措施与保障技术

云计算资源池平台中的各个虚拟终端都需要通过虚拟主机虚拟层与外部进行交互与联系, 一旦虚拟层出现漏洞或被入侵, 就会导致虚拟环境发生风险, 因此, 强化虚拟层安全异常重要。云计算资源池管理服务器属于虚拟化平台基础架构组成部分, 用于虚拟主机、网络与各系统的统一控制与管理, 这就需要联系实际情况做好虚拟服务器入侵检测工作, 并建立起良好安全控制系统与防护功能, 这也是确保虚拟架构安全加固的必要方式。在资源池中应用安全防护软件, 主要是为给资源管理服务器提供入虚拟入侵检测策略, 强化入侵防护能力。对于IDS入侵检测来说, 因包括以下几点策略:首先, 对重点虚拟化文件访问进行监控, 同时也要对监控虚拟化软件关键命令与工具执行;其次, 了解虚拟化软件关键配置变化情况, 且实时关注虚拟机标准网络接口与各关键部分的工作情况, 制定出较为简单的虚拟软件动作监控日志;再者, 重视虚拟化管理服务器上的成功与失败访问, 确定执行命令, 并做好虚拟管理服务器关键事件通用与审计工作;最后, 确保虚拟管理服务器主机始终保持完整, 了解主机配置变化[2]。IPS入侵安全防护则要关注以下几点策略:第一, 重视Windows安全防护, 加强对管理服务器应用组件的保护, 确定基本架构组件与应用程序文件, 更要重视敏感数据目录的构建;第二, 控制管理服务器网络访问权限, 增加可信应用程序, 对需要访问的管理服务器访问工具加以保护;第三, 调整好Windows基线, 了解用户与用户组的变化情况, 一旦发生登录失败, 就要检查重点配置文件等是否被篡改;第四, 检查文件是否完整, 若不完整就要通过管理平台调整检查策略, 实时了解平台中各种文件的变更与配置情况, 同时也要监控管理平台日志, 尤其要重视Web交互日志[3]。

4.2核心业务主机安全防护与保障技术

不管是物理服务器还是虚拟化服务器, 都会遇到相同的安全防护问题, 主要有网络是否被入侵, 是否遭到病毒攻击, 是否存在漏洞或数据被盗等情况。资源池安全管理平台需要为物理机与虚拟化服务器提供全套安全防护体系, 强化系统入侵, 不断增强虚拟服务器系统的安全性, 确保数据安全, 所以, 核心业务主机的安全防护与保障措施需要从以下几方面入手:第一, 做到零日攻击, 为实现这一目标可以利用沙盒技术与白名单技术来完成, 可以有效减少恶意程序借助零日漏洞攻击重点业务服务器, 同时也能有效防止恶意程序的传播。第二, 加强对细粒度系统的访问与控制, 通过锁定操作系统程序等, 对各个操作系统与应用程序进行控制, 并为其创建以行为虚拟Shell为基础, 用于监控内核系统调用情况的策略, 且通过设计访问控制列表, 监控与访问程序, 能够识别与核对用户身份与权限, 明确可以访问的网址与访问时间、权限[4]。第三, 确保文件等完整, 主要是重视物理主机与虚拟主机的完整性, 保证两者中的文件无论怎样变动都不会发生实时性改变;第四, 收集与制定适用于物理与虚拟服务器使用的机制, 并将其直接呈现在控制台上, 联系手机应用程序确定策略控制与白名单;第五, 重视系统与用户监控审计, 不仅要监控用户登录核心进程, 还要通过这种方式拦截用户登录过程, 利用主机用户进行行为审计等;第六, 构建高性能防火墙, 强化防火墙性能, 监控TCP/UDP实时流量, 加大对缓冲区的防护, 做好进程访问控制, 重视各进程启动保护。此外, 还要关注物理服务器与虚拟服务器系统的监控与审计, 强化系统入侵防护, 真正做好检测工作。

4.3运维管理的安全防护与保障技术

云计算资源池管理特性较为特殊, 管理员权限较大, 如果人员变化将直接影响业务安全。为保证运维安全, 实时验证用户信息就要构建合适的云计算资源池堡垒机制, 记录与保存操作过程。可以从以下几方面入手:首先, 为云计算资源池供应细粒度访问控制, 减少虚拟化平台的特权访问, 重视用户访问虚拟资产管理;其次, 做好自动定期系统配置与安全设置评估工作, 准确记录成功操作与失败操作, 以便为数据审计提供可靠依据, 同时, 重视命令级别的访问控制, 区分管理权限, 确定虚拟机访问对象;再者, 重视账号集成管理, 及时回收现有资源池管理员权限, 无论是哪一用户都要经过运维管理软件认证以后才可以管理虚拟平台;最后, 根据虚拟机的不同进行区分授权, 通过多方认证以后才能使用服务器, 这也是保证其身份合法的重要举措[5]。

结论:通过以上研究了解到, 云计算资源池数据的安全防护与保障以及成为电信企业重点关注内容, 不仅可以确保云计算安全, 还可以完善云计算资源池平台, 有效减少存在云计算中的安全问题, 使其更具安全性, 因此, 本文联系实际实际情况, 提出了一些构建安全防护的有效措施, 希望能为相关人士带来参考。

摘要:随着科技发展, 云计算极大的促进了业务保障工作的开展, 由于用户数量不断增多, 业务也在不断扩大, 云计算资源池数据安全防护也有迎来了新的发展契机, 因此本文将从云计算与资源池基本情况入手, 重点分析云计算资源池数据安全防护与保障技术。

关键词:云计算,资源池数据,安全防护,保障技术

参考文献

[1]余琦.云计算环境下数据安全多维防护体系的研究与设计[D].广东工业大学, 2013

[2]赵全营.面向云计算的用户数据安全策略研究[D].大连理工大学, 2014

[3]韩帅.基于云计算的数据安全关键技术研究[D].电子科技大学, 2012

[4]陈钊.基于云灾备的数据安全存储关键技术研究[D].北京邮电大学, 2012

上一篇:环艺专业研究生下一篇:综合优质护理