`
wenshao
  • 浏览: 271444 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

阿里巴巴开源平台新增项目Druid

阅读更多
阿里巴巴开源平台新增项目Druid
http://code.alibabatech.com/wiki/display/Druid/Home

Druid是什么?

Druid是一个JDBC组件,它包括三部分:

DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系。
DruidDataSource 高效可管理的数据库连接池。
SQLParser

Druid可以做什么?

1) 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。
2) 替换DBCP和C3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。
3) 数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。
4) SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-Logging、Log4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。
扩展JDBC,如果你要对JDBC层有编程的需求,可以通过Druid提供的Filter-Chain机制,很方便编写JDBC层的扩展插件。

如何获得Druid?
目前Druid是一个开源项目,基于Apache License 2.0,将于2011年5月20日之前发布第一个版本0.1。在正式版本发布之前,你可以直接访问svn获得源码。
http://code.alibabatech.com/svn/druid/trunk/

如下是一个基于Druid内置扩展StatFilter的监控实现:


  • 大小: 142.1 KB
分享到:
评论
68 楼 loowii 2016-08-24  
为什么“http://code.alibabatech.com”这个地址不能访问了?是换网址了吗?
67 楼 a957421354 2016-07-05  
druid 客服端隔段时间不连接  会出现skip not validate connection. 怎呢回事哦
66 楼 superchinaren 2013-01-19  
sdh5724 写道
温少, 你能不丢人么,给我回去好好读读代码规范。 气死我了。 你至少触犯了5条军规。受不了了。 我让你维护格式化规范, 结果自己不用。
  
   其实这个项目的目的不是为了实现起来有多少好的性能, 而是为了扩展jdbc一些限制。可以让程序员实现一些特殊的需求, 比如向密钥服务请求凭证,统计sql信息, sql性能收集,sql注入检查,sql翻译, 程序员可以通过定制来现在自己需求的功能。 我们仅仅制定了性能损失在1-2%之内的目标。

   整个项目包括三个组成部分: 插件框架, 链接池, SQL解析器。  当然, 我们希望每个单一部分能实现较好的性能,因为我们是一个组合场景, 所以一定会有一些损失。
  这个项目不是为了取代某些开源的东西, 我们的目的是为了一个有自由度的框框, 以满足我们在实现项目过程中的特殊需求。
  我觉得是个挺有趣的东西, 所以开源出来。






这哥们儿有才还是有理怎么着。。说话怎么冲。。。
65 楼 yunnysunny 2012-08-20  
yoohoo.lai 写道
sdh5724 写道
温少, 你能不丢人么,给我回去好好读读代码规范。 气死我了。 你至少触犯了5条军规。受不了了。 我让你维护格式化规范, 结果自己不用。
  
   其实这个项目的目的不是为了实现起来有多少好的性能, 而是为了扩展jdbc一些限制。可以让程序员实现一些特殊的需求, 比如向密钥服务请求凭证,统计sql信息, sql性能收集,sql注入检查,sql翻译, 程序员可以通过定制来现在自己需求的功能。 我们仅仅制定了性能损失在1-2%之内的目标。

   整个项目包括三个组成部分: 插件框架, 链接池, SQL解析器。  当然, 我们希望每个单一部分能实现较好的性能,因为我们是一个组合场景, 所以一定会有一些损失。
  这个项目不是为了取代某些开源的东西, 我们的目的是为了一个有自由度的框框, 以满足我们在实现项目过程中的特殊需求。
  我觉得是个挺有趣的东西, 所以开源出来。
------------------------------------------------------------------------------------------
sdh5724说的太好了,一个东西的定位不一样,关系到项目的可持续性发展。一个项目不可能做成一个大而全的东西,做一个框架,写一些基本功能即可。定义好良好的接口,让开发者自行实现这些接口,取其所需,才是正道。


阿里内部的规范对于我们开发者来说不重要,我们连规范是什么东不知道。我们需要的是文档,比如说javadoc文档,how to文档,部署文档之类的东西,希望领导不要本末倒置了,这现在已经是一个开源项目了,不是内部项目。消火先。
64 楼 zhangyou1010 2011-05-23  
beneo 写道
既然是自己的项目,为什么不用中文的???难道觉得自己的英文很local??

用英文的话,utf-8工程或gbk工程都可以引用,不会又乱码问题。
63 楼 yoohoo.lai 2011-05-19  
sdh5724 写道
温少, 你能不丢人么,给我回去好好读读代码规范。 气死我了。 你至少触犯了5条军规。受不了了。 我让你维护格式化规范, 结果自己不用。
  
   其实这个项目的目的不是为了实现起来有多少好的性能, 而是为了扩展jdbc一些限制。可以让程序员实现一些特殊的需求, 比如向密钥服务请求凭证,统计sql信息, sql性能收集,sql注入检查,sql翻译, 程序员可以通过定制来现在自己需求的功能。 我们仅仅制定了性能损失在1-2%之内的目标。

   整个项目包括三个组成部分: 插件框架, 链接池, SQL解析器。  当然, 我们希望每个单一部分能实现较好的性能,因为我们是一个组合场景, 所以一定会有一些损失。
  这个项目不是为了取代某些开源的东西, 我们的目的是为了一个有自由度的框框, 以满足我们在实现项目过程中的特殊需求。
  我觉得是个挺有趣的东西, 所以开源出来。
------------------------------------------------------------------------------------------
sdh5724说的太好了,一个东西的定位不一样,关系到项目的可持续性发展。一个项目不可能做成一个大而全的东西,做一个框架,写一些基本功能即可。定义好良好的接口,让开发者自行实现这些接口,取其所需,才是正道。
62 楼 abin7230 2011-05-18  
你这项目去年就在开源中国社区发布了吧?
61 楼 lifeier 2011-05-17  
haitaohehe 写道
sdh5724 写道
温少, 你能不丢人么,给我回去好好读读代码规范。 气死我了。 你至少触犯了5条军规。受不了了。 我让你维护格式化规范, 结果自己不用。
  
   其实这个项目的目的不是为了实现起来有多少好的性能, 而是为了扩展jdbc一些限制。可以让程序员实现一些特殊的需求, 比如向密钥服务请求凭证,统计sql信息, sql性能收集,sql注入检查,sql翻译, 程序员可以通过定制来现在自己需求的功能。 我们仅仅制定了性能损失在1-2%之内的目标。

   整个项目包括三个组成部分: 插件框架, 链接池, SQL解析器。  当然, 我们希望每个单一部分能实现较好的性能,因为我们是一个组合场景, 所以一定会有一些损失。
  这个项目不是为了取代某些开源的东西, 我们的目的是为了一个有自由度的框框, 以满足我们在实现项目过程中的特殊需求。
  我觉得是个挺有趣的东西, 所以开源出来。





============================================
校长生气了,温少要加把劲哈...

现在啊,阿里的人要向tb学习才行。
60 楼 haitaohehe 2011-05-17  
sdh5724 写道
温少, 你能不丢人么,给我回去好好读读代码规范。 气死我了。 你至少触犯了5条军规。受不了了。 我让你维护格式化规范, 结果自己不用。
  
   其实这个项目的目的不是为了实现起来有多少好的性能, 而是为了扩展jdbc一些限制。可以让程序员实现一些特殊的需求, 比如向密钥服务请求凭证,统计sql信息, sql性能收集,sql注入检查,sql翻译, 程序员可以通过定制来现在自己需求的功能。 我们仅仅制定了性能损失在1-2%之内的目标。

   整个项目包括三个组成部分: 插件框架, 链接池, SQL解析器。  当然, 我们希望每个单一部分能实现较好的性能,因为我们是一个组合场景, 所以一定会有一些损失。
  这个项目不是为了取代某些开源的东西, 我们的目的是为了一个有自由度的框框, 以满足我们在实现项目过程中的特殊需求。
  我觉得是个挺有趣的东西, 所以开源出来。





============================================
校长生气了,温少要加把劲哈...
59 楼 wenshao 2011-05-16  
这是DruidDataSource的设计图示:
http://code.alibabatech.com/svn/druid/trunk/doc/druid-pool.txt
如果发现有乱码,请选择utf-8的编码方式查看。
58 楼 wenshao 2011-05-15  
haitaohehe 写道
希望尽快整理出quick start 和相关文档,这样也方便更多的人去尝试。。。


文档已经完善了许多,内容还在补充中。

http://code.alibabatech.com/wiki/display/Druid/Documentation

文档的完善需要你的反馈!
57 楼 yhx0000 2011-05-13  
哦.就是一个数据库jdbc连接池吧?
写直接点多好,还以为你们重新写了jdbc的链接程序呢,这块技术含量高.你们可以去试试,如果仅仅是连接池,我想就算了.你们加日志什么的也就是那些写法而已,加密密码也不是什么特殊的功能呀.
56 楼 wenshao 2011-05-13  
bingoohuang 写道

我觉得不妥的就是写了不少冗余代码了,Connection、Statement、ResultSet都是实现AutoCloseable接口的,直接写一个就可以了:

public final class JdbcUtils {

    public final static void close(AutoCloseable autoCloseable ) {
        if (autoCloseable  != null) {
            try {
                autoCloseable .close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}


前提不成立,在JDK 7之前,Connection、Statement、ResultSet没有实现AutoCloseable接口,自己查代码。

java.lang.AutoCloseable是JDK 7才有的类,而JDK 7尚未发布呢!
55 楼 bingoohuang 2011-05-13  
wenshao 写道
yunchow 写道

try {
                x.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }

}



这种异常处理????


你是说JdbcUtils里面的代码吧,这个没什么不妥啊!
public final class JdbcUtils {

    public final static void close(Connection x) {
        if (x != null) {
            try {
                x.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public final static void close(Statement x) {
        if (x != null) {
            try {
                x.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public final static void close(ResultSet x) {
        if (x != null) {
            try {
                x.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

这个工具类的目的就是安全关闭Connection、Statement、ResultSet,这样处理自认为没什么不妥。

我觉得不妥的就是写了不少冗余代码了,Connection、Statement、ResultSet都是实现AutoCloseable接口的,直接写一个就可以了:

public final class JdbcUtils {

    public final static void close(AutoCloseable autoCloseable ) {
        if (autoCloseable  != null) {
            try {
                autoCloseable .close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
54 楼 jerry_kxq 2011-05-12  
最好把源码打成rar包供下载, 这样方便点
53 楼 sdh5724 2011-05-12  
温少, 你能不丢人么,给我回去好好读读代码规范。 气死我了。 你至少触犯了5条军规。受不了了。 我让你维护格式化规范, 结果自己不用。
  
   其实这个项目的目的不是为了实现起来有多少好的性能, 而是为了扩展jdbc一些限制。可以让程序员实现一些特殊的需求, 比如向密钥服务请求凭证,统计sql信息, sql性能收集,sql注入检查,sql翻译, 程序员可以通过定制来现在自己需求的功能。 我们仅仅制定了性能损失在1-2%之内的目标。

   整个项目包括三个组成部分: 插件框架, 链接池, SQL解析器。  当然, 我们希望每个单一部分能实现较好的性能,因为我们是一个组合场景, 所以一定会有一些损失。
  这个项目不是为了取代某些开源的东西, 我们的目的是为了一个有自由度的框框, 以满足我们在实现项目过程中的特殊需求。
  我觉得是个挺有趣的东西, 所以开源出来。



52 楼 wenshao 2011-05-12  
sdh5724 写道
zhizhesky 写道
Druid 不是魔兽里的德鲁伊么?


内牛满面啊, 这个名字正是想达成的目标。


Druid是sdh5724给的名字,Druid能够开源,也是sdh5724促成的。 
51 楼 agapple 2011-05-12  
wenshao 写道
agapple 写道
wenshao 写道
agapple 写道
1. 不错的idea,使用了ReentrantLock替换了dbcp中大量的synchronized。性能上理论是有一定的提升,这个不用怀疑。
2. 稳定性上有待考虑,毕竟我们关注的不仅仅是性能,稳定还是很重要。LZ可以举一下实际项目中的应用场景的一些数据,这样就最好了。比如数据库自动重连,statememt cache上(以前的dbcp跑一段时间后,cahce后的statement会出现半断开的情况)
3. 功能欠完善,大致看了下pool池的代码:http://code.alibabatech.com/svn/druid/trunk/src/main/java/com/alibaba/druid/pool/DruidDataSource.java,虽然参数上都支持了,貌似有些参数还是摆设把。比如idleTime(空闲链接管理),心跳检查
4. 希望可以弥补dbcp的一些不足,可以管理下底层socket的超时时间(connectionTimeout, soTimeout),可以控制下每次创建connection的时间,避免无限制阻塞

自己使用dbcp过程中的一些不足和意见,LZ可以考虑下。


关于数据库连接池DruidDataSource,你是个明白人,你关心的问题都是关键点。
1、性能方面,超越DBCP、C3P0是肯定的,这一点确实不用怀疑。
2、稳定性方面,我们也是很关注的,也是刚开始使用,我们也不敢一开始就应用于关键项目中,开源的目的也是希望通过社区的帮助提升项目的质量,提高稳定性。
3、DBCP的参数还是没有完全支持的,这个我正在逐步实现。
4、控制底层socket,需要直接和具体的Driver打交道,比如直接和MySqlDriver通讯,不过这个很关键,我考虑一下,应该有好办法的。

谢谢你的建议,希望进一步交流 


1. 关于第4点,我看了mysql和oracle的驱动的部分代码,是有socket参数可以支持,就是需要调整一个合理的值。网站当机一小时过程中,就因为没设置这个参数,导致自动重链基本都失败了。
2. 挺看好那个性能统计的功能,到时候查看数据会是以什么方式,内嵌启动jetty支持html页面 or 日志方式 or jmx ?


1、这个功能目前DBCP和DruidDataSource都是支持的,设置的方式在于其属性connectionProperties。
2、性能统计,目前阿里巴巴是通过其监控系统Dragoon提供Web界面查看的,Dragoon不适合于开源,因为它和公司业务结合太紧密。目前StatFilter通过JMX暴露了统计数据,直接使用jconsole也是可行的,有时间了再做一个JCONSOLE插件。


哈哈,dragoon 2.5,我懂的
50 楼 sdh5724 2011-05-12  
zhizhesky 写道
Druid 不是魔兽里的德鲁伊么?


内牛满面啊, 这个名字正是想达成的目标。
49 楼 myreligion 2011-05-12  
连接池的性能和参数相关,能用BoneCP网站的测试用例和参数对比测试下吗?

看看能不能比他们觉得快的配置还快。

相关推荐

    druid.rar阿里巴巴开源数据库连接池

    Druid为监控而生的数据库连接池,它是阿里巴巴开源平台上的一个项目。Druid是Java语言中最好的数据库连接池,Druid能够提供强大的监控和扩展功能.它可以替换DBCP和C3P0连接池。Druid提供了一个高效、功能强大、可...

    druid-0.2.19 阿里数据源

    `Druid` 是阿里巴巴开源的一款高效、强大的数据库连接池组件,全称为 Dynamic Resoult Set(动态结果集),版本号为 `0.2.19`。作为 Java 开发者,了解并掌握 Druid 数据源对于优化数据库访问性能具有重要意义。 1....

    阿里巴巴druid连接池

    阿里巴巴数据连接池druid,性能远超dpcb和c3p0,资源来自maven仓库

    阿里巴巴数据源驱动druid

    Druid作为开源项目,被广泛应用于大型互联网企业和传统企业的各种系统中,其主要特性包括性能监控、连接池管理、SQL解析以及扩展性。 1. **连接池管理**: Druid提供了一个强大的数据库连接池,它可以有效地管理和...

    阿里巴巴的开源项目JDBC连接池、监控组件 Druid.zip

    Druid是阿里巴巴的一款java开源的为监控而生的数据库连接池组件。Druid是一个JDBC组件,它包括三部分: DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系。 DruidDataSource 高效可管理的数据库...

    阿里巴巴数据库连接池druid及其源码

    Druid是阿里巴巴开源的一款高效、强大且可扩展的数据库连接池组件。作为Java世界中的优秀数据源管理工具,它不仅提供了基础的数据库连接池功能,还内置了丰富的监控和扩展特性,为开发人员带来了极大的便利。 1. **...

    阿里巴巴Web及框架简介

    7. **集成其他优秀技术**:Webx与其他阿里巴巴开源项目,如Dubbo(服务治理框架)、Druid(数据库连接池)等深度集成,提供了一站式的解决方案。 "Webx及框架简介"的PPT文件可能涵盖了框架的基本概念、安装配置、...

    阿里巴巴数据库连接池完整demo,很好的例子

    Druid作为阿里巴巴开源的一款优秀连接池,它具有以下主要特点: 1. **性能优化**:Druid通过内部的连接池算法,实现了高效的连接管理和复用,提升了数据库操作的性能。 2. **监控和扩展性**:内置的监控统计功能,...

    druid-1.2.8-API文档-中英对照版.zip

    赠送jar包:druid-1.2.8.jar; 赠送原API文档:druid-1.2.8-javadoc.jar; 赠送源代码:druid-1.2.8-sources.jar; 赠送Maven依赖信息文件:druid-1.2.8.pom; 包含翻译后的API文档:druid-1.2.8-javadoc-API文档-...

    阿里巴巴druid发展计划

    阿里巴巴druid

    druid-1.2.8-API文档-中文版.zip

    赠送jar包:druid-1.2.8.jar; 赠送原API文档:druid-1.2.8-javadoc.jar; 赠送源代码:druid-1.2.8-sources.jar; 赠送Maven依赖信息文件:druid-1.2.8.pom; 包含翻译后的API文档:druid-1.2.8-javadoc-API文档-...

    druid 阿里 开源项目

    druid 是阿里 的一个开源项目 可详细监视 系统性能

    druid-1.0.2阿里巴巴最新版本

    druid-1.0.2阿里巴巴最新版本

    阿里巴巴的10款开源项目.docx

    阿里巴巴的10款开源项目 阿里巴巴的10款开源项目涵盖了多个领域,包括框架、服务框架、JavaScript 框架、AOP 框架、数据访问框架、Web 框架、MVC 框架、Canvas 图形框架、NodeJs 框架、数据库连接池、JSON 解析器、...

    基于Java开发的阿里巴巴数据库事业部druid连接池设计源码

    该开源项目为阿里巴巴数据库事业部精心打造的druid连接池设计源码,包含4689个文件,涵盖4069个Java源文件、297个SQL脚本、102个文本文件以及其他多种文件类型。druid连接池以其独特的监控功能,旨在为数据库连接...

    阿里巴巴的10款开源项目.pdf

    阿里巴巴作为全球知名的科技巨头,其在开源领域贡献了大量的优秀项目,涵盖了从开发框架到组件的各种类型。以下将详细解析这些项目及其特点: 1. **React-web**:React-web 是一个框架,目标是让React Native的API...

    阿里Druid连接池技术需要的jar包

    阿里Druid连接池是阿里巴巴开源的一款高性能的数据库连接池组件,它在Java应用程序中扮演着重要的角色,特别是在大型分布式系统中,对数据库连接的管理、监控和优化具有显著的效果。Druid提供了强大的监控和扩展功能...

    SpringBoot集成阿里巴巴Druid监控的示例代码

    SpringBoot集成阿里巴巴Druid监控的示例代码是指在SpringBoot项目中集成阿里巴巴开源的数据库连接池Druid,以实现对数据库操作的监控功能。Druid是阿里巴巴开源的数据库连接池,提供了优秀的对数据库操作的监控功能...

    druid-1.1.9_德鲁伊1.1.9_durid-1.1.9_druid-1.1.9.jar_阿里巴巴德鲁伊连接池_

    德鲁伊(Druid)是阿里巴巴开源项目中的一个高性能、功能强大的数据库连接池实现,版本1.1.9是其在2016年发布的一个稳定版本。在Java开发中,数据库连接池是管理和复用数据库连接的重要工具,能够显著提高系统性能,...

    阿里巴巴的10款开源项目 (2).docx

    阿里巴巴作为全球知名的科技巨头,其在开源领域贡献了大量的优秀项目,涵盖了从框架、组件到工具的各个层面。以下是对这些项目的详细介绍: 1. **React Web**:这是一个专门为使用React Native API构建的Web应用...

Global site tag (gtag.js) - Google Analytics