连接池

连接池是什么?

连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用。

连接池的优点

  • 减少连接创建时间
  • 简化的编程模式
  • 受控的资源使用

注:连接池能够使性能最大化,同时还能将资源利用控制在一定的水平之下,如果超过该水平,应用程序将崩溃而不仅仅是变慢。

在实际应用开发中,特别是在WEB应用系统中,如果JSP、Servlet或EJB使用JDBC直接访问数据库中的数据,每一次数据访问请求都必须经历建立数据库连接、打开数据库、存取数据和关闭数据库连接等步骤,而连接并打开数据库是一件既消耗资源又费时的工作,如果频繁发生这种数据库操作,系统的性能必然会急剧下降,甚至会导致系统崩溃。数据库连接池技术是解决这个问题最常用的方法,在许多应用程序服务器(例如:Weblogic,WebSphere,JBoss)中,基本都提供了这项技术,无需自己编程,但是,深入了解这项技术是非常必要的。

数据库连接池技术的思想非常简单,将数据库连接作为对象存储在一个Vector对象中,一旦数据库连接建立后,不同的数据库访问请求就可以共享这些连接,这样,通过复用这些已经建立的数据库连接,可以克服上述缺点,极大地节省系统资源和时间。

数据库连接池的运行原理

数据库连接池的主要操作如下:
(1)建立数据库连接池对象(服务器启动)。
(2)按照事先指定的参数创建初始数量的数据库连接(即:空闲连接数)。
(3)对于一个数据库访问请求,直接从连接池中得到一个连接。如果数据库连接池对象中没有空闲的连接,且连接数没有达到最大(即:最大活跃连接数),创建一个新的数据库连接。
(4)存取数据库。
(5)关闭数据库,释放所有数据库连接(此时的关闭数据库连接,并非真正关闭,而是将其放入空闲队列中。如实际空闲连接数大于初始空闲连接数则释放连接)。
(6)释放数据库连接池对象(服务器停止、维护期间,释放数据库连接池对象,并释放所有连接)。

简单来说:
连接池的工作原理主要由三部分组成,分别为

  1. 连接池的建立
  2. 连接池中连接的使用管理
  3. 连接池的关闭

连接池的实现模式

  1. 连接池模型
  2. 连接池实现
  3. 连接池使用

连接池需要注意的点

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

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

3、连接池的分配与释放

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

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

参考:https://www.cnblogs.com/whb11/p/11315463.html

连接池,数据库连接池相关推荐

  1. mysql连接池_基于Swoole的通用连接池 - 数据库连接池(life)

    open-smf/connection-pool 是一个基于Swoole的通用连接池,常被用作数据库连接池. 依赖 依赖版本PHP>=7.0.0Swoole>=4.2.9Recommend ...

  2. java连接mysql数据库连接池_java使用原生MySQL实现数据的增删改查以及数据库连接池技术...

    一.工具类及配置文件准备工作 1.1 引入jar包 使用原生MySQL,只需要用到MySQL连接的jar包,maven引用方式如下: mysql mysql-connector-java 5.1.48 ...

  3. libzdb 连接mysql,数据库连接池库libzdb使用教程

    Libzdb挺强大, 支持Mysql Oracle SQLite PostgreSQL,支持C和C++ Object C,不能在Window下用(看源码是因为基于Linux线程机制编写实现). 遗憾的 ...

  4. swoole mysql 连接池_基于Swoole的通用连接池 - 数据库连接池

    连接池 open-smf/connection-pool 是一个基于Swoole的通用连接池,常被用作数据库连接池. 依赖 依赖 版本 >=7.0.0 >=4.2.9 Recommend ...

  5. oracle中多个数据库连接池,数据库连接池为什么要建立多个连接

    一般程序在访问数据库的时候,都是使用数据库连接池,比如:DBCP,C3P0等等.至于为什么使用连接池,大家都知道,就是为了避免频繁的与数据库建立连接, 因为建立连接是一个比较耗时的操作.而连接池的配置 ...

  6. java配置dbcp连接池(数据库连接池)示例

    最近一个项目遇到了一个问题,tomcat跑一段时间后,项目就会造成类似死锁状态,所有的servlet都无法访问,造成网络堵塞的现象.我项目中使用的连接池是c3p0,网上有人说是c3p0的bug,不知是 ...

  7. mybatis连接mysql数据库连接池_对于数据库连接池的一些思考和MyBatis的集成与使用...

    Java应用要连接数据库需要先通过jdbc与数据库之间产生connection,然后通过sql语句产生statment,再执行这个statment查询的到ResultSet返回给应用,应用解析Resu ...

  8. 数据库连接池原理及常用连接池介绍

    一.背景介绍 1.1 什么是连接池 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个. 1.2 为什么要使用连接池 数据库连接是一种关键的有 ...

  9. jsp获取连接池的实时连接数_数据库连接池原理分析及模拟实现

    数据库访问 访问数据库主要有以下几个步骤: 加载数据库驱动 创建数据库连接 执行访问操作并处理执行结果 关闭连接,释放资源 在每一次请求数据库都要经历上述过程,创建连接和释放资源也都是些重复性的动作, ...

  10. 数据库连接池 ( 二 ) 连接池概念

    2.连接池概念 2.1.普通模式开发,存在的问题: (1)普通的JDBC数据库连接使用 DriverManager 来获取,每次向数据库建立连接的时候都要将 Connection 加载到内存中,再验证 ...

最新文章

  1. linux grep find查找文件夹、代码中的某行/字符串
  2. 分块试水--CODEVS5037 线段树练习4加强版
  3. php-5.6.26源代码 - opcode执行
  4. 深度好文:Linux操作系统内存
  5. 企业级应用框架(五)IOC容器在框架中的应用
  6. 砂 即懒且忙 只有随笔
  7. 商城报表系统html5,关于html5:推荐这几款主流报表产品
  8. 韩国冬奥:未来科技奥运我要长这样,阿里巴巴:你尽管想
  9. 【前端】数组元素过滤
  10. Linux文件类型与文件权限详解(二)
  11. 【LeetCode】整数反转【不能借助辅助空间,需要处理溢出】
  12. id长度 雪花算法_GitHub - cloudyan/snowflake: Twitter的雪花算法(snowflake)分布式自增ID...
  13. 2020计算机软考初级都考什么,软考都考什么内容
  14. MT【30】椭圆的第二定义解题
  15. 爬虫实例:唐诗宋词爬虫
  16. linux变量符号生效规则,shell的变量功能
  17. 将火狐浏览器默认搜索引擎设置为“百度”
  18. 七大最具影响力的大数据应用案例
  19. 传奇自定义技能栏技术分享-GEE
  20. 12-Go语言接口interface

热门文章

  1. 又拍网架构中的分库设计
  2. 数据结构的简单理解(2)
  3. 2021牛客多校6 - Defend Your Country(点双缩点求割点)
  4. CodeForces - 1417E XOR Inverse(字典树求逆序对+分治)
  5. 中石油训练赛 - Trading Cards(最大权闭合子图)
  6. POJ - 2299 Ultra-QuickSort(线段树+离散化/归并排序)
  7. iphone双卡_放心了:IT之家实测,苹果iPhone 12支持双卡5G
  8. 数据分析与挖掘理论-数据探索
  9. Mysql当前模式让不记录日志_MySQL日志binlog的三种模式
  10. 二叉树的创建和遍历-C语言实现