druid&HikariCP学习记录

家住魔仙堡 提交于 2020-12-22 17:26:00

一:druid

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

  • DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系,类似Serlvet的Filter,配置Filter拦截JDBC的方法调用,可以很方便编写JDBC层的扩展插件。可以在上面做任何事情,比如说性能监控、SQL审计、用户名密码加密、日志等等。

  • DruidDataSource 高效可管理的数据库连接池。 替换DBCPC3P0等其他数据库连接池

  • SQLParser mycat使用

2.作者简介-温少

2001年毕业于深圳大学,毕业后到金蝶软件研发中心工作9年,工作内容包括工作流引擎、多数据库支持引擎、短信网网关等。2010年3月加入阿里巴巴至今,主要的工作是设计和实现阿里巴巴应用监控系统Dragoon,Druid和Fastjson都是监控系统实现的副产品。

3.为什么选择druid

       4.注意事项

  • 锁的公平和效率是一个需要平衡的问题。如果配置了maxWait,在连接不够用争用时,unfair模式的ReentrantLock.tryLock方法存在严重不公的现象,个别线程会等到超时了还获取不到连接。
  • MySQL的wait_timeout默认是8小时,如果没有配置testonborrow,连接空闲超过wait_timeout后会变无效连接并且druid不会知晓。但druid默认会在连接空闲7小时后丢弃连接。如果配置过mysql的wait_timeou,则druid也要相对做配置。
  • druid并不能保持最小连接数,设计如此。
  • 用到sql防火墙时需要注意如果是SQLParser不能识别的sql语句,可能会报错。
  • 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。

二:HikariCP-2.4.7学习总结和遇到的疑问

HikariCP是偶然在网上看到的,因为被称为最快的数据库连接池,所以关注、学习了下。HikariCP网上资料很少,所以我自己下了代码阅读了下,分享一些HikariCP的代码。HikariCP代码相对较少,不像druid,jar包2MB,而且代码基本没有任何注释。

1.github_HikariCP作者对于快的wiki.https://github.com/brettwooldridge/HikariCP/wiki/Down-the-Rabbit-Hole

2.Double-checked_locking:HikariDataSource_86.http://en.wikipedia.org/wiki/Double-checked_locking#Usage_in_Java

3.HikariPool_171 连接是否alive

4.HikariPool_435 variance up to 2.5% of the maxlifetime

5.HikariPool_436 ThreadLocalRandom

6.ConcurrentBag_borrow 快的关键方法

7.Sequence_77 LongAdder vs AtomicLong

8.About Pool Sizing https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing

9.一些相关的技术:lock-free; false-sharing ;cas;happens-before

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!