微信qq社交软件单发与群发消息数据库表设计

微信qq社交软件单发与群发消息表设计


开发中我们经常碰到系统需要设计消息,那么消息又分为单发与群发消息

单发就是只这个消息是发给某一个用户,群发就是这个消息是发给所有的用户或部分用户

那么我们不可能采用传统的方式,每一条消息都要插入一条记录,那么如果有10万用户,群发一条消息,那么就要插入10万条记录,这很明显是不对的,数据库吃不消

那么我们怎么设计呢,我们只要设计一个消息表与用户消息表,消息类型我们设置0为系统全局消息,所有用户都能收到,1为群用户,群内用户可以收到,2为单个用户,单个用户可以收到

消息表A
IDMESSAGEMESSAGETYPETOUIDFROMUID
1全局消息000
2群消息135
2单个用户消息245


群表B
IDQUNNAMECREATEUID
1公司群1
2技术群2
3销售群3


群用户表C
UIDQUNIDISADMIN
121
220
320

那么每个用户怎么获得自己的所有消息呢,请看下面的sql

select * from A where touid=用户id or messagetype=0 or (messagetype=1 and touid in (select qunid from C where C.UID=用户id))

这样就可获取用户的个人、群、全局消息了

那么如果记录已读消息呢

消息阅读表D
UIDMIDREADTIME
112019-12-12
222019-12-1

好的,消息阅读表也建好了,那么怎么获取未读消息呢,请看下面的sql

select * from A where (touid=用户id or messagetype=0 or (messagetype=1 and touid in (select qunid from C where C.UID=用户id))) and A.id not in (select mid from D where D.uid=用户id)

好了,消息这块的处理就完了,当然在大型系统中,消息记录采用的是边缘数据库的方式进行处理,服务端存储一份,客户端都有自己的消息数据库,客户端与服务端的数据库定期进行更新矫正,这样客户端的数据可以脱离服务器进行使用,也就是离线应用,这也减轻了服务端的压力,提高了并发,边缘计算也是以后的趋势,去中心化也同样是未来的趋势

今天我们就写到这了,太晚了,洗洗睡了


{{collectdata}}

网友评论0