4000-9696-28

数据库连接池

2023年02月07日 13:28供稿中心:北大青鸟总部

摘要: 数据库连接的工作原理由三部分组成,包括连接池的建立、连接的使用管理、连接词的关闭。

自互联网诞生以来,不断的产生了很多新架构、新技术、新思想,在架构层次来看,从之前的单机架构—》SOA架构— 〉微服务架构—》中台架构;在技术层次看,从之前的物理机部署—〉虚拟机部署— 》容器部署—〉kubernets部署,算法也逐渐演变成数据库、云计算、机器学习,移动基站建设也从2G、3G、4G、5G、6G进行演变;在设计思想上来看,从最初的瀑布式开发演变成敏捷开发、devops。所有在互联网发生的这一切都只有一个目的,让用户更快的找到自己想要的东西、更快的解决问题,同时降低企业的成本。

所以对于应用程序来说,资源是非常宝贵和稀缺的,这既包含了计算资源、存储资源、网络资源,也包含线程池资源、数据库连接资源。如何利用好资源、提供最好的用户体验成为企业最大的问题?应用程序的执行过程往往是这样的,用户在浏览器或app发起一个请求,通过web服务器解析加载前端资源给到用户,同时将请求发送给应用服务器处理用户请求,在应用服务器处理时可能会调用其它业务模块、也可能会调用远程服务、但一定会调用数据库,所以最重要的模块便是数据库,而最容易出现问题的地方也是数据库,因此充分利用好数据库资源十分重要。

在传统互联网时代,如果一个程序要访问mysql要经过tcp的三次握手与数据库服务器建立可靠的连接、再进行mysql用户名和密码认证、执行sql语句、关闭msql、关闭tcp连接,每一次访问数据库都要去建立连接,然后执行,在释放连接。这就会让企业和用户不“快”。用户不快是因为他要等很久,在这个过程中不断的建立释放网络连接、不断的访问数据库服务器,占据了网络io资源,而且极可能达到数据库服务器能处理的瓶颈,从而造成了用户请求的等待。企业不快(乐)是因为用户不快(速)。



在云计算时代,我们的思想是要充分的利用资源,将重复的事情抽象出来共用。在这个过程中,每个数据库连接都需要去tcp三次握手建立连接、释放连接,如果所有的数据库连接都可以共享这建立连接和释放连接的过程,那么网络开销、数据库负载就会降下来了。这就是我们的数据库连接池,它就是负责分配、管理、释放数据库连接的数据库中间件,使得应用程序可以重复使用一个现有的数据库连接。



数据库连接的工作原理由三部分组成,包括连接池的建立、连接的使用管理、连接词的关闭。 目前在市场上有商用和开源的数据库连接池,商用的以IBM的weblogic为主,而开源的则以阿里的DBCP为主,在互联网时代,大家都习惯了免费(虽然免费的往往是最贵的),加上开源也便于大家操作实践,因此我们使用DBCP将理论与实际结合来介绍数据库连接池的“最佳实践”~


Ø 连接池的建立

在系统初始化时,连接池根据系统配置建立并在池中创建几个连接对象,需要使用的时候就从池子中获取即可,并且不允许用户随意的创建和关闭连接,从而带来不必要的网络开销(建立tcp连接和释放连接)。



初始化时选择JDBC(Java DataBase Connectivity,Java数据库连接管理)驱动程序来进行数据的连接,并选择连接的数据库类型(mysql)、数据库服务器(localhost:3306)、数据库(day14),并配置对应的用户名和密码。


Ø 连接池的管理

有了连接池后,对连接数需要进行分配和释放等工作,这就是数据库连接池的管理工作。当用户请求数据库连接时,系统会先判断有没有空闲的,如果有的话就分配给客户使用;如果没有空闲连接,系统会看看当前所存在的连接数是否达到了最大可用值,没有的话就创建一个新的连接给到用户;如果没有空闲的连接也达到了最大连接数,就设置一个最长等待时间,超过等待时间后告知用户发生异常,停止等待;



Ø 连接池的关闭

当应用程序退出后,关闭掉池子中所有的连接,释放资源即可。

其实这种“池”的思想在云计算时代特别的普遍,在一定程度上可以明显优化服务器应用程序的性能,提高程序执行效率和降低系统资源开销。除了数据库连接池、线程池之外,还有内存池、对象池等。其中,对象池可以看成保存对象的容器,在进程初始化时创建一定数量的对象。需要时直接从池中取出一个空闲对象,用完后并不直接释放掉对象,而是再放到对象池中以方便下一次对象请求可以直接复用。内存池也是如此的思想。池技术的优势是,可以消除应用程序创建所带来的延迟,从而提高系统的性能,让用户更快的找到自己想要的东西、更快的解决问题、更快乐。

这其实和我们生活中取快递的场景很像。当遇上618或双十一这样的大促时,仿佛每个人都积蓄了洪荒之力一样顷刻之间要把需要的、不需要的、想买的、不想买的全都买了,反正就是一个字,买。那买了东西,就会有物流公司和快递小哥给你送过来啊。你购买的是不同平台不同商家的不同商品,那么不同的发货时间不同的快递公司不同的取件时间也是非常正常的现象,就会出现这样的场景,每来一个快递,你就得下楼去取一趟然后再回到寝室,而快递小哥也是得等每个快递都被人取了才算完成任务,运气好点吧,能一次多取几个,运气不好的话只能一次取一个,这样你很不快(速)取到自己的所有包裹,你自然也不(快)乐。

但是人类是聪明的,不怕困难,迎难而上。在很多学校里都会有这样的一个收货点的存在,快递小哥把快件放到收货点就走了,你根据自己合适的时间去收货点取快递,通过这个收货点,将之前每次送快递与取快递的过程抽象为只要一次即可,这样你很快(速)取到自己的所有包裹,你自然也很(快)乐。

至此,相信大家已经完全掌握了数据库连接池这个知识点了吧~


关于我们
公司简介
发展历程
青鸟荣誉
联系我们
加入我们
青鸟课程
BCVE视频特效课程
BCUI全链路UI设计
BCSP软件开发专业
BCNT网络工程师
启能职业教育基础课程
学习客户端下载
青鸟优师
青鸟云课堂
微信 公众号 咨询 顶部 首页
官方新版意见收集

*

官方新版意见收集

提交成功,感谢您的反馈。

我们会认真阅读和考虑每个用户的反馈。