zoukankan      html  css  js  c++  java
  • Hikaricp源码解读(1)——简介

    1、简介

    HikariCP是一款高效稳定的数据库连接池,性能方面与其他同类产品相比能高出近10倍,尤其连接取用的设计极大的提高可靠性,对于数据库连接中断的情况,通过测试getConnection(),各种CP的不相同处理方法如下:
    (所有CP都配置了跟connectionTimeout类似的参数为5秒钟)

    • HikariCP:等待5秒钟后,如果连接还是没有恢复,则抛出一个SQLExceptions 异常;后续的getConnection()也是一样处理;
    • C3P0:完全没有反应,没有提示,也不会在“CheckoutTimeout”配置的时长超时后有任何通知给调用者;然后等待2分钟后终于醒来了,返回一个error;
    • Tomcat:返回一个connection,然后……调用者如果利用这个无效的connection执行SQL语句……结果可想而知;大约55秒之后终于醒来了,这时候的getConnection()终于可以返回一个error,但没有等待参数配置的5秒钟,而是立即返回error;
    • BoneCP:跟Tomcat的处理方法一样;也是大约55秒之后才醒来,有了正常的反应,并且终于会等待5秒钟之后返回error了;

    可见,HikariCP的处理方式是最合理的。根据这个测试结果,对于各个CP处理数据库中断的情况,评分如下:

    Pool Grade Reason
    HikariCP A Properly handles connection timeouts.
    Vibur B+ Properly handles connection timeouts.
    Unfortunately, setUseNetworkTimeout(true) is not the default and
    its importance likely missed by casual users.
    Dbcp2 D Seemingly hangs until the OS TCP timeout limit.
    C3P0 D Seemingly hangs until the OS TCP timeout limit.

    评分结果摘自:https://github.com/brettwooldridge/HikariCP/wiki/Bad-Behavior:-Handling-Database-Down

    HikariCP的优势:

    • 字节码精简:优化代码,直到编译后的字节码最少,这样,CPU缓存可以加载更多的程序代码;
    • 优化代理和拦截器:减少代码,例如HikariCP的Statement proxy只有100行代码,只有BoneCP的十分之一;
    • 自定义数组类型(FastList)代替ArrayList:避免每次get()调用都要进行range check,避免调用remove()时的从头到尾的扫描;
    • 自定义集合类型(ConcurrentBag):提高并发读写的效率;
    • 其他针对BoneCP缺陷的优化,比如对于耗时超过一个CPU时间片的方法调用的研究

    更多性能测试:
    数据库连性池性能测试(hikariCP,druid,tomcat-jdbc,dbcp,c3p0)

  • 相关阅读:
    公平锁,非公平锁,乐观锁,悲观锁
    需求分析
    需求的获取渠道
    php将中文字符串分割为数组
    面试题
    ecshop中错误
    应用上线前必须进行的10个QA测试
    资料1
    tp数据库配置
    Web开发思路
  • 原文地址:https://www.cnblogs.com/taisenki/p/7697790.html
Copyright © 2011-2022 走看看