提交订单性能优化系列之002-引入自己编写的数据库连接池

概要总结

从数据库获取一个连接的平均耗时大约是3到4毫秒。在本次测试时,使用数据库连接池可以提升大约60%的性能。

数据库连接池对性能的影响

总是在各种地方看到类似的说明:“数据库连接池是非常昂贵的资源。” 那么请问“非常昂贵”到底是有多昂贵呢?

在我的机器上的测试结果是:从数据库获取一个连接的平均耗时大约是3到4毫秒

这次不依赖框架自带的连接池以后,试着自己写了一个简单的数据库连接池,参考了这篇博客:javaweb学习总结(三十九)——数据库连接池

在没有使用数据库连接池的时候,测试的结果是这样的:

提交每个订单平均耗时的毫秒数:157
每秒钟可以提交的订单数:6

在使用了数据库连接池以的一,测试的结果是这样的:

提交每个订单平均耗时的毫秒数:99
每秒钟可以提交的订单数:10

当然了,每次运行得到的结果会有差别,但是大体是一致的。

如果用“提交每个订单平均耗时的毫秒数”来计算的话:157 - 99 / 99 * 100% = 58.58%,也就是说,在单线程测试时,使用数据库连接池可以提升大约60%的性能。

自已编写数据库连接池的关键点

关键点:在Connection的实例调用它的close()方法的时候,不要真的close,而是放在内存里面,以备下一次使用。下次使用的时候就直接从内存里面取就可以了。

实现方法就是:建一个代理类,让外部不直接调用实际的Connection,而是调用代理Connection,让外部以为自己已经close了,而实际却没有close

002版本更新说明

002版在001版的基础上做了一些结构上的调整,主要有以下两点:

  1. 测试包路径与源码包路径保持一致
  2. 源码包中的类不再声明为public的,这样就保证只有同名的包下的类才能访问到这些类,杜绝了错误引用的可能性

同时这一版优化了打印日志的体验,增加了一些进度日志(以防止因为没有耐心而停止测试),同时也增加了一些分隔线,用于更清晰地展现日志。

这一版本的日志完整日志如下:

------------------------------ 分隔线 Version001Test : initDb ------------------------------
正在初始化数据库:shop_order_test_version001
初始化数据库完成:shop_order_test_version001


------------------------------ 分隔线 Version001Test : singleThread ------------------------------
当前循环的序号:0
当前循环的序号:11
当前循环的序号:22
当前循环的序号:33
当前循环的序号:44
当前循环的序号:55
当前循环的序号:66
当前循环的序号:77
当前循环的序号:88
当前循环的序号:99
提交每个订单平均耗时的毫秒数:157
每秒钟可以提交的订单数:6
提交订单之前的库存:100
提交订单之前的销量:0
提交订单之后的库存:0
提交订单之后的销量:100


------------------------------ 分隔线 Version002Test : initDb ------------------------------
正在初始化数据库:shop_order_test_version002
初始化数据库完成:shop_order_test_version002
获取一个数据库连接平均耗时:3 毫秒
初始化数据库连接池完成,数量为:100


------------------------------ 分隔线 Version002Test : singleThread ------------------------------
当前循环的序号:0
当前循环的序号:11
当前循环的序号:22
当前循环的序号:33
当前循环的序号:44
当前循环的序号:55
当前循环的序号:66
当前循环的序号:77
当前循环的序号:88
当前循环的序号:99
提交每个订单平均耗时的毫秒数:99
每秒钟可以提交的订单数:10
提交订单之前的库存:100
提交订单之前的销量:0
提交订单之后的库存:0
提交订单之后的销量:100

源码

002版本的github源码在这里,如果不知道怎样运行项目,请参考这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值