`
duzc2
  • 浏览: 59601 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

[翻译]Why another connection pool project?为什么还需要另外的连接池项目?

阅读更多

英文原文: http://www.tomcatexpert.com/blog/2010/03/12/explaining-jdbc-pool-high-concurrency-alternative-connection-pooling-module

原文发表于2010年3月12日

 

      这篇文章我们将解释Tomcat开发版本中的一个组件。这个组件的名字就是jdbc-pool,准确地说,他是JDBC 资源池的一种实现。

      连接池已经存在很久了。1997年我刚刚接触java的时候就自己写了一个连接池,并且应用到了我参与的不同项目中。当JDBC出现以后,开发者很快意识到,连接池会对性能非常有益,并且是一条复用连接、管理管理数据库连接资源的途径。在数据库负载严重的水平扩展情况下这种方法非常重要。那时我们用来运行应用服务器的典型机器是1、2某些时候是4核CPU。

      连接池技术很快被某些J2EE厂家集成到自己开发的事务服务中,甚至成为私有的并集成到服务上。除J2EE以外,大量的开源项目开始流行。例如Proxool,Apache Commons DBCP,C3P0和Poolman。这些是我们在这个领域中见到最多的。Apache Tomcat 多年以来一直以来DBCP为其用户提供连接池实现。

      所有的开源项目都有优点和缺点,但也都有普通的一面。他们变得落伍,并且在这些基本的代码没能继续适应新的java语言特性,甚至没有对正在普及的多核java应用开发平台进行优化。还有一些项目因为不必要的复杂的代码结构饱受批评,主要原因是这些项目的代码没有与时俱进,变得晦涩难懂、难以维护。

      在我们上面提到的开源项目中,可以看到现在跟Apache Tomcat同时部署的有Commons DBCP和C3P0。这里简短描述一下这两个项目:

      Commons DBCP

  • 与Tomcat一同发布,可以直接使用
  • 非常稳定的代码基础
  • 很长时间内存在存在令人厌恶的死锁问题
  • 拥有低频率、多并行的用户往往抱怨其吞吐量瓶颈

      C3P0

  • 经常用来被替代DBCP
  • 基于我们在这个领域的经验,其仍然有很多bug
  • 声望要好于DBCP,虽然我们的测试结果不同

     这两种实现都非常复杂。DBCP建立在Apache Commons Pool项目上,并且一共有60多个源文件。C3P0增长到200多源文件。而且两种连接池都输在缺少特性上,例如:

  • 连接池一般严格绑定在一个Java版本上。意味着如果这个连接池为java5所写,那么他不会兼容java6的java.sql和javax.sql接口
  • 连接池被限制在java.sql.Driver接口,所以不能提供继承javax.sql.DataSource的资源
  • 不支持XA数据资源
  • 没有可插拔的扩展特性

回到我们的问题,为什么需要另外一个连接池项目?答案很简单,我们需要更好的性能和更多的特性。我们也相信让一个传统项目达到这样的要求需要重新大量的基础代码。所以,我们果断的质疑,我们确实需要重写60多个源文件,甚至是200+吗?

      我知道你也许在想,还有其他工程师相信,重写那些让人抓狂的代码比捐献这些现存的代码更好。大多数情况下,我更喜欢重用和修复,而不是重写。即便如此,请先考虑如下问题:

  • 实现一个完全相同功能的DBCP,我们到底需要多少行代码?
  • 我们能否提供灵活的实现,提供所有的驱动程序实现的java.sql.Connection接口?(**杜天微注:例如连接池在JDK 1.5环境下编写,不能提供JDK1.6中新增加的方法实现。如果应用程序在java6环境开发,并且驱动程序支持java6的JDBC接口,如果连接池只支持java5接口,那么新的接口仍不能被使用。)
  • 我们能否提供一个框架来暴露附加的特性?
  • 我们能否让实现在多核环境下提高性能?

      我们将要面对的下一个挑战是这样一个项目,在Apache软件基金会里,怎样建立一个围绕项目的社区。社区往往伴随着大量未完成的代码成长,这意味着,为了让一组人员一起工作,还有很多工作不同领域的工作要做。

      现在,我们有了一个标准,8个源文件,请且提供所有其他连接池特性。并不是令所有java开发者都兴奋。从社区的观点看,启动一个独立的项目也许并不那么有效。我们因此把它增加到24个源文件,基本上都是建立一些预置的可配置的附加组件。

      所以jdbc-pool组件启动。

      jdbc-pool借鉴了之前的实现,并且bug数量很低。很多早期的bug是明显的围绕java.sql接口的,例如多次调用一个连接的close方法等。

      今天我们再看jdbc-pool,甚至是未释放状态,仍有一些产品在使用。SpringSource ships the pool module with its tc Server product ,并且你已经可以从博客中看到一些关于它的信息。

      jdbc-pool拥有与DBCP几乎完全相同的配置(**杜天微注:这个页面正式发布在Tomcat7的文档页中),以便提供一个简单的迁移补丁。对于已经使用Tomcat和DBCP的用户,唯一的不同只是工厂属性  factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"。

      对于依赖注入框架的用户,例如Spring Framework,只要很简单的配置 org.apache.tomcat.jdbc.pool.DataSource的bean。

      平民化,这就是为什么我们需要另外一个JDBC连接池组件。在后面的几篇文章中,我将深入挖掘:

  • jdbc-pool的性能
  • 何时、怎样使用特性集合
  • 实现和为什么会有提升
  • 怎样建立扩展

 

 

作者简介:


Filip Hanik是来自VMware公司的SpringSource部分的高级软件工程师、Tomcat的积极倡导和参与者。**杜天微注:后面不翻译了,有兴趣的同学自己看看

 

  • 大小: 2.7 KB
0
0
分享到:
评论

相关推荐

    why upgrade to project2013

    why upgrade to project2013

    软件项目管理分享

    2、 Why:为什么——产生项目目标的原因是什么?项目范围为什么要这么定?为什么 有这样的质量要求? 3、 Who:谁——项目干系人,谁是执行者,谁是推动者,谁是配合者,谁是阻碍者等 等,以及每个人的性格、背景、...

    unity3d PoolManager 4.1 游戏性能优化插件 最新版

    PoolManager manages instances more efficiently to increase performance, organize the scene hierachy and is simple to implement. When an instance is needed over and over why destroy it? Re-use it! Pool...

    Absolute Beginner's Guide to Project Management (2nd Edition)

    Why learn project management the hard way? Absolute Beginner’s Guide to Project Management, Second Edition will have you managing projects in no time! Here’s a small sample of what you’ll learn...

    PoolManager 4.1 游戏性能优化插件(最新完整版)

    PoolManager manages instances more efficiently to increase performance, organize the scene hierachy and is simple to implement. When an instance is needed over and over why destroy it? Re-use it! Pool...

    5WHY培训资料.pptx.pptx

    多问几个"为什么" 5 WHY 5WHY培训资料全文共46页,当前为第1页。 目录 引 1 5WHY准备工作 2 5WHY步骤 3 5WHY演示 4 5WHY留意点 5 5WHY培训资料全文共46页,当前为第2页。 准确的认识问题,是问题解决的前提. 我们失败...

    PoolManager 5.5.2 游戏性能优化插件(最新完整版)

    When an instance is needed over and over why destroy it? Re-use it! PoolManager has many additional features, such as preloading instances so they aren't instantiated during game play and shuriken ...

    What Is ChatGPT Doing ... and Why Does It Work(2023)

    但是它真正的工作原理是什么?其“AI大脑”内部发生了什么?在这本短篇书籍中,杰出科学家和计算先驱斯蒂芬·沃尔夫勒姆提供了一个易于阅读和引人入胜的解释,借鉴了他数十年来在科学和技术前沿所积累的独特经验。

    linux指导书

    实验一 Linux操作系统操作[操作要求3]向f1文件增加以下内容:Why not have a try? [操作步骤] (1)输入命令“cat>>f1”,屏幕上输入点光标闪烁。 (2)输入上述内容后,按Enter键,让光标处于输入内容的下一行,按Ctrl+...

    MySQL高频面试题和答案

    为什么会需要索引?索引是什么?索引怎么用的? 再思考为什么需要B+树?B+树是什么?B+树怎么用? 答:大部分程序主要的功能都是对数据的处理,写入、查询、转化、输出。最形象的比喻就是树和内容和目录的关系,目录...

    Scarcity: Why Having Too Little Means So Much

    稀缺:为什么拥有太少后果会很严重?Why do successful people get things done at the last minute? Why does poverty persist? Why do organizations get stuck firefighting? Why do the lonely find it hard to ...

    School psychology-why is the profession dying?

    School psychology-why is the profession dying? 518 Psychology in the Schools, October, 1978, Vol. 16, No. 4. GLASS, G. V. Educational knowledge use. Educational Forum, 1971, 36, 21-29. GOWIN, D. ...

    为什么要特征标准化 (深度学习)? Why need the feature normalization (deep learning)?

    为什么要特征标准化_(深度学习)__Why_need_the_feature_normalization_(deep_learn

    java面试宝典

    196、Can a database connection pool be instantiated in init method of servlet instead of server connection pool? What will be the problem? 46 综合部分 46 197、Class.forName的作用?为什么要用? 47 198、...

    千方百计笔试题大全

    196、Can a database connection pool be instantiated in init method of servlet instead of server connection pool? What will be the problem? 46 综合部分 46 197、Class.forName的作用?为什么要用? 47 198、...

    software.project.secrets.why.software.projects.fail

    software.project.secrets.why.software.projects.fail

    a project model for the FreeBSD Project.7z

    A project model for the FreeBSD Project Niklas Saers Copyright © 2002-2005 Niklas Saers [ Split HTML / Single HTML ] Table of Contents Foreword 1 Overview 2 Definitions 2.1. Activity 2.2. Process ...

    Node.js-why-is-node-running-Node.js的运行但你不知道为什么吗?

    why-is-node-running - Node.js的运行,但你不知道为什么吗?

    【内控访谈重要工具】5W2H分析法

    1) WHY——为什么?为什么要这么做?理由何在?原因是什么? (2) WHAT——是什么?目的是什么?做什么工作? (3) WHERE——何处?在哪里做?从哪里入手? (4) WHEN——何时?什么时间完成?什么时机最适宜? ...

    why-is-node-running:节点正在运行,但您不知道为什么? 为什么节点运行在这里可以为您提供帮助

    为什么节点正在运行 节点正在运行,但您不知道为什么? why-is-node-running在这里可以为您提供帮助。 安装 节点8及以上: npm i why-is-node-running -g 较早的节点版本(不再受支持): npm i why-is-node-...

Global site tag (gtag.js) - Google Analytics