连接池原理
连接池技术的核心思想是:连接复用,通过建立一个数据库连接池以及一套连接使用、分配、治理策略,使得该连接池中的连接可以得到高效、安全的复用,
避免了数据库连接频繁建立、关闭的开销。另外,由于对JDBC中的原始连接进行了封装,从而方便了数据库应用对于连接的使用(非凡是对于事务处理),提高
了开发效率,也正是因为这个封装层的存在,隔离了应用的本身的处理逻辑和具体数据库访问逻辑,使应用本身的复用成为可能。连接池主要由三部分组成:连接池
的建立、连接池中连接的使用治理、连接池的关闭。下面就着重讨论这三部分及连接池的配置问题。
1.1 连接池的建立
应用程序中建立的连接池其实是一个静态的。所谓静态连接池是指连接池中的连接在系统初始化时就已分配好,且不能随意关闭连接。Java中提供了很多
容器类可以方便的构建连接池,如:Vector、Stack、Servlet、Bean等,通过读取连接属性文件
Connections.properties与数据库实例建立连接。在系统初始化时,根据相应的配置创建连接并放置在连接池中,以便需要使用时能从连接
池中获取,这样就可以避免连接随意的建立、关闭造成的开销。
1.2 连接池的治理
连接池治理策略是连接池机制的核心。当连接池建立后,如何对连接池中的连接进行治理,解决好连接池内连接的分配和释放,对系统的性能有很大的影响。
连接的合理分配、释放可提高连接的复用,降低了系统建立新连接的开销,同时也加速了用户的访问速度。下面介绍连接池中连接的分配、释放策略。
连接池的分配、释放策略对于有效复用连接非常重要,我们采用的方法是一个很有名的设计模式:Reference
Counting(引用记数)。该模式在复用资源方面应用的非常广泛,把该方法运用到对于连接的分配释放上,为每一个数据库连接,保留一个引用记数,用来
记录该连接的使用者的个数。具体的实现方法是:
当客户请求数据库连接时,首先查看连接池中是否有空闲连接(指当前没有分配出去的连接)。假如存在空闲连接,则把连接分配给客户并作相应处理(即标
记该连接为正在使用,引用计数加1)。假如没有空闲连接,则查看当前所开的连接数是不是已经达到maxConn(最大连接数),假如没达到就重新创建一个
连接给请求的客户;假如达到就按设定的maxWaitTime(最大等待时间)进行等待,假如等待maxWaitTime后仍没有空闲连接,就抛出无空闲
连接的异常给用户。
当客户释放数据库连接时,先判定该连接的引用次数是否超过了规定值,假如超过就删除该连接,并判定当前连接池内总的连接数是否小于
minConn(最小连接数),若小于就将连接池布满;假如没超过就将该连接标记为开放状态,可供再次复用。可以看出正是这套策略保证了数据库连接的有效
复用,避免频繁地建立、释放连接所带来的系统资源开销。
1.3 连接池的关闭
当应用程序退出时,应关闭连接池,此时应把在连接池建立时向数据库申请的连接对象统一归还给数据库(即关闭所有数据库连接),这与连接池的建立正好是一个相反过程。
1.4 连接池的配置
数据库连接池中到底要放置多少个连接,才能使系统的性能更佳,用minConn和maxConn来限制。minConn是当应用启动的时候连接池所
创建的连接数,假如过大启动将变慢,但是启动后响应更快;假如过小启动加快,但是最初使用的用户将因为连接池中没有足够的连接不可避免的延缓了执行速度。
因此应该在开发的过程中设定较小minConn,而在实际应用的中设定较大minConn。maxConn是连接池中的最大连接数,可以通过反复试验来确
定此饱和点。为此在连接池类ConnectionPool中加入两个方法getActiveSize()和
getOpenSize(),ActiveSize
表示某一时间有多少连接正被使用,OpenSize表示连接池中有多少连接被打开,反映了连接池使用的峰值。将这两个值在日志信息中反应出来,
minConn的值应该小于平均ActiveSize,而maxConn的值应该在activeSize和OpenSize之间
分享到:
相关推荐
快速开始使用pip安装所有引擎: $ pip install django-db-connection-pool[all] 或选择特定引擎: $ pip install django-db-connection-pool[mysql,oracle,postgresql] 配置MySQL 将django.db.backends.mysql更改为...
亲测可用,解压包含三个jar包,引用时sources和doc包根据需要添加。 mongo-java-driver-3.5.0.jar; mongo-java-driver-3.5.0-javadoc.jar; mongo-java-driver-3.5.0-sources.jar;
mongo-java-driver-3.6.4,可用于连接mangoDB数据库~~~~~~~~~~~~~~~~~~
mongo-java-driver-3.4.2.jar
Java连接GBase数据库通常涉及到使用特定的数据库驱动,即JDBC驱动。GBase-Connector-Java-8.3-bin.jar是用于Java应用程序连接GBase数据库的驱动包。在这个压缩包中,主要包含的是GBase数据库的Java JDBC驱动程序,...
$ cd clojure-db-pool $ lein repl user=> (require 'ticks.web) user=>(def server (ticks.web/-main)) 您的应用程序现在应该在上运行。 部署到 Heroku $ heroku create $ heroku addons:add heroku-postgresql:
gmall2020-mock-db-2021-11-14.jar
【JDBC-DT-DB-SQL】MySQL-5.1.7连接Java的JDBC驱动是Java应用程序与MySQL数据库交互的重要桥梁。JDBC(Java Database Connectivity)是Java平台中的一个标准API,它允许Java程序通过Java语言来访问各种类型的数据库...
openldap-2.2.29-db-4.3.29-openssl 不为积分只为没有积分的哥们少作难,另有陪有强大的LdapAdmin.exe, 比较Softerra LDAP Browser 2.5强百倍。没有积分下个资源到处奔波飘荡,省去你的时间,亲人。 LdapAdmin.exe ...
- 讲解了如何通过Java应用程序来调用DB2Connect提供的服务。 - **Web ~qw ODB2Connect**: - 分析了如何构建基于Web的应用程序来访问DB2数据库。 - **DB2Connect M&CLr ~qw**: - 给出了更多关于CLI工具的使用示例...
MySQL-Connector-Java-5.1.39.tar
characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.user=root db.password=your_password ``` 同时,为了确保Nacos能够识别并加载MySQL插件,还需要在启动参数中加入相应的...
`maven-db-plugin` 插件有两个版本,即 `1.3` 和 `1.4`,这两个版本的 JAR 文件在压缩包中分别以 `maven-db-plugin-1.4.jar` 和 `maven-db-plugin-1.3.jar` 的形式存在。这些 JAR 文件包含了插件所需的全部类和资源...
sql-to-mongo-db-query-converter sql-to-mongo-db-query-converter可帮助您基于SQL中提供的查询为MongoDb构建查询。玛文向com.github.vincentrussell:sql-to-mongo-db-query-converter添加依赖...
在Java-Edition-BerkeleyDB-3.1.0版本中,它提供了高效、可靠的数据存储解决方案,尤其适合于对性能有极高要求的嵌入式应用或分布式系统。该数据库系统以其轻量级、无服务器模式以及出色的并发控制而闻名。 **1. ...
LoginRegisterApp 安装MySQL版本8.0.21(即8.0.x) ... 如果您正在使用其他用户,则需要在以下... cd / root / java-db-Login / src / main 更新文件-DB结束POINT java / com / example / DbUtil.java java / com / e
Quick Start Guide - DB2 Connect1 PDF Quick Start Guide - IBM Database Enterprise Developer Edition1 PDF Quick Start Guide - DB2 Connect Unlimited Edition for System z1 PDF September, 2010 Quick ...
- **变量名**:自定义的引用名,例如"db_connection",后续的采样器会使用这个变量来获取数据库连接。 - **数据库URL**:格式通常为"jdbc:mysql://[hostname]:[port]/[database_name]",例如"jdbc:mysql://...
- `db2 connect to <数据库名>`:连接到本地数据库。 - `db2 connect to <数据库名> user <用户名> using <密码>`:连接到远程数据库,指定用户名和密码。 2. **应用管理** - `db2 force application all`:强制...
里面包含train、valid两个数据集