目前系统中存在以下场景:
会员可以相互成为粉丝,也就是A可关注B,B也可以关注A,关注数量不限。
问题如下:
会员后台页面有一个 “自己关注的人”的动态列表。
系统设计目标是:如果动态列表中,没有人更新动态,数据是缓存的。如果自己关注里面的任何一个发表或者删除了动态,要及时刷新缓存。让关注此会员的人能看到最新更新。
目前会员系统中有已会员400W,日增8K左右。
请问如何设计系统比较好。
这里用到Redis队列
新增个动态表
主要包含
int 动态类型(如:发帖-0、评论-1);
int 源ID(如:帖子ID);
int 分发状态;
实时分发动态程序:
轮询动态表 未分发的动态,发送至粉丝的动态队列(队列可设置上限,用户只可查看几百条内的好友动态,或者,超过读库)
删动态实时更新的话,可以直接删除整个队列,在读取的时候,读库,再顺便压一些数据到队列。
谢谢,我再研究研究~~~
如果用sql数据库实现的话,可以这样设计:
首先有关注关系表,具体结构就不列了。再设计一张关注动态表,记录关注人、被关注人、动态等信息
当会员做了操作比如发帖,根据关注关系表,找到对应的关注人,再找到动态表,更新动态表。
最后,更新缓存。
动态表可以再优化为2张表,一张存动态关系,一张存动态内容。比如A发帖了,就对应了一条动态内容记录。然后BCD关注了A,那么动态关系表里面就更新BCD三条记录,但是具体的动态内容则存在“动态内容表”中。
再进一步优化,要控制动态关系和动态内容这两张表的数据量,就要制定一个多余数据删除的策略,这要根据需求而定。
考虑到服务器压力,这部分可以划分成独立的服务器来允许,数据库可以独立,应用程序也可以独立,缓存也可以独立,通过事件方式来交互。比如用户发帖后,传递一个事件给“动态服务器”,动态服务器完成对应操作后,更新缓存。而应用服务器在获取动态信息时候只要从缓存服务器读最新信息即可。