zoukankan      html  css  js  c++  java
  • 数据库连接池原理

    在不使用数据库连接池的情况下,我们做操作都是直接操作数据库的。每进行一次操作就会创建一个jdbc连接,如果并发量大的时候同时创建几百或者几千个jdbc连接可能会导致服务器宕机。这个时候我们就需要引入连接池来进行处理。

    基本原理

    在内部对象池中,维护一定数量的数据库连接,并对外暴露数据库连接的获取和返回方法。

    如外部使用者可通过getConnection方法获取数据库连接,使用完毕后再通过releaseConnection方法将连接返回,注意此时的连接并没有关闭,而是由连接池管理器回收,并为下一次使用做好准备。可以实现复用的效果。

    数据库连接池的参数:

    空闲线程数:初始化线程,还没有被使用。

    活动线程数:正在使用的线程数量。

    最大线程数:最多可以创建的线程数量。

    数据库连接池中如果连接(JDBC)使用完毕之后,它是如何关闭的?

    连接使用完毕之后,会将连接放入到空闲连接。空闲连接+1,活动线程-1。

    线程池作用

    ①资源重用

    由于数据库连接得到重用,避免了频繁创建、释放连接引起的大量性能开销。在减少系统消耗的基础上,增进了系统环境的平稳性(减少内存碎片以级数据库临时进程、线程的数量)

    ②更快的系统响应速度

    数据库连接池在初始化过程中,往往已经创建了若干数据库连接置于线程池内备用。此时连接池的初始化操作均已完成。对于业务请求处理而言,可以直接使用现有的可用连接,避免了数据库连接初始化和释放过程的时间开销,从而缩减了系统整体响应时间。

    ③新的资源分配手段

    对于多应用共享同一数据库的系统而言,可在应用层通过数据库连接的配置,实现数据库连接技术。

    ④统一的连接管理,避免数据库连接泄露

     在数据库连接池实现中,可根据预先的连接占用超时设定,强制收回被占用的连接,从而避免了常规数据库连接操作中可能出现的资源泄露。

    常用数据库连接池

    C3P0

    C3P0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。

    BoneCP

    BoneCP 是一个开源的快速的 JDBC 连接池。BoneCP很小,只有四十几K(运行时需要log4j和Google Collections的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。另外个人觉得 BoneCP 有个缺点是,JDBC驱动的加载是在连接池之外的,这样在一些应用服务器的配置上就不够灵活。当然,体积小并不是 BoneCP 优秀的原因,BoneCP 到底有什么突出的地方呢,请看看性能测试报告。池,Tomcat的数据源使用的就是DBCP。目前 DBCP 有两个版本分别是 1.3 和 1.4。1.3 版

    DBCP

    DBCP (Database Connection Pool)是一个依赖Jakarta commons-pool对象池机制的数据库连接本对应的是 JDK 1.4-1.5 和 JDBC 3,而1.4 版本对应 JDK 1.6 和 JDBC 4。因此在选择版本的时候要看看你用的是什么 JDK 版本了,功能上倒是没有什么区别。

    Proxool

    Proxool是一个Java SQL Driver驱动程序,提供了对你选择的其它类型的驱动程序的连接池封装。可以非常简单的移植到现存的代码中。完全可配置。快速,成熟,健壮。可以透明地为你现存的JDBC驱动程序增加连接池功能

    DBCP与C3P0区别

    dbcp没有自动的去回收空闲连接的功能  c3p0有自动回收空闲连接功能  两者主要是对数据连接的处理方式不同!C3P0提供最大空闲时间,DBCP提供最大连接数。 前者当连接超过最大空闲连接时间时,当前连接就会被断掉。DBCP当连接数超过最大连接数时,所有连接都会被断开。

     

  • 相关阅读:
    更新部分字段 NHibernate
    无法显示 XML 页。 使用 XSL 样式表无法查看 XML 输入。请更正错误然后单击 刷新按钮,或以后重试的解决办法
    初识使用Apache MINA 开发高性能网络应用程序
    生产者消费者问题理解与Java实现
    国内HTML5前段开发框架汇总
    mongodb的sharding架构搭建
    spring配置声明式事务
    如何设计页面固定广告的效果
    结合实际问题浅谈如何使用蒙特卡罗算法模拟投资分析
    多线程实现资源共享的问题学习与总结
  • 原文地址:https://www.cnblogs.com/ming-blogs/p/10878529.html
Copyright © 2011-2022 走看看