最近在做一个有timeline功能的网站,及要把用户关注的人的一些信息按时间显示出来。
一般而言有两个方案,一是在用户的关系表(查询得到关注的人)和用户的一些动作表(用户行为)这两个表中做联合查询,但是可能在用户数比较多的情况下效率比较慢,这是所谓的pull方法。
一个是每个用户有一定动作后在队列中把用户动作分发到每一个关注他的人那里,这样对用户来说可以直接查询最近的timeline,效率比较高,但是要涉及一系列队列动作,而且增加或者取消了关注还需要修改以前已经推送的结果,好处就是用户数量比较大的时候效率较高,当然也有一定的延迟。这是所谓的push方法。
两种方法都要配合缓存来提高效率。
用户数量不太多的情况下第一种方案速度是不错的,但如果用户数量增加之后该如何考虑转到第二种方案呢?一般的数据库(mysql)的join查询在用户数量达到什么数量级的时候会明显影响使用效率?
请问能介绍一下这方面的经验吗?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
有的网站使用缓存直接处理,每个人有自己的一个缓存队列,当发布新动态或者关注的人有新动态的时候,就会清空这个队列,重新从数据库中获取信息。