英文原文: 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
分享到:
相关推荐
4. **强化协作平台**:通过与SharePoint的集成,Project 2013为项目团队提供了一个集讨论、公告发布于一体的协作空间。这不仅促进了团队成员间的沟通,也有助于项目的顺利推进。 三、选择合适的授权选项 在决定...
Why Upgrade to Project2013.pptx
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...
以及为什么它有效》 这本书由斯蒂芬·沃尔夫勒姆(Stephen Wolfram)撰写,探讨了ChatGPT的工作原理及其为何能成功运作。沃尔夫勒姆是计算科学领域的权威,他的公司Wolfram Media出版了这本书。书中深入浅出地解释...
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...
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 ...
这篇文档实际上是一个小学四年级英语教学教案,主题是"为什么你喜欢澳大利亚",主要涉及外研社出版的新标准英语教材。以下是对教案中涉及的教育内容和策略的详细说明: 一、教学内容: 本课的核心是教授学生如何...
5 Why 分析法的基本流程是从一个问题出发,连续问五个“为什么”,直至找到问题的根本原因。例如: - 问题:设备故障。 - 为什么1:设备突然停止运行? - 为什么2:设备传感器检测到异常? - 为什么3:传感器受到...
为什么会需要索引?索引是什么?索引怎么用的? 再思考为什么需要B+树?B+树是什么?B+树怎么用? 答:大部分程序主要的功能都是对数据的处理,写入、查询、转化、输出。最形象的比喻就是树和内容和目录的关系,目录...
稀缺:为什么拥有太少后果会很严重?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 ...
书中还提到了将Wolfram|Alpha与ChatGPT结合的可能性,Wolfram|Alpha作为一个强大的计算知识引擎,可以为ChatGPT提供事实性信息和计算能力,进一步提升其智能对话的质量和准确性。作者列举了一些基本示例,展示了这种...
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. ...
《The Book of Why 中文版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...
为什么要特征标准化_(深度学习)__Why_need_the_feature_normalization_(deep_learn
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、...
《为什么国家会失败》是Daron Acemoglu和James A. Robinson合著的一本分析政治经济问题的书籍。这本书不仅在学术界产生了广泛影响,也受到了普罗大众的推崇,特别是对那些对经济学和金融有兴趣的读者来说,是一本...
例如,询问为什么喜欢熊猫的问题是"Why do you like pandas?",回答可以是"Because they’re interesting." 这样的句子结构强调了喜欢或不喜欢的原因。同样,对于其他动物,如约翰为什么喜欢考拉,可以回答"Why does...
在众多的RSS阅读器中,为何会有一个名为“Why Another RSS Reader”(简称WARR)的开源项目呢?本文将深入探讨这个问题,同时介绍WARR的设计理念、主要功能及其背后的编程技术。 WARR,全称为"Why Another RSS ...
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 ...