锁定老帖子 主题:阿里巴巴开源平台新增项目Druid
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间: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,我懂的 |
|
返回顶楼 | |
发表时间:2011-05-12
sdh5724 写道 zhizhesky 写道 Druid 不是魔兽里的德鲁伊么?
内牛满面啊, 这个名字正是想达成的目标。 Druid是sdh5724给的名字,Druid能够开源,也是sdh5724促成的。 |
|
返回顶楼 | |
发表时间:2011-05-12
最后修改:2011-05-12
温少, 你能不丢人么,给我回去好好读读代码规范。 气死我了。 你至少触犯了5条军规。受不了了。 我让你维护格式化规范, 结果自己不用。
其实这个项目的目的不是为了实现起来有多少好的性能, 而是为了扩展jdbc一些限制。可以让程序员实现一些特殊的需求, 比如向密钥服务请求凭证,统计sql信息, sql性能收集,sql注入检查,sql翻译, 程序员可以通过定制来现在自己需求的功能。 我们仅仅制定了性能损失在1-2%之内的目标。 整个项目包括三个组成部分: 插件框架, 链接池, SQL解析器。 当然, 我们希望每个单一部分能实现较好的性能,因为我们是一个组合场景, 所以一定会有一些损失。 这个项目不是为了取代某些开源的东西, 我们的目的是为了一个有自由度的框框, 以满足我们在实现项目过程中的特殊需求。 我觉得是个挺有趣的东西, 所以开源出来。 |
|
返回顶楼 | |
发表时间:2011-05-12
最好把源码打成rar包供下载, 这样方便点
|
|
返回顶楼 | |
发表时间: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(); } } } } |
|
返回顶楼 | |
发表时间: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尚未发布呢! |
|
返回顶楼 | |
发表时间:2011-05-13
哦.就是一个数据库jdbc连接池吧?
写直接点多好,还以为你们重新写了jdbc的链接程序呢,这块技术含量高.你们可以去试试,如果仅仅是连接池,我想就算了.你们加日志什么的也就是那些写法而已,加密密码也不是什么特殊的功能呀. |
|
返回顶楼 | |
发表时间:2011-05-15
haitaohehe 写道 希望尽快整理出quick start 和相关文档,这样也方便更多的人去尝试。。。
文档已经完善了许多,内容还在补充中。 http://code.alibabatech.com/wiki/display/Druid/Documentation 文档的完善需要你的反馈! |
|
返回顶楼 | |
发表时间:2011-05-16
这是DruidDataSource的设计图示:
http://code.alibabatech.com/svn/druid/trunk/doc/druid-pool.txt 如果发现有乱码,请选择utf-8的编码方式查看。 |
|
返回顶楼 | |
发表时间:2011-05-17
sdh5724 写道 温少, 你能不丢人么,给我回去好好读读代码规范。 气死我了。 你至少触犯了5条军规。受不了了。 我让你维护格式化规范, 结果自己不用。
其实这个项目的目的不是为了实现起来有多少好的性能, 而是为了扩展jdbc一些限制。可以让程序员实现一些特殊的需求, 比如向密钥服务请求凭证,统计sql信息, sql性能收集,sql注入检查,sql翻译, 程序员可以通过定制来现在自己需求的功能。 我们仅仅制定了性能损失在1-2%之内的目标。 整个项目包括三个组成部分: 插件框架, 链接池, SQL解析器。 当然, 我们希望每个单一部分能实现较好的性能,因为我们是一个组合场景, 所以一定会有一些损失。 这个项目不是为了取代某些开源的东西, 我们的目的是为了一个有自由度的框框, 以满足我们在实现项目过程中的特殊需求。 我觉得是个挺有趣的东西, 所以开源出来。 ============================================ 校长生气了,温少要加把劲哈... |
|
返回顶楼 | |