`

Snap ConnectionPool简介(图)- -

阅读更多

Snap ConnectionPool简介(图)- -

                                      

 

【虎.无名】Jdbc连接池接口有两种,目前的主流连接池,都是基于DataSource接口的。而下面这个,则直接基于原始Conntion和Statement等。Snap ConnectionPool的特点是,不仅仅缓存Connection,还对Statement和ResultSet等做了足够的缓存,通过超时回收来确保可靠资源释放。

产品 http://www.snapbug.net/product/snappool/product_sp_01.htm

<!---->
简介 | 下载 | FAQ
 
<!---->
简介

  数据库应用,在许多软件系统中,都经常用到,是开发中大型系统不可缺少的辅助。但如果对数据库资源的没有很好管理(如:没有及时回收数据库的游标(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)机制,自动回收。

 

- 作者: nike_liu 2006年05月25日, 星期四 10:28

分享到:
评论
1 楼 to_zoe_yang 2011-04-22  
不错~正在用呢

相关推荐

    itksnap-3.8.0-20190612-MacOS-x86_64.dmg

    itksnap-3.8.0-20190612-MacOS-x86_64.dmg mac端的标注工具,针对 nifty 和dicom

    esa-snap_sentinel_windows-x64_7_0.exe

    ESA SNAP(Sentinel Application Platform)是由欧洲空间局(ESA)开发的一款开源软件,主要用于处理和分析地球观测数据,特别是Sentinel系列卫星的数据。这个“esa-snap_sentinel_windows-x64_7_0.exe”文件是ESA ...

    itksnap-3.8.0-beta-20181028-Linux-x86_64.tar.gz

    《ITKSnap 3.8.0 Beta:医学图像预处理与深度学习分析的强大工具》 ITKSnap是一款专为医疗图像分析设计的高级图像查看器,其版本号为3.8.0 Beta,发布日期为2018年10月28日,适用于Linux x86_64架构。这个压缩包...

    SNAP21一月新下载esa-snap_all_windows-x64_8_0.exe

    SNAP21一月新下载esa-snap_all_windows-x64_8_0.exe

    esa-snap_sentinel_windows-x64_8_0.exe

    esa-snap_sentinel_windows-x64_8_0.exe 欧空局官方哨兵数据处理工具、将JP2转为TIFF格式,是哨兵遥感影像下载后处理的不可少的一个插件。

    Snap-ConnectionPool资料

    数据库应用,在许多软件系统中,都经常用到,是开发中大型系统不可... &lt;br&gt; 为了简化数据库开发,缺省有效地管理数据库资源,Snap-ConnectionPool以最简单的方式,为应用供以一个有效的数据库资源管理工具。

    itksnap-3.8.0-20190612-win64.exe

    最新版本的ITK-SNAP,搞医学图像必备利器

    snap7-full-1.4.2.7z

    《Snap7 Full 1.4.2:与S7-1500 PLC通信的关键工具》 Snap7是一个强大的开源库,专为连接到西门子S7系列PLC(可编程逻辑控制器)设计,特别是在Linux环境下。这个"Snap7-full-1.4.2.7z"压缩包包含了 Snap7的完整源...

    snap7-full-1.4.2.rar

    1. **Snap7简介**: Snap7是一个开源项目,由Matteo Vallerini和Andrea Casadei共同开发,提供了一个跨平台的解决方案,可以在Windows、Linux和Mac OS操作系统上运行。它支持TCP/IP协议,能够实现对西门子S7-300、...

    脑MRI视图查看软件(itksnap-4.0.2-win64-AMD64.exe)

    ITKSNAP是一款强大的医学图像处理和分析工具,主要用于查看、编辑和分析磁共振成像(MRI)数据。在这个特定的版本"itksnap-4.0.2-win64-AMD64.exe"中,我们看到的是适用于Windows 64位操作系统且基于AMD64架构的版本...

    itksnap-3.8.0-beta-20181028-win64.exe

    可以满足医学生对图像处理的需求,量化数据,做各种研究,使主观的图像变得更加客观,使研究数据更具有说服力。

    西门子S7通信库 - snap7-full-1.4.2

    西门子S7通信库 Snap7 是一个基于以太网与S7系列的西门子PLC通讯的开源库。 支持包括S7系列的S7-200、S7-200 Smart、S7-300、S7-400、S7-1200以及S7-1500的以太网通信。

    PyPI 官网下载 | snap-plugin-lib-py-1.3.1.tar.gz

    标题中的"PyPI 官网下载 | snap-plugin-lib-py-1.3.1.tar.gz"揭示了我们正在处理的是一个Python项目的包,这个包在Python的官方软件包索引(PyPI)上可以找到。PyPI是Python开发者发布他们创建的模块、库和其他工具...

    snap7-full-1.3.0.zip_Windows编程_full_snap7_snap7 C#_snap7-full-1.

    c#连接现场设备的程序,采用TCP/IP通讯协议,数据刷。

    打包使用snap7库的文件-snap7.dll

    打包使用snap7库的文件-snap7.dll

    snap7-full-1.4.2.7z.zip_7z.dll not found_snap7_snap7 labview_sna

    s7.dll 的动态库文件 ,跨平台,在labview中已测试能用

    itksnap-win64.zip

    ITK-SNAP是一款强大的医学图像处理软件,主要用于医学影像的可视化、分割和分析。它在医学成像领域中占有重要地位,特别是在研究和临床应用中。该软件的名字由两个部分组成:ITK(Insight Segmentation and ...

    esa-snap-sentinel-windows-x64-8-0【欧空局自主研发的开源遥感数据处理平台SNAP】

    欧空局自主研发的开源遥感数据处理平台——-SNAP SNAP(Sentinel Application Platform)是哨兵数据应用平台,是所有哨兵工具箱的基础平台(公共架构),为桌面端C-S平台。具有可扩展性、可移植性和模块化界面。 ...

    snap7-iot-mips-1.4.2.tar.gz

    标题 "snap7-iot-mips-1.4.2.tar.gz" 暗示着这是一个包含 Snap7 库的开源软件包,版本为 1.4.2,并且是针对 MIPS 架构优化的,用于在 Linux 平台上与西门子 PLC(Programmable Logic Controller)进行通信。Snap7 是...

Global site tag (gtag.js) - Google Analytics