MySQL 高并发写入,怎么优化性能?

需求:

  • 同一时间点有大量新用户注册要插入数据库
  • 同一时间点有大量的评论和记录要插入数据库

例如有一直播系统,直播开始时,同时有大量的新用户要注册和发表评论。如何解决这个写入性能问题?请问有好的解决方案吗?

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 8

消息中间件吧

4年前 评论
yujiarong 4年前
十七岁程序员想当歌手 (楼主) 4年前
wanghan

这个有点难,等大佬回答

4年前 评论

用户注册和发弹幕这两个频率不在一个量级
用户注册随便搞搞直接存 MySQL
弹幕的话可能需要考虑先找个地方存好(redis, mongo), 定时写 MySQL

4年前 评论
十七岁程序员想当歌手 (楼主) 4年前
ninscious 4年前
hldh214 (作者) 4年前
十七岁程序员想当歌手 (楼主) 4年前
十七岁程序员想当歌手 (楼主) 4年前
wanghan 4年前
十七岁程序员想当歌手 (楼主) 4年前
十七岁程序员想当歌手 (楼主) 4年前
66

遇到同样问题 只是场景不一样,等大佬回复

4年前 评论
Complicated

这个最好是 写入redis,然后定时 灌到mysql里,单纯的操作库,不太好搞啊!

4年前 评论
wanghan 4年前
Complicated (作者) 4年前
wanghan 4年前
Complicated (作者) 4年前

@Complicated 是的,现有产品的实现方案就是先存redis,然后定时批量写入数据库(压力测试中单次写入1000条记录比分别写入快上百倍)。但同时也有一些问题发生了:

  • 和用户数据有关联的操作在未写入数据库时会出错(例如数据库关联查询的)。
  • redis 的数据可能有会丢失。例如:好像开始了持久化还是有可能会丢失最近一秒内的数据。
4年前 评论

把数据实时推送到消息kafka,用spark或者storm消费指定时间批次的数据,批量写入

4年前 评论
LOST
  • 注册还是直接写到数据库里面比较好,如果写到缓存里,万一这个时候缓存挂了,影响很不好。如果并发太大,可以考虑简化注册的业务流程,降低单次访问的计算量。
  • 弹幕这种,用消息队列就很合适了。

P.S. 我也没有经验,纸上谈兵而已。

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!