Ⅰ 数据库连接数和数据库连接池的连接数区别是什么
数据库连接数
也就是一个数据库,最多能够同时 接受 多少个 客户的连接.
在没有 数据库连接池 的情况下, 一个客户,每次访问, 就要创建一个 数据库连接, 执行 SQL, 获取结果, 然后关闭、释放掉数据库连接。
问题就在于 创建一个数据库连接, 是一个很消耗资源,花费很多时间的操作。
于是,数据库连接池 产生了。
数据库连接池 预先打开一定数量的 数据库连接, 并维持着连接。
当客户要执行SQL语句的时候, 从 数据库连接池 里面, 获取一个连接, 执行SQL, 获取结果, 然后把 数据库连接, 交还给数据库连接池。
假如一个 session , 执行 10次独立的操作。
那么不使用 数据库连接池 的, 需要 创建数据库连接10次, 并关闭10次。
使用 数据库连接池 的, 直接使用 数据库连接池 中 已经打开好的,直接使用。
Ⅱ mysql数据库最大连接数可以设置为多少
MySQL服务器的最大并发连接数是16384。
MySQL作为一种开放源代码的关系型数据库管理系统(RDBMS),使用最常用的数据库管理语言结构化查询语言(SQL)进行数据库管理。
MySQL服务器的最大并发连接数受服务器配置,及网络环境等制约,实际服务器支持的并发连接数会小一些,主要决定因素有:
服务器CPU及内存的配置,网络的带宽。
互联网连接中上行带宽的影响尤为明显。
(2)数据库连接池多少扩展阅读:
与其他的大型数据库例如Oracle、IBM DB2、MS SQL等相比,MySQL自有它的不足之处,如规模小、功能有限等,但是这丝毫也没有减少它受欢迎的程度。对于一般的个人用户和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于MySQL是开放源码软件,因此可以大大降低总体拥有成本。
由于这四个软件都是开放源码软件,因此使用这种方式可以以较低的成本创建起一个稳定、免费的网站系统。MySQL加PHP的配对在互联网上的应用相比LAMP来说更为常见,并获得了动态配对的雅号,大部分Blog网站基于的WordPress系统主要运用MySQL加PHP的配对。除了LAMP之外,用于Solaris、Windows和Mac上的网站构架也分别被称为SAMP、WAMP和MAMP。
Ⅲ 如何设置数据库连接池的数量
1、数据库连接数,也就是一个数据库,最多能够同时 接受 多少个 客户的连接.
2、在没有数据库连接池 的情况下, 一个客户,每次访问, 就要创建一个 数据库连接, 执行 SQL, 获取结果, 然后关闭、释放掉数据库连接,问题就在于创建一个数据库连接, 是一个很消耗资源,花费很多时间的操作,于是数据库连接池产生了。
3、数据库连接池 预先打开一定数量的数据库连接, 并维持着连接。
4、当客户要执行SQL语句的时候, 从数据库连接池 里面,获取一个连接,执行SQL, 获取结果, 然后把数据库连接,交还给数据库连接池。
5、假如一个 session , 执行10次独立的操作,那么不使用 数据库连接池的,需要创建数据库连接10次,并关闭10次。
6、使用 数据库连接池的,直接使用 数据库连接池中已经打开好的,直接使用。
Ⅳ 数据库连接池
在实际应用开发中,特别是在WEB应用系统中,如果JSP、Servlet或EJB使用JDBC直接访问数据库中的数据,每一次数据访问请求都必须经历建立数据库连接、打开数据库、存取数据和关闭数据库连接等步骤,而连接并打开数据库是一件既消耗资源又费时的工作,如果频繁发生这种数据库操作,系统的性能必然会急剧下降,甚至会导致系统崩溃。数据库连接池技术是解决这个问题最常用的方法,在许多应用程序服务器(例如:Weblogic,WebSphere,JBoss)中,基本都提供了这项技术,无需自己编程,但是,深入了解这项技术是非常必要的。
数据库连接池技术的思想非常简单,将数据库连接作为对象存储在一个Vector对象中,一旦数据库连接建立后,不同的数据库访问请求就可以共享这些连接,这样,通过复用这些已经建立的数据库连接,可以克服上述缺点,极大地节省系统资源和时间。
数据库连接池的主要操作如下:
(1)建立数据库连接池对象(服务器启动)。
(2)按照事先指定的参数创建初始数量的数据库连接(即:空闲连接数)。
(3)对于一个数据库访问请求,直接从连接池中得到一个连接。如果数据库连接池对象中没有空闲的连接,且连接数没有达到最大(即:最大活跃连接数),创建一个新的数据库连接。
(4)存取数据库。
(5)关闭数据库,释放所有数据库连接(此时的关闭数据库连接,并非真正关闭,而是将其放入空闲队列中。如实际空闲连接数大于初始空闲连接数则释放连接)。
(6)释放数据库连接池对象(服务器停止、维护期间,释放数据库连接池对象,并释放所有连接)。
Ⅳ 数据库连接池常用的有几种
在项目中尝试使用了几种开源的数据库连接池实现。一种是dbcp,一种是c3p0,还有一种是proxool,这几种数据库连接池都可以很容易的在Spring配置起来。性能总体上上感觉dbcp为最优,因为稳定性和并发性都是我的项目需要的。
Ⅵ 什么是数据库连接池,有什么作用
1、基本概念及原理
由上面的分析可以看出,问题的根源就在于对数据库连接资源的低效管理。我们知道,对于共享资源,有一个很着名的设计模式:资源池 (Resource Pool)。该模式正是为了解决资源的频繁分配?释放所造成的问题。为解决上述问题,可以采用数据库连接池技术。数据库连接池的基本思想就是为数据库连接 建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定 连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量?使用情况,为系统开发?测试及性能调 整提供依据。
2、服务器自带的连接池
JDBC的API中没有提供连接池的方法。一些大型的WEB应用服务器如BEA的WebLogic和IBM的WebSphere等提供了连接池的机制,但是必须有其第三方的专用类方法支持连接池的用法。
连接池关键问题分析
1、并发问题
为了使连接管理服务具有最大的通用性,必须考虑多线程环境,即并发问题。这个问题相对比较好解决,因为Java语言自身提供了对并发管理的支 持,使用synchronized关键字即可确保线程是同步的。使用方法为直接在类方法前面加上synchronized关键字,如:
public synchronized Connection getConnection()
2、多数据库服务器和多用户
对于大型的企业级应用,常常需要同时连接不同的数据库(如连接Oracle和Sybase)。如何连接不同的数据库呢?我们采用的策略是:设计 一个符合单例模式的连接池管理类,在连接池管理类的唯一实例被创建时读取一个资源文件,其中资源文件中存放着多个数据库的url地址()?用户名()?密 码()等信息。如 tx.url=172.21.15.123:5000/tx_it,tx.user=yang,tx.password=yang321。根据资源文件提 供的信息,创建多个连接池类的实例,每一个实例都是一个特定数据库的连接池。连接池管理类实例为每个连接池实例取一个名字,通过不同的名字来管理不同的连 接池。
对于同一个数据库有多个用户使用不同的名称和密码访问的情况,也可以通过资源文件处理,即在资源文件中设置多个具有相同url地址,但具有不同用户名和密码的数据库连接信息。
3、事务处理
我们知道,事务具有原子性,此时要求对数据库的操作符合“ALL-ALL-NOTHING”原则,即对于一组SQL语句要么全做,要么全不做。
在Java语言中,Connection类本身提供了对事务的支持,可以通过设置Connection的AutoCommit属性为 false,然后显式的调用commit或rollback方法来实现。但要高效的进行Connection复用,就必须提供相应的事务支持机制。可采用 每一个事务独占一个连接来实现,这种方法可以大大降低事务管理的复杂性。
4、连接池的分配与释放
连接池的分配与释放,对系统的性能有很大的影响。合理的分配与释放,可以提高连接的复用度,从而降低建立新连接的开销,同时还可以加快用户的访问速度。
对于连接的管理可使用空闲池。即把已经创建但尚未分配出去的连接按创建时间存放到一个空闲池中。每当用户请求一个连接时,系统首先检查空闲池内 有没有空闲连接。如果有就把建立时间最长(通过容器的顺序存放实现)的那个连接分配给他(实际是先做连接是否有效的判断,如果可用就分配给用户,如不可用 就把这个连接从空闲池删掉,重新检测空闲池是否还有连接);如果没有则检查当前所开连接池是否达到连接池所允许的最大连接数(maxConn),如果没有 达到,就新建一个连接,如果已经达到,就等待一定的时间(timeout)。如果在等待的时间内有连接被释放出来就可以把这个连接分配给等待的用户,如果 等待时间超过预定时间timeout,则返回空值(null)。系统对已经分配出去正在使用的连接只做计数,当使用完后再返还给空闲池。对于空闲连接的状 态,可开辟专门的线程定时检测,这样会花费一定的系统开销,但可以保证较快的响应速度。也可采取不开辟专门线程,只是在分配前检测的方法。
5、连接池的配置与维护
连接池中到底应该放置多少连接,才能使系统的性能最佳?系统可采取设置最小连接数(minConn)和最大连接数(maxConn)来控制连接 池中的连接。最小连接数是系统启动时连接池所创建的连接数。如果创建过多,则系统启动就慢,但创建后系统的响应速度会很快;如果创建过少,则系统启动的很 快,响应起来却慢。这样,可以在开发时,设置较小的最小连接数,开发起来会快,而在系统实际使用时设置较大的,因为这样对访问客户来说速度会快些。最大连 接数是连接池中允许连接的最大数目,具体设置多少,要看系统的访问量,可通过反复测试,找到最佳点。
如何确保连接池中的最小连接数呢?有动态和静态两种策略。动态即每隔一定时间就对连接池进行检测,如果发现连接数量小于最小连接数,则补充相应数量的新连接,以保证连接池的正常运转。静态是发现空闲连接不够时再去检查。
Ⅶ 数据库连接池最大个数的影响
池是一个很普遍的概念,和缓冲存储有机制相近的地方,都是缩减了访问的环节,但它更注重于资源的共享。
对于访问数据库来说,建立连接的代价比较昂贵,因此,我们有必要建立"连接池"以提高访问的性能。我们可以把连接当作对象或者设备,池中又有许多已经建立的连接,访问本来需要与数据库的连接的地方,都改为和池相连,池临时分配连接供访问使用,结果返回后,访问将连接交还。
JDBC 1.0标准及其扩展中没有定义连接池,而在JDBC 2.0标准的扩展中定义了与连接池相关的接口。与接口对应的类由应用服务器厂商实现,你可在对服务器的管理过程中调节某个数据库连接池的参数。
下面列举了和连接池有关的属性(含数据库连接池最大个数的影响):
Minimum Pool Size 池中保持的连接的最小数目;有新的请求,且没有激活连接可供使用时,池中连接数将增大,到最大连接数为止
Maximum Pool Size 池中保持的连接的最大数目;当这个数目达到,且没有激活连接可供使用时,新的请求将等待
Connection Timeout 当连接数达到最大值,且激活连接都在被使用时,新的请求等待的时间
Idle Timeout 连接可在池中闲置的时间;超过将释放资源,到最小连接数为止
Orphan Timeout 连接在被应用控制时,可闲置的时间;超过将返回池中
Ⅷ java数据库连接池最大连接数最小连接数怎么设置
最大连接数:这个连接池最多能有几条连接,如果初始化的连接数没有了,用户可以创建,但是要给个判断不能超过最大连接数。
最小连接数:就是连接池初始化的连接(连接池初始化多少条连接)
// 设置最大连接数,(根据并发请求合理设置)。
config.setMaxTotal(100);
// 设置最大空闲连接数,(根据并发请求合理设置)
config.setMaxIdle(20);
// 多长空闲时间之后回收空闲连接
setMinEvictableIdleTimeMillis(60000);
// 设置最小空闲连接数或者说初始化连接数
config.setMinIdle(10);
// 设置最大等待时间
config.setMaxWaitMillis(500);
// 跟验证有关
config.setTestOnBorrow(true);
// 跟验证有关
config.setTestOnReturn(false);
// 启动空闲连接的测试
config.setTestWhileIdle(false);
Ⅸ weblogic数据库连接池 连接数多少
在weblogic中配置数据库连接数,主要有3个配置,一个是初始化多少个连接,最大多少个连接,还有就是当连接数不够时每次增加多少个连接。
一般建议是初始化何最大配置一样多的,主要可以减少因为连接数不够需要增加。提高性能。
还有一种是初始化是最大的一半。
最大多少个连接需要根据应用来确定,一般要配置超过你的应用的并发量。
Ⅹ Java开发常用的几个数据库连接池
数据库连接池的好处是不言而喻的,现在大部分的application
server都提供自己的数据库连接池方案,此时,只要按照application server的文档说明,正确配置,即可在应用中享受到数据库连接池的好处。
但是,有些时候,我们的应用是个独立的java
application,并不是普通的WEB/J2EE应用,而且是单独运行的,不要什么application
server的配合,这种情况下,我们就需要建立自己的数据库连接池方案了。
1、 DBCP
DBCP是Apache的一个开源项目:
commons.dbcp
DBCP依赖Apache的另外2个开源项目
commons.collections和commons.pool
dbcp包,目前版本是1.2.1:http://jakarta.apache.org/commons/dbcp/
pool包,目前版本是1.3:http://jakarta.apache.org/commons/pool/,
common-collections包:http://jakarta.apache.org/commons/collections/
下载这些包并将这些包的路径添加到classpath中就可以使用dbcp做为项目中的数据库连接池使用了。
在建立我们自己的数据库连接池时,可以使用xml文件来传入需要的参数,这里只使用hard
code的方式来简单介绍,所有需要我们自己写的代码很少,只要建立一个文件如下:
import
org.apache.commons.dbcp.BasicDataSource;
import
org.apache.commons.dbcp.BasicDataSourceFactory;
import
java.sql.SQLException;
import java.sql.Connection;
import
java.util.Properties;
public class ConnectionSource {
private static BasicDataSource dataSource =
null;
public ConnectionSource() {
}
public static void init() {
if (dataSource != null) {
try
{
dataSource.close();
} catch (Exception e)
{
}
dataSource = null;
}
try {
Properties p = new
Properties();
p.setProperty("driverClassName",
"oracle.jdbc.driver.OracleDriver");
p.setProperty("url",
"jdbc:oracle:thin:@192.168.0.1:1521:testDB");
p.setProperty("password", "scott");
p.setProperty("username",
"tiger");
p.setProperty("maxActive", "30");
p.setProperty("maxIdle", "10");
p.setProperty("maxWait",
"1000");
p.setProperty("removeAbandoned",
"false");
p.setProperty("removeAbandonedTimeout",
"120");
p.setProperty("testOnBorrow", "true");
p.setProperty("logAbandoned", "true");
dataSource = (BasicDataSource)
BasicDataSourceFactory.createDataSource(p);
} catch (Exception e) {
}
}
public static synchronized Connection
getConnection() throws SQLException {
if (dataSource == null) {
init();
}
Connection conn = null;
if (dataSource != null) {
conn = dataSource.getConnection();
}
return conn;
}
}
接下来,在我们的应用中,只要简单地使用ConnectionSource.getConnection()就可以取得连接池中的数据库连接,享受数据库连接带给我们的好处了。当我们使用完取得的数据库连接后,只要简单地使用connection.close()就可把此连接返回到连接池中,至于为什么不是直接关闭此连接,而是返回给连接池,这是因为dbcp使用委派模型来实现Connection接口了。
在使用Properties来创建BasicDataSource时,有很多参数可以设置,比较重要的还有:
testOnBorrow、testOnReturn、testWhileIdle,他们的意思是当是取得连接、返回连接或连接空闲时是否进行有效性验证(即是否还和数据库连通的),默认都为false。所以当数据库连接因为某种原因断掉后,再从连接池中取得的连接,实际上可能是无效的连接了,所以,为了确保取得的连接是有效的,
可以把把这些属性设为true。当进行校验时,需要另一个参数:validationQuery,对oracle来说,可以是:SELECT COUNT(*) FROM
DUAL,实际上就是个简单的SQL语句,验证时,就是把这个SQL语句在数据库上跑一下而已,如果连接正常的,当然就有结果返回了。
还有2个参数:timeBetweenEvictionRunsMillis 和
minEvictableIdleTimeMillis,
他们两个配合,可以持续更新连接池中的连接对象,当timeBetweenEvictionRunsMillis
大于0时,每过timeBetweenEvictionRunsMillis
时间,就会启动一个线程,校验连接池中闲置时间超过minEvictableIdleTimeMillis的连接对象。
还有其他的一些参数,可以参考源代码。
2、
C3P0:
C3P0是一个开放源代码的JDBC连接池,C3PO
连接池是一个优秀的连接池,推荐使用。C3PO实现了JDBC3.0规范的部分功能,因而性能更加突出,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。
下载地址:http://sourceforge.net/projects/c3p0
package
com.systex.utils.web;
import java.beans.PropertyVetoException;
import
java.sql.Connection;
import java.sql.SQLException;
import
javax.sql.DataSource;
import
com.mchange.v2.c3p0.ComboPooledDataSource;
public class C3PODataSource {
private static
ComboPooledDataSource dataSource = null;
private static final String driver
= "com.mysql.jdbc.Driver";
private static final String url =
"jdbc:mysql://localhost:3306/wyd";
private static final String userName =
"root";
private static final String password = "root";
public static DataSource getDataSource() {
if
(dataSource == null) {
dataSource = new ComboPooledDataSource();
try
{
dataSource.setDriverClass(driver);
} catch (PropertyVetoException
e) {
System.out.println("DataSource Load Driver
Exception!!");
e.printStackTrace();
}
dataSource.setJdbcUrl(url);
dataSource.setUser(userName);
dataSource.setPassword(password);
//
设置连接池最大连接容量
dataSource.setMaxPoolSize(20);
//
设置连接池最小连接容量
dataSource.setMinPoolSize(2);
//
设置连接池最大statements对象容量
dataSource.setMaxStatements(100);
}
return
dataSource;
}
public static Connection getConnection() throws
SQLException {
return
C3PODataSource.getDataSource().getConnection();
}
}
3、 Proxool
这是一个Java SQL
Driver驱动程序,提供了对你选择的其它类型的驱动程序的连接池封装。可以非常简单的移植到现存的代码中。完全可配置。快速,成熟,健壮。可以透明地为你现存的JDBC驱动程序增加连接池功能。
官方网站: http://proxool.sourceforge.net/
下载地址:http://proxool.sourceforge.net/download.html