继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

秒杀场景下MySQL的低效--原因和改进

爱与我同在
关注TA
已关注
手记 16
粉丝 15
获赞 84

https://img1.mukewang.com/5bd6d79e0001125705580259.jpg

https://img4.mukewang.com/5bd6d7b200013f1305580286.jpg

https://img1.mukewang.com/5bd6d7ba00013ab005580419.jpg

https://img.mukewang.com/5bd6d7ca0001dca005580400.jpg

tps(系统吞吐量,每秒事务处理量)

https://img3.mukewang.com/5bd6d7e90001286e05580292.jpg

https://img3.mukewang.com/5bd6d8060001741405580413.jpg

https://img1.mukewang.com/5bd6d812000160aa05580301.jpg

https://img.mukewang.com/5bd6d81a0001219105580392.jpg

https://img1.mukewang.com/5bd6d829000136ad05580368.jpg

https://img2.mukewang.com/5bd6d82f0001d32505580381.jpg

https://img4.mukewang.com/5bd6d8370001c96905580408.jpg

https://img3.mukewang.com/5bd6d83c000154e905580210.jpg

https://img4.mukewang.com/5bd6d84800014a9905580377.jpghttps://img3.mukewang.com/5bd6d84c00012ca705580394.jpg

https://img.mukewang.com/5bd6d854000175c605580240.jpg

总结

请求排队:如果请求一股脑的涌入数据库,势必会由于争抢资源造成性能下降,通过排队,让请求从混沌到有序,从而避免数据库在协调大量请求时过载。
请求合并:甲买了一个商品,乙也买了同一个商品,与其把甲乙当做当做单独的请求分别执行一次商品库存减一的操作,不如把他们合并后统一执行一次商品库存减二的操作,请求合并的越多,效率提升的就越大。

秒杀优化

优化1,更快速的序列化工具

将秒杀信息用redis缓存起来,redis并没有实现内部序列化,所以存对象需要实现序列化

如果使用默认类实现jdk的serializable 效率比较低 所以我们要选写高性能的序列化工具

https://github.com/eishay/jvm-serializers/wiki (这个是对Java 序列化技术做了比对)

https://img3.mukewang.com/5bd6d87c00018a2605580301.jpg

用protostuff 首先引入两个包

https://img.mukewang.com/5bd6d88900018ba708170310.jpg

https://img4.mukewang.com/5bd6d88f000124db05580276.jpg

https://img4.mukewang.com/5bd6d894000110f805580284.jpg

https://img.mukewang.com/5bd6d8980001fdd805580233.jpg

优化2, 防重优化

https://img.mukewang.com/5bd6d8a20001af3e06270468.jpg

优化

insert 用订单和用户电话号做唯一主键,可以防重

https://img1.mukewang.com/5bd6d8bc0001164305580236.jpg

https://img1.mukewang.com/5bd6d8c00001b52d05580077.jpg

优化3, 利用存储过程优化

我们知道 mysql 在执行本地主键sql 非常快 可以达到(4万/秒 的qps) Java执行代码也非常快,所以减库存的瓶颈主要出现在网络延迟和 GC的暂停(stop the word)

  减少网路连接我们可以使用存储过程

https://img2.mukewang.com/5bd6d8d00001dfce05580272.jpg

https://img2.mukewang.com/5bd6d8d50001a56e05580147.jpg

https://img.mukewang.com/5bd6d8da0001324505580284.jpg

https://img.mukewang.com/5bd6d8df0001ac0305580143.jpg

在Java代码中调用存储过程

配置mapper 利用mybatis 调用存储过程是一个select

https://img1.mukewang.com/5bd6d8e80001f47d08370206.jpg

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP