`

数据连接池分析(一)

阅读更多

最近用到一个数据库连接池,由于要分析其各种性能指标,所以对数据库连接池技术做了一个简单的分析。从网上找到一个关于连接池设计的文章,写的不错。我认为:如果要设计一个数据库连接池,可以参考它的基本思路;如果要提高性能,还有很多细节要仔细研究,并做细致的分析对比。以下是转载的文章。

连接池原理

连接池技术的核心思想是:连接复用,通过建立一个数据库连接池以及一套连接使用、分配、治理策略,使得该连接池中的连接可以得到高效、安全的复用,避免了数据库连接频繁建立、关闭的开销。另外,由于对JDBC中的原始连接进行了封装,从而方便了数据库应用对于连接的使用(非凡是对于事务处理),提高了开发效率,也正是因为这个封装层的存在,隔离了应用的本身的处理逻辑和具体数据库访问逻辑,使应用本身的复用成为可能。连接池主要由三部分组成:连接池的建立、连接池中连接的使用治理、连接池的关闭。下面就着重讨论这三部分及连接池的配置问题。

1.1 连接池的建立

应用程序中建立的连接池其实是一个静态的。所谓静态连接池是指连接池中的连接在系统初始化时就已分配好,且不能随意关闭连接。Java中提供了很多容器类可以方便的构建连接池,如:Vector、Stack、Servlet、Bean等,通过读取连接属性文件Connections.properties与数据库实例建立连接。在系统初始化时,根据相应的配置创建连接并放置在连接池中,以便需要使用时能从连接池中获取,这样就可以避免连接随意的建立、关闭造成的开销。

1.2 连接池的治理

连接池治理策略是连接池机制的核心。当连接池建立后,如何对连接池中的连接进行治理,解决好连接池内连接的分配和释放,对系统的性能有很大的影响。连接的合理分配、释放可提高连接的复用,降低了系统建立新连接的开销,同时也加速了用户的访问速度。下面介绍连接池中连接的分配、释放策略。

连接池的分配、释放策略对于有效复用连接非常重要,我们采用的方法是一个很有名的设计模式:Reference Counting(引用记数)。该模式在复用资源方面应用的非常广泛,把该方法运用到对于连接的分配释放上,为每一个数据库连接,保留一个引用记数,用来记录该连接的使用者的个数。具体的实现方法是:

当客户请求数据库连接时,首先查看连接池中是否有空闲连接(指当前没有分配出去的连接)。假如存在空闲连接,则把连接分配给客户并作相应处理(即标记该连接为正在使用,引用计数加1)。假如没有空闲连接,则查看当前所开的连接数是不是已经达到maxConn(最大连接数),假如没达到就重新创建一个连接给请求的客户;假如达到就按设定的maxWaitTime(最大等待时间)进行等待,假如等待maxWaitTime后仍没有空闲连接,就抛出无空闲连接的异常给用户。

当客户释放数据库连接时,先判定该连接的引用次数是否超过了规定值,假如超过就删除该连接,并判定当前连接池内总的连接数是否小于minConn(最小连接数),若小于就将连接池布满;假如没超过就将该连接标记为开放状态,可供再次复用。可以看出正是这套策略保证了数据库连接的有效复用,避免频繁地建立、释放连接所带来的系统资源开销。

1.3 连接池的关闭

当应用程序退出时,应关闭连接池,此时应把在连接池建立时向数据库申请的连接对象统一归还给数据库(即关闭所有数据库连接),这与连接池的建立正好是一个相反过程。

1.4 连接池的配置

数据库连接池中到底要放置多少个连接,才能使系统的性能更佳,用minConn和maxConn来限制。minConn是当应用启动的时候连接池所创建的连接数,假如过大启动将变慢,但是启动后响应更快;假如过小启动加快,但是最初使用的用户将因为连接池中没有足够的连接不可避免的延缓了执行速度。因此应该在开发的过程中设定较小minConn,而在实际应用的中设定较大minConn。maxConn是连接池中的最大连接数,可以通过反复试验来确定此饱和点。为此在连接池类ConnectionPool中加入两个方法getActiveSize()和getOpenSize(),ActiveSize 表示某一时间有多少连接正被使用,OpenSize表示连接池中有多少连接被打开,反映了连接池使用的峰值。将这两个值在日志信息中反应出来, minConn的值应该小于平均ActiveSize,而maxConn的值应该在activeSize和OpenSize之间

分享到:
评论

相关推荐

    基于JAVA JSP数据库连接池的研究与实现的毕业设计,使用数据库连接池方式能对数据库的连接进行管理和维护,上层应用程序通过数据

    文章通过介绍、分析数据库连接池工作的基本原理,了解目前流行的WEB服务器在数据库连接池方面的使用现状后,总结了一些数据库连接池开发程序中容易忽略的问题。并在学习掌握了实现连接池的关键技术后给出了一个较为...

    Jndi数据连接池Jndi 数据连 接池

    数据挖掘技术因“数据爆炸但知识贫乏”而应运而生,并因...本课题就是以此作为指导思想,对选课系统中的数据进行采集与分析,提出了结合数据挖掘和C/S+B/S架构技术的设计思路,开发出适合学分制和决策分析的选课系统。

    druid连接池的jar包

    Druid在数据摄入之前,首先要定义一个数据源(DataSource,类似于数据库中表的概念),Druid是一个分布式数据分析平台,也是一个时序数据库,也是一个集群系统,使用zookeeper做节点管理和事件监控。 Druid是一个专为...

    python数据分析随书代码

    非常适合想要深入学习并使用Python进行数据分析的读者,无论是新手还是有一定Python使用基础的读者,都将快速成为一名数据分析专家。 作者简介 Ivan Idris,实验物理学硕士,学位论文侧重于应用计算机科学。毕业后...

    Druid(德鲁伊)数据库连接池-1.2.9jar包

    Apache Druid是一个实时分析数据库,旨在对大型数据集进行快速切片和分析(“OLAP”查询)。Druid最常用作支持实时接收、快速查询性能和高正常运行时间的用例的数据库。

    一个c++数据库连接池,将c++下的mysql查询变得易用的项目.zip

    软件开发设计:应用软件开发、系统...云计算与大数据:包括云计算平台、大数据分析、人工智能、机器学习等,云计算是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需提供给计算机和其他设备

    基于JavaWeb数据分析的关键词分析系统源码+项目使用说明.zip

    3) servlet、c3p0连接池、MySQL数据库的应用 4) TextRank4Keyword 自然语言处理关键词提取 5) ThreadPool 线程池 6) jsonp 爬虫 7) Mail IMAP协议 8)pdfbox PDF2String 9)poi 生成...

    【spring-boot-seckill分布式秒杀系统 v1.0】从0到1构建的java秒杀系统源码+安装说明

    spring-boot-seckill分布式秒杀系统是一个用SpringBoot开发的从0到1构建的分布式秒杀系统,项目案例基本成型,逐步完善中。...3、应用服务优化:Nginx最佳配置、Tomcat连接池优化、数据库配置优化、数据库连接池优化。

    使用JDBC连接,DBCP连接池实现的基础记账功能小程序。增删改查的练手实践项目。.zip

    其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始...

    基于spark的电商用户行为分析系统源码+项目说明.zip

    pool:MySQL连接池,通过自定义MySQL连接池,实现对MySQL数据库 的操作 utils:工具类,提供了日期时间工具类、数字格式工具类、参数工具类、字符串工具类、校验工具类等工具类, 里面的类有: DateUtils:时间工具类...

    SpringBoot整合Druid应用的方法详解.docx

    Druid是目前Java语言中最好的数据库连接池之一。结合了 C3P0、DBCP 等 DB 池的优点,同时加入了日志监控。Druid 是一个分布式的、支持实时多维 OLAP 分析的数据处理系统。它既支持高速的数据实时摄入处理,也支持...

    Druid数据库连接示范.rar

    Druid是阿里巴巴的一个开源项目,作为一个优秀的数据库连接池,Druid提供了优秀的稳定性,并且在性能方面比其他数据库连接池提高了很多,最重要的是Druid提供了实时监控的功能,如数据源监控、SQL监控、SQL防火墙...

    Java数据编程指南

    数据库性能问题 本地编译机制 挑选适当的JDBC驱动程序 连接池 事务和批量查询 存储过程和JDBC准备语句 JDBC准备语句 在程序块上检索大数据集合 高速缓存频繁使用的数据 性能监控 小结...

    Python基于多线程操作数据库相关问题分析

    解决方法:使用数据库连接池,并且每次操作都从数据库连接池获取数据库操作句柄,操作完关闭连接返回数据库连接池。 *连接数据库需要设置charset = 'utf8', use_unicode = True,不然会报中文乱码问题 *网上说解决...

    Pentaho_bi_server配置手册

    1.5使用rex连接pentaho服务器即可 8 1.6 在Pentaho中对FoodMart进行分析 9 3 pentaho 配置 10 3.1 配置XMLA服务 10 3.2 配置pentaho publisher服务 10 4 在oracle中创建Mondrian的FoodMart数据库 11 4.1准备oracle...

    JDBC 3.0数据库开发与设计

    4.7.1 连接池数据源(Connection PoolDataSource) 4.7.2 连接池处理事件 4.7.3 三层环境下的连接池操作 4.7.4 连接池和DataSource实现 4.7.5 包含连接池的数据源配置 4.7.6 池连接对象对于语句的重新利用 ...

    Python实现连接postgresql数据库的方法分析

    主要介绍了Python实现连接postgresql数据库的方法,结合实例形式分析了Python基于psycopg2和python3-postgresql链接postgresql数据库的相关操作技巧,需要的朋友可以参考下

    WEB数据库中几种数据库连接方法比较

    随着数据库技术在Interne t中的广泛应用, 数据库技术已经成为网络的核心技术. 网站和数据库的连 接方法有很多种, 本文介绍了利用OLE DB、ODBC连接W eb数据源的两...的优缺点, 最后介绍了用连接池技术来优化访问数据库.

    m-fa8164.iso

    您可以轻松地将模块与数据连接起来,然后用众多的参数进行控制,从而建立一个可视化的处理网络。 这个网络的输出可以在3D查看器中显示。 有了Avizo 8 ISO,您可以处理复杂的数据,并轻松分析它们。 Avizo本质上是...

    新闻博客系统毕业论文

    2.3 数据库连接池技术 6 2.4 MySQL简介 7 第3章 系统的分析与设计 10 3.1 系统的实现目标 10 3.2 系统分析 10 3.3 总的系统数据流分析 12 3.3.1 本人负责的新闻发布数据流图分析 13 3.3.2 本人负责的个人博客数据流...

Global site tag (gtag.js) - Google Analytics