读扩散和写扩散、读写结合。

对于读多写少的场景,使用写扩散。
对于读少写多的场景,使用读扩散。

每个用户维护一个信箱,但一个好友发送消息的时候,更新该用户的所有消息。

当发生关注事件的时候,把新关注的人的消息与新消息进行融合。
当发生取关事件的时候,不做处理,请求的时候自动过滤掉取关的用户。

如何存储关注关系?
使用neo4j等图数据库。

如果使用mysql存储关注关系?在分库分表的情况下需要考虑哪些问题?

表结构:userId,targetUserId

获取我关注的列表select targetUserId from relation where userId=me
获取关注我的列表select userId from relation where targetUserId=me

在数据量较大的情况下需要进行分库分表,按照userId进行分库。则获取关注我的列表的时候没办法获取全。

这时候就创建两个数据库,一个关注数据库、一个被关注数据库。关注数据库按照userId进行分库分表,被关注数据库按照targetUserId进行分库分表。

使用elasticsearch存储关注关系。