请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

同步和异步两种模式如何处理高并发场景?

bobby老师好!
我假期在家突然想到了一个问题,希望您能帮忙解答一下。

一个常见的场景,就是数据库中的某一条记录在很短的时间内有大量的读写操作,那同步和异步两种模式是怎么处理的?

(我的一些思考)同步模式下,可能会采用锁机制,那这个锁是由数据库实现的,还是由代码实现的?就是,是采用数据库中自带的锁,保证某一条数据在某一时刻只能被一个会话修改,还是说,是程序员自己写关于锁的代码?

正在回答

1回答

bobby 2020-01-29 16:32:46

你这个问题还是很不错的, 短时间内有大量的读写操作这个确实也是高并发最常见的需求了。其实这个时候使用同步异步都不能很好的解决,因为-性能在数据库上!!,代码级别的同步和异步io都无法解决数据库的性能,这个是数据库的性能问题,这里面需要你对数据库的锁机制很清楚,单就mysql来说,锁就分为好几种,你可以随便找一本mysql的高级知识的书看一下,锁是为了数据的安全,但是锁一定会带来性能问题,还有一种就是索引,因为只要是查询为了加速查询一定会有索引,索引也一定会影响插入的性能,所以这里有两个矛盾点:1. 锁能保证数据安全但是会影响性能 2. 不加索引插入可能很快,但是查询会很慢,有了索引查询会快,但是插入会慢 所以不论是什么高并发场景都会有一个共同目标就是代码能不查询和插入数据库就不要插入数据库, 这个就是缓存机制,缓存是目前已有的最有效提高并发的手段了,但是缓存引入很容易造成数据不一致,所以也就有了很多缓存的解决技术,比如缓存穿透等等 这些网上资料也比较多,至于程序员自己的锁,很多时候都会用到的

0 回复 有任何疑惑可以回复我~
  • 提问者 qq___107 #1
    哦哦,那会用到消息队列吗?然后,这里的缓存是怎么实现的?
    回复 有任何疑惑可以回复我~ 2020-01-29 19:00:35
  • bobby 回复 提问者 qq___107 #2
    消息队列是为了异步实现的,也不是能加强数据库性能。所以最有效的方法是缓存,缓存的实现你可以百度一下 以及慕课网上不少实战课程都讲解过缓存,缓存是一个很大课题 需要花不少时间讲解 https://www.cnblogs.com/xiangkejin/p/9277693.html 你可以看看这些了解一下
    回复 有任何疑惑可以回复我~ 2020-01-30 23:37:21
  • 提问者 qq___107 回复 bobby #3
    哦哦,谢谢!现在python可以通过asynio实现异步,那是不是表示以后的python做异步处理可以不需要使用rabbitMQ、celery等工具?
    回复 有任何疑惑可以回复我~ 2020-01-30 23:55:19
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信