简单的站内消息
分表来设计。把msg内容存另一张表
表msg_send:
ID、发送者ID、接收者ID、msg_id(消息内容ID)、阅读状态、delete_time(是否删除)
表msg_content:
msg_id、title、content
适合群发不规则用户的站内消息
如群发不是所有人,不是某类人,而是根据有订单或积分>200的不规则用户,适合此项
表msg_send:
ID、发送者ID、所有接收者IDS、msg_id(消息内容ID)、date
表msg_content:
msg_id、title、content
表msg_status:
用户id、msg_id、del删除状态
查询用户A的所有消息ID
$send_ids=查询msg_send表,条件: 接收者IDS
like ',uid,', 返回:msg_send的ID列
根据A的所有消息ID,查询消息内容
查询msg_content表
根据A的所有消息ID,查询消息状态
查询msg_status表关联msg_content表,条件msg_id in $send_ids and 用户id=uid and del=0
返回结果都是已读,对比后自然得出已读未读状态
这样的好处是群发一条100W人的消息,msg_send和msg_content都只各一条数据,msg_status已读一人加一条,僵尸用户不增加数据
msg_send存入所有接收者IDS格式为json的'[0,12,16,0]'
百万级用户量的站内信设计
2个表:消息表、用户消息容器表
管理员发一条站内信,系统往站内信表插入一条数据,其中发送方式区分接收的对象(0为全体发送,1为只发送给注册会员,2为只发送给企业会员,3为指定会员发送),这样,发送给全体会员的一条站内信暂时只生成了一条数据。
前台会员登陆或的时候,根据会员自身的会员类型(普通会员,企业会员)查询站内信表中属于自己的最新消息(根据自己所持消息的最新时间与消息表的发送时间做 比对)或(是否存在做对比),往消息容器中插入自身与所持消息的关联数据,默认未未读。