彻底弄懂mysql(二)--连接方式

对数据库的连接是一个很耗时的过程,tcp的连接也分为长连接和短连接,这都是为了满足不同的需求而产生的,mysql也不止一种连接方式,接下来我们介绍一下

短连接

短连接应该比较好理解,就是只要客户端与服务端进行任何数据传输的话就会建立一次连接,数据传输完毕之后就释放这个连接,下一次再请求就再建立连接,所以有可能一个session就与数据库建立了十几次甚至更多的连接,这种情况下如果数据访问量非常大时,比如每秒几百次,几千次,服务端怎么可能处理的过来。

总结一下短连接就是:
客户端连接–创建socket认证连接–维护连接–数据传输–关闭连接

长连接

其实长连接也好理解,有了之前tcp的长连接学习,这个应该就差不多,原理就是第一次建立连接之后,先不释放,这个连接就继续这个session的后序请求,即在一次连接上可以发送多个数据包,也可以得到多个数据响应

长连接:
客户端连接–创建socket认证连接–维护连接–数据传输–维护连接–数据传输…-关闭连接

这时候肯定有同学说,这比短连接好啊,省事,但是还有一个巨大的问题,就是长连接的维护,维护一个连接是需要系统开销的,短连接与长连接都需要系统开销,只不过,短连接释放后系统开销也被收回,可以继续维护下一个,但是一旦使用长连接,分配给你的开销就要一直维护到这个连接关闭位置(客户端主动关闭连接,超时后服务端主动关闭),所以问题就来了,系统的开销也不是无限的,如果连接全部被占满,新的请求就无法被处理,只能等待,而且如果客户端长时间不使用,却一直占这资源,很明显资源的浪费问题。

所以,对于这两种方式,如果并发量很大,也就是请求的用户非常大 ,长连接是非常不推荐的,使用短连接可能会对效率造成影响,但是不至于出现很多用户无法访问的现象,那么长连接什么时候用呢,并发量比较小,但是访问比较频繁的时候,比如用户少,但是每个session的访问频率非常大,可以用长连接。

接下来再说一种比较这种的方法,

连接池

连接池的一个核心思想就是连接复用,通过建立一个数据库连接池以及一套连接使用、分配和管理策略,使得该连接池中的连接可以得到高效、安全的复用,避免了数据库连接频繁建立、关闭的开销。

因为常见数据库的连接是一个比较影响性能的一个事情,所以使用连接池的目的也是尽量少的创建连接,然后呢又要避免去维护很多空闲的连接

连接池的工作原理主要由三部分组成,分别为连接池的建立、连接池中连接的使用管理、连接池的关闭。

第一、连接池的建立。一般在系统初始化时,连接池会根据系统配置建立,并在池中创建了几个连接对象,以便使用时能从连接池中获取。连接池中的连接不能随意创建和关闭,这样避免了连接随意建立和关闭造成的系统开销。Java中提供了很多容器类可以方便的构建连接池,例如Vector、Stack等。

第二、连接池的管理。连接池管理策略是连接池机制的核心,连接池内连接的分配和释放对系统的性能有很大的影响。其管理策略是:

当客户请求数据库连接时,首先查看连接池中是否有空闲连接,如果存在空闲连接,则将连接分配给客户使用;如果没有空闲连接,则查看当前所开的连接数是否已经达到最大连接数,如果没达到就重新创建一个连接给请求的客户;如果达到就按设定的最大等待时间进行等待,如果超出最大等待时间,则抛出异常给客户。
当客户释放数据库连接时,先判断该连接的引用次数是否超过了规定值,如果超过就从连接池中删除该连接,否则保留为其他客户服务。

该策略保证了数据库连接的有效复用,避免频繁的建立、释放连接所带来的系统资源开销。

第三、连接池的关闭。当应用程序退出时,关闭连接池中所有的连接,释放连接池相关的资源,该过程正好与创建相反。

上面提到了一些创建连接池的相关参数:
在这里插入图片描述
初始化连接就是,创建的时候想池里放入的连接对象数

最大连接数量,就是允许同一时间能都进行工作的最大数量,如果是0表示没有限制

最大空闲连接,就是连接池中最大空闲连接数,如果超了,就要释放一部分空闲超时连接,如果是0表示不需要释放

最小空闲连接数,太少了就要进行创建

超时等待时间,如果一个访问到来的时候,已经到达了最大连接数,那这个请求会被放在请求等待队列中,开启一个计时器,如果经过这个时间后,还没有可用连接,就直接抛出异常给此用户。如果是-1表示无限等待。

连接池的优势

连接池用于创建和管理数据库连接的缓冲池技术,缓冲池中的连接可以被任何需要他们的线程使用。当一个线程需要用JDBC对一个数据库操作时,将从池中请求一个连接。当这个连接使用完毕后,将返回到连接池中,等待为其他的线程服务。

连接池的主要优点有以下三个方面。

第一、减少连接创建时间。连接池中的连接是已准备好的、可重复使用的,获取后可以直接访问数据库,因此减少了连接创建的次数和时间。

第二、简化的编程模式。当使用连接池时,每一个单独的线程能够像创建一个自己的JDBC连接一样操作,允许用户直接使用JDBC编程技术。

第三、控制资源的使用。如果不使用连接池,每次访问数据库都需要创建一个连接,这样系统的稳定性受系统连接需求影响很大,很容易产生资源浪费和高负载异常。连接池能够使性能最大化,将资源利用控制在一定的水平之下。连接池能控制池中的连接数量,增强了系统在大量用户应用时的稳定性。

但是也不要被这些好处就蒙蔽了双眼,在选择连接方式时还是需要根据自己的项目需求进行分析,选择合适自己需求,连接池虽然好,如果你的并发量也不大,访问量也不是很频繁,用连接池也看不到性能的优化,因为连接池的建立与维护也是需要开销的,并且使用连接池也要根据自身情况合理的进行配置,太大或者是太小了都会对性能造成影响。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值