您好,匿名用户
随意问技术百科期待您的加入

高并发下文章的评论实现

0 投票

MySQL 配置了Master-Slave后, 高并发下同步数据会需要一定时间,这个时间可能是1s, 2s, 所以添加的数据不能马上在slave 上查询的到. 在此背景下要把用户发的评论实时的列出来,改怎么实现?

我的思路:

  1. 评论添加到数据库之后,让文章ID为做key, 评论数据作为value 已经数据的形式序列化后保存在缓存中。缓存里面的是一个队列,队列大小可配置。

  2. 在列出评论之前,获取缓存里面评论数据,取出评论ID, 然后查询slave 数据库 加上条件 评论ID not in (?)

  3. 因为是分页查询,把查询结果merge后 减去多余的评论返回给客户端

这个是基本思路。

大家有更好的建议吗?

用户头像 提问 2014年 6月7日 @ Aquarius 上等兵 (283 威望)
分享到:

1个回答

0 投票

你的方法我感觉有以下问题: 1.insert成功后你要想马上取得评论主键id,用SELECT LASTINSERTID()查询的是从库,此时可能还没同步过来 2.按你的场景,有这种高并发的场景,数据量必然不小, not in 无法走索引,会有性能问题

个人感觉有些简单的问题复杂化了。如果对评论的实时性要求比较高,我的建议是: 1.优化主从同步,同步延时无非要么是网络延迟,要么是从库更新单线程跟不上主库更新的多线程,可以用淘宝开发的mysql主从同步的开源解决方案transfer 2.对业务进行垂直拆分,评论专门做成一个系统,独立的数据库,里面只放评论表

用户头像 回复 2014年 6月7日 @ 我和小伙伴们都惊呆了 上等兵 (156 威望)
提一个问题:

相关问题

0 投票
1 回复 22 阅读
用户头像 提问 2014年 2月10日 @ Varus 上等兵 (281 威望)
+2 投票
1 回复 24 阅读
0 投票
1 回复 22 阅读
0 投票
1 回复 57 阅读
用户头像 提问 2012年 12月1日 @ Amumu 上等兵 (340 威望)
0 投票
1 回复 36 阅读

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...