Snap ConnectionPool简介(图)- -
【虎.无名】Jdbc连接池接口有两种,目前的主流连接池,都是基于DataSource接口的。而下面这个,则直接基于原始Conntion和Statement等。Snap ConnectionPool的特点是,不仅仅缓存Connection,还对Statement和ResultSet等做了足够的缓存,通过超时回收来确保可靠资源释放。
产品 http://www.snapbug.net/product/snappool/product_sp_01.htm
<!---->
<!----> |
简介 |
数据库应用,在许多软件系统中,都经常用到,是开发中大型系统不可缺少的辅助。但如果对数据库资源的没有很好管理(如:没有及时回收数据库的游标(ResultSet)、Statement、连接 (Connection)等资源),会直接导致系统的稳定性能。这类不稳定因素,不单单由数据库或者系统本身一方引起,所以在开发期、以及测试期很难发现这。只有在系统正式使用后,随着流量、用户的增加,才会逐步显露。
为了简化数据库开发,缺省有效地管理数据库资源,Snap-ConnectionPool以最简单的方式,为应用供以一个有效的数据库资源管理工具。
|
体系结构 |
在JDBC规范中,应用通过驱动接口(Driver Interface)直接方法数据库的资源。为了有效、合理地管理资源,在应用与JDBC Driver之间,增加了连接池: Snap-ConnectionPool。并且通过面向对象的机制,使连接池的大部分操作是透明的。参见下图,Snap-ConnectionPool的体系:
图中所示,通过实现JDBC的部分资源对象接口( Connection, Statement, ResultSet ),在 Snap-ConnectionPool内部分别产生三种逻辑资源对象: PooledConnection, PooledStatement和 PooledResultSet。它们也是连接池主要的管理操作对象,并且继承了JDBC中相应的从属关系。这样的体系有以下几个特点:
- 透明性。在不改变应用原有的使用JDBC驱动接口的前提下,提供资源管理的服务。应用系统,如同原有的 JDBC,使用连接池提供的逻辑对象资源。简化了应用程序的连接池改造。
- 资源封装。复杂的资源管理被封装在 Snap-ConnectionPool内部,不需要应用系统过多的干涉。管理操作的可靠性、安全性由连接池保证。应用的干涉(如:主动关闭资源),只起到优化系统性能的作用,遗漏操作不会带来负面影响。
- 资源合理应用。按照JDBC中资源的从属关系,Snap-ConnectionPool不仅对Connection进行缓冲处理,对Statement也有相应的机制处理。合理运用Connection和Statement之间的关系,可以更大限度地使用资源。所以,Snap-ConnectionPool封装了Connection资源,通过内部管理PooledConnection,为应用系统提供更多的Statement资源。
- 资源连锁管理。Snap-ConnectionPool包含的三种逻辑对象,继承了JDBC中相应对象之间的从属关系。在内部管理中,也依照从属关系进行连锁管理。例如:判断一个Connection是否超时,需要根据所包含的Statement是否活跃;判断Statement也要根据ResultSet的活跃程度。
|
工作机制 |
Snap-ConnectionPool以缓冲池的机制,在一定数量上限范围内,控制管理Connection,Statement和ResultSet。任何数据库的资源是有限的,如果被耗尽,则无法获得更多的数据服务。在大多数情况下,资源的耗尽不是由于应用的正常负载过高,而是程序原因。在实际工作中,数据资源往往是瓶颈资源,不同的应用都会访问同一数据源。其中某个应用耗尽了数据库资源后,意味其他的应用也无法正常运行。因此,Snap-ConnectionPool的第一个任务是限制:每个应用或系统可以拥有的最大资源。也就是确定连接池的大小(PoolSize)。
ConnectionPool的第二个任务:在连接池的大小(PoolSize)范围内,最大限度地使用资源,缩短数据库访问的使用周期。许多数据库中,连接(Connection)并不是资源的最小单元,控制Statement资源比Connection更重要。以Oracle为例:
- 每申请一个连接(Connection)会在物理网络(如 TCP/IP网络)上建立一个用于通讯的连接,在此连接上还可以申请一定数量的Statement。
- 同一连接可提供的活跃Statement数量可以达到几百。 在节约网络资源的同时,缩短了每次会话周期(物理连接的建立是个费时的操作)。
- 但在一般的应用中,多数按照下面范例操作,这样有10个程序调用,则会产生10次物理连接,每个Statement单独占用一个物理连接,这是极大的资源浪费。
- Snap-ConnectionPool可以解决这个问题,让几十、几百个Statement只占用同一个物理连接, 发挥数据库原有的优点。
对资源的申请、释放、回收、共享和同步,这些管理是复杂精密的。所以,Snap-ConnectionPool的另一个功能就是,封装这些操作,为应用提供简单的,甚至是不改变应用风格的调用接口。
|
应用范例 |
没有使用连接池的,常规的JDBC范例:
|
import java.sql.*; ...
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); Connection dbConn = DriverManager.getConnection( "jdbc:oracle:thin:@127.0.0.1:1521:oracle", "username", "password" );
Statement st = dbConn.createStatement(); ResultSet rs = st.executeQuery( "select * from demo_table" );
...some data source operation in here
rs.close(); st.close(); dbConn.close();
|
使用Snap-ConnectionPool连接池范例:
|
import java.sql.*; import net.snapbug.util.dbtool.*; ...
ConnectionPool dbConn = ConnectionManager.getConnectionPool( "testOracle" );
Statement st = dbConn.createStatement(); ResultSet rs = st.executeQuery( "select * from demo_table" );
...some data source operation in here
rs.close(); st.close(); dbConn.close();
|
在例子中,Snap-ConnectionPool封装了应用对Connection的管理。只要改变JDBC获取Connection的方法,为获取连接池(ConnectionPool)(粗体部分),其他的数据操作都可以不做修改。按照这样的方式,可以让Snap-ConnectionPool来帮助应用有效地管理数据库资源。如果应用忽视了最后资源的释放: rs.close() 和 st.close(),连接池会通过超时(time-out)机制,自动回收。
|
|
分享到:
相关推荐
esa-snap_sentinel_windows-x64_7.0安装包文件
itksnap-3.8.0-20190612-MacOS-x86_64.dmg mac端的标注工具,针对 nifty 和dicom
SNAP21一月新下载esa-snap_all_windows-x64_8_0.exe
数据库应用,在许多软件系统中,都经常用到,是开发中大型系统不可... <br> 为了简化数据库开发,缺省有效地管理数据库资源,Snap-ConnectionPool以最简单的方式,为应用供以一个有效的数据库资源管理工具。
esa-snap_sentinel_windows-x64_8_0.exe 欧空局官方哨兵数据处理工具、将JP2转为TIFF格式,是哨兵遥感影像下载后处理的不可少的一个插件。
最新版本的ITK-SNAP,搞医学图像必备利器
This tool is a image viewer for medical image before go into analyzing deep learning
欧空局自主研发的开源遥感数据处理平台——-SNAP SNAP(Sentinel Application Platform)是哨兵数据应用平台,是所有哨兵工具箱的基础平台(公共架构),为桌面端C-S平台。具有可扩展性、可移植性和模块化界面。 ...
可以满足医学生对图像处理的需求,量化数据,做各种研究,使主观的图像变得更加客观,使研究数据更具有说服力。
c#连接现场设备的程序,采用TCP/IP通讯协议,数据刷。
snap7源码包,需要的可以下载,已经在openwrt编译成功运行(需要用此源码自己编译),可以和S7-1500正常通讯,其他Linux平台类似
基于Snap和StaMPS对Sentinel-1 SLC数据进行PS-InSAR处理
西门子plc的以太网通信库,支持S7-200、S7-200 Smart、S7-300、S7-400、S7-1200、S7-1500,打开压缩文件,选择release\Windows\下面有32位和64位的snap7.dll和snap7.lib
s7.dll 的动态库文件 ,跨平台,在labview中已测试能用
minimum_snap_trajectory_generation-master,路径规划代码
脑MRI视图查看软件(itksnap-4.0.2-win64-AMD64.exe)
使用ITK-SNAP分割软件对图像的两个点坐标进行标注,用于识别两个点的线性回归任务。
打包使用snap7库的文件-snap7.dll
itksnap 医学图像处理软件
资源来自pypi官网。 资源全名:snap-plugin-lib-py-1.3.1.tar.gz