数据库 连接池、缓冲池(定义、原理)

数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需要从缓冲池中取出一个了,使用完毕后再放回去。我们可以通过设定连接池最大数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库连接使用数量,使用情况,为系统开发,测试以及性能调整提供依据。

连接池的相关问题分析:

1、并发问题。

 为了使连接管理服务具有最大的通用性,必须考虑多线程环境,并发问题。这个问题相对比较好解决,因为各个语言自身提供了并发管理的支持,比如java
c#等,使用synchronized(java) lock(c#)等关键字确保线程同步。

2、事务管理。

 我们知道,事务具有原子性,此时要求对数据库操作符合“ALL-ALL-NOTHING”原则,即对于一组sql语句要么全做,要么全不做。我们知道当两个线程共用一个连接connection对象时,而且各自都有自己的事务要处理时,对于连接池是一个很头疼的问题,因为即使connection类提供了相应的事务支持,可是我们仍然不能确定那个数据库操作对应那个事务。知识由于我们的两个线程都在进行事务操作。为此我们可以使用每一个事物独占一个连接来实现,虽然这种方法有点浪费连接池资源但是可以大大降低事务管理的复杂性。

3、连接池的分配与释放

连接池的分配与释放,对系统的性能有很大的影响。合理的分配与释放,可以提高连接的复用度,从而降低建立新连接的开销,同时还可以加快用户的访问速度。
  对于连接的管理可使用一个List。即把已经创建的连接都放入List中去统一管理。每当用户请求一个连接时,系统检查这个List中有没有可以分配的连接。如果有就把那个最合适的连接分配给他(如何能找到最合适的连接文章将在关键议题中指出);如果没有就抛出一个异常给用户,List中连接是否可以被分配由一个线程来专门管理捎后我会介绍这个线程的具体实现。

4、连接池的配置与维护

连接池中到底应该放置多少连接,才能使系统的性能最佳?系统可采取设置最小连接数(minConnection)和最大连接数(maxConnection)等参数来控制连接池中的连接。比方说,最小连接数是系统启动时连接池所创建的连接数。如果创建过多,则系统启动就慢,但创建后系统的响应速度会很快;如果创建过少,则系统启动的很快,响应起来却慢。这样,可以在开发时,设置较小的最小连接数,开发起来会快,而在系统实际使用时设置较大的,因为这样对访问客户来说速度会快些。最大连接数是连接池中允许连接的最大数目,具体设置多少,要看系统的访问量,可通过软件需求上得到。
  如何确保连接池中的最小连接数呢?有动态和静态两种策略。动态即每隔一定时间就对连接池进行检测,如果发现连接数量小于最小连接数,则补充相应数量的新连接,以保证连接池的正常运转。静态是发现空闲连接不够时再去检查。

引用记数

  在分配、释放策略对于有效复用连接非常重要,我们采用的方法也是采用了一个很有名的设计模式:reference counting(引用记数)。该模式在复用资源方面使用非常广泛,我们把该方法运用到对于连接分配释放上。每一个数据库连接,保留一个引用记数,用来记录该链接的使用者的个数。具体实现上,我们对connection类进行了进一步包装来实现引用记数。被包装的connection类我们提供2个方法来实现引用记数的操作,一个是repeat(被分配出去)一个是remove(被释放回来);然后利用repeatnow属性来确定当前引用多少,具体是哪个用户引用了该连接,将在连接池中登记;最后提供isRepeat属性来确定该连接是否可以使用引用记数技术。一旦一个连接被分配出去,那么就会对该连接的申请者进行登记,并且增加引用记数,当被释放回来时就删除他登记的信息,同时减少一次引用记数。这样做的一个很大的好处是,使得我们可以高效的使用连接,因为一旦所有连接都被分配出去,我们就可以根据相应的策略从使用池中挑出一个正在使用的连接来复用,而不是随便拿出一个连接去复用。

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

  连接池的主要优点:

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

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

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

连接池的工作原理:

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

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

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

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

当客户请求数据库连接时,首先查看连接池中是否有空闲连接,如果存在空闲连接,则将连接分配给客户使用;如果没有控线连接,则查看当前所开的连接数是否已经达到最大连接数,例如如果没有达到就重新创建一个请求的客户;如果达到,就按设定的最大等待时间进行等待,如果超出最大等待时间,则抛出异常给客户。

当客户释放数据库连接时,先判断该连接的引用次数是否超过了规定值,如果超过了就从连接池中删除该连接,否则就保留为其他客户服务。该策略保证了数据库连接的有效复用,避免了频繁建立释放连接所带来的系统资源的开销。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/549283.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电子商务基础:中小企业建站方案和资源

目前国内的中小企业数量已经有几千万家,但信息化建设却并 不理想,拥有网站的只有不超过两百万家,数以千万计的中小企业存在电子商务需求,却没有自己独立的网站。现在,越来越多的企业意识到通过建立网站开展电子 商务的…

Hibernate——(3)主键生成策略持久化类的三种状态

一 持久化类 1.持久化:内存对象--->数据库(硬盘)Hibernate持久化的框架 持久化类:Java对象与数据库中的表建立映射关系 Hibernate就称为持久化类(Java类映射文件) 2.编写规则: …

C# 二进制BinaryFormatter进行序列化与反序列化

原文链接:https://blog.csdn.net/e295166319/article/details/52790131 序列化又称串行化,是.NET运行时环境用来支持用户定义类型的流化的机制。其目的是以某种存储形成使自定义对象持久化,或者将这种对象从一个地方传输到另一个地方。 .NET框…

Algorithm学习笔记 --- 迷宫问题

版权声明&#xff1a;学习交流为主&#xff0c;未经博主同意禁止转载&#xff0c;禁止用于商用。 https://blog.csdn.net/u012965373/article/details/26376987 </div><link rel"stylesheet" href"https://csdnimg.cn/release/phoenix…

css资源网站收集推荐

非原创&#xff0c;来源网络。感谢原作者奉献如此精彩文章。原文地址&#xff1a;http://www.jianbitou.com/post/20_websites-learn-master-css.html1. A List Apart CSS Topics A List Apart是一个CSS优秀文章的收集网站&#xff0c;从1999年开始收集文章&#xff0c;关注最佳…

IP地址、子网掩码、网络号、主机号、网络地址、主机地址以及ip段/数字-如192.168.0.1/24是什么意思?

背景知识 IP地址 IP地址被用来给Internet上的电脑一个编号。大家日常见到的情况是每台联网的PC上都需要有IP地址&#xff0c;才能正常通信。我们可以把“个人电脑”比作“一台电话”&#xff0c;那么“IP地址”就相当于“电话号码”&#xff0c;而Internet中的路由器&#xff0…

思科CCNA第一学期期末考试答案

1 第 3 层头部包含的哪一项信息可帮助数据传输&#xff1f; 端口号 设备物理地址 目的主机逻辑地址 虚拟连接标识符 2 IP 依靠 OSI 哪一层的协议来确定数据包是否已丢失并请求重传&#xff1f; 应用层 表示层 会话层 传输层 3 请参见图示…

思科CCNA第二学期期末考试答案

1.关于数据包通过路由器传输时的封装和解封的叙述&#xff0c;下列哪三项是正确的&#xff1f;&#xff08;选择三项。&#xff09; 路由器修改 TTL 字段&#xff0c;将其值减 1。 路由器将源 IP 更改为送出接口的 IP。 路由器保持相同的源 IP 和目的 IP。 路…

关于xrdp的安装设置

参考链接http://linuxfan-linuxtips.blogspot.com/2010/03/get-xrdp-to-work-in-ubuntu.htmlhttp://chip.twbbs.org/blog/?p658http://www.mexlinux.com/how-to-install-xrdp-in-ubuntu/首先&#xff0c;你必须remove vnc4server&#xff0c;这个东西和这个软件有冲突sudo apt…

35-46集 中心极限定理、置信区间

第三十五集 中心极限定律   该定律是说随着样本n越来越大&#xff0c;这n个样本的m个均值会趋于正态分布。与大数定律的区别在于&#xff1a;大数定律描述的样本均值趋于总体均值&#xff0c;而中心极限定律描述的是样本均值的分布。 第三十六、七集 样本均值的抽样分布   …

AS3自制按钮通用代码

系统提供按钮不大适合现在的很多实用&#xff0c;很多都是MC做的&#xff0c;很多情况要些很多代码…… 代码 stop();addEventListener(MouseEvent.MOUSE_OVER,MouseOver);addEventListener(MouseEvent.MOUSE_UP,MouseOver);addEventListener(MouseEvent.MOUSE_DOWN,MouseDown)…

统计学(可汗学院视频62-81集笔记)

资料链接 本次统计学学习以网易云可汗学院公开课为主&#xff1a; 视频链接&#xff1a;http://open.163.com/special/Khan/khstatistics.html 并以《深入浅出统计学》为辅&#xff1a; 书籍链接&#xff1a;https://pan.baidu.com/s/1dCV6rrOWZU-deKxAoectGA </div…

可汗学院统计学笔记 42-81集

假设检验 假设检验是推论统计中用于检验统计假设的一种方法。而“统计假设”是可通过观察一组随机变量的模型进行检验的科学假说。一旦能估计未知参数&#xff0c;就会希望根据结果对未知的真正参数值做出适当的推论。统计上对参数的假设&#xff0c;就是对一个或多个参数的论述…

再谈js拖拽(一)

关于js拖拽早已是老生常谈&#xff0c;网上一搜一大坨&#xff0c;但是有很多并不是很完善&#xff0c;或者兼容性不够&#xff0c;或者功能不全&#xff0c;并且这样的东西还是自己写的好用。我打算在&#xff08;一&#xff09;中主要对js拖拽功能的注意点进行罗列&#xff0…

操作系统进程调度算法图解(FCFS、轮转、SPN、SRT、HRRN、反馈)

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 本文链接&#xff1a;https://blog.csdn.net/woshiwanghao_hi/article/details/13004507 FCFS: 先来先服务&#xff0c;也可以称为先进先出 轮转…

安装Ubuntu之后一定要安装Docky

2019独角兽企业重金招聘Python工程师标准>>> 安装Ubuntu之后一定要安装Docky&#xff0c;然后把面板隐藏&#xff0c;真是太漂亮了&#xff01; 图片太大&#xff0c;传不上来&#xff0c;传到百度上&#xff0c;又不让引用&#xff0c;还是百度看吧&#xff1a; 我…

操作系统中调度算法(FCFS、RR、SPN、SRT、HRRN)

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 本文链接&#xff1a;https://blog.csdn.net/xieminyao123/article/details/79116985 决策模式 决策模式说明选择函数在执行的瞬间的处理方式&a…

操作系统学习总结(超赞!!!)

我是技术搬运工,好东西当然要和大家分享啦.原文地址 操作系统基本特征 1. 并发 并发性是指宏观上在一段时间内能同时运行多个程序&#xff0c;而并行性则指同一时刻能运行多个指令。 并行需要硬件支持&#xff0c;如多流水线或者多处理器。 操作系统通过引入进程和线程&#xf…

操作系统的SPOOLING技术

SPOOLING技术&#xff08;Simultaneous Peripheral Operating On Line) 同时联机外围操作技术&#xff0c;它是关于慢速字符设备如何与计算机主机进行数据交换的一种技术&#xff0c;通常又称假脱机技术。 在多道程序环境下&#xff0c;利用多道程序中的一道或者两道程序来模拟…

独立磁盘冗余阵列:RAID

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 本文链接&#xff1a;https://blog.csdn.net/fsx2550553488/article/details/79819164 RAID RAID&#xff1a;独立磁盘冗余阵列&#xff08;Redun…