php - 大并发下的mysql事务问题
高洛峰
高洛峰 2017-04-10 15:37:40
[PHP讨论组]

现有如下场景:用户A和大量A 的粉丝,这时候A的粉丝不断的给A 送道具,这个道具是用户花钱买的,送给用户A之后,会给用户A 的帐号增加相应的钱,同时会给用户A 增加一些附件属性的值,比如用户A 的 经验值,血条长度啊,同时还会给该粉丝增加的经验值,那么这里涉及到的表有用户A 的钱的表,粉丝的钱的表,经验的表,那么我在处理这个时候 给整个过程加了事务处理,但是现在遇到的问题是:一旦有大量的用户同时给A送道具,那么就会出现数据库死锁的问题,请问这个该怎么处理?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(5)
黄舟

这些行为,都不会要求即时返回结果,可异步化处理,关键词: 消息队列

黄舟

死锁的问题在于程序或SQL代码有Bug。处理掉Bug,即使遇到再大的并发,最多是处理时间增大,但不会出现死锁。

阿神

检查一下sql语句中update .... where [conditon],其中condition是否是主键?如果不是主键,在update时数据库会锁住整张表,多个线程同时操作时极容易出现死锁。
解决办法是,update 后的condition务必使用主键操作,此时数据库仅仅对当前操作记录使用行锁,不会死锁。

伊谢尔伦

异步操作能满足你的需求。

Ps:某些操作是必须要求即刻返回数据的。比如用户消费买东西要先判断钱够不够。其实我是来推荐 PostgreSQL 的

高洛峰

同推荐PostgreSQL
异步队列是很好的解决方案

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号