一篇通知,发送给指定的人。求最高效的方案。

有这么个需求:
一篇通知发出,指定哪些人可以看。

利用mysql的最简单的方案:

message信息表
id 信息ID
name
content


message_user 用户查看信息表
id
message_id 信息ID
user_id 用户ID

说说方法
优点:
实现简单

弊端:
比如说一篇文章指定给一万个人,发个几千篇文章。
那message_user表很快信息量就要爆了,很快就有性能瓶颈。

所以,请各位大侠给出更高效的方案,第三方存储不限。

有个设想,利用二进制每一个位表示一个用户ID,该位值为1表示有读权限,0则没权限:
message信息表,增加一列binary(10000)二进制类型 假设为user_control

用户ID 1 可读,2不可读,3,可读,....1000可读

那么user_control对应的二进制数为

1... ..1010

不知道可行?

慕尼黑的夜晚无繁华
浏览 372回答 5
5回答

慕田峪4524236

如果你要发送的一万个人是任意的,没有任何规律,那生成这一万个人的列表不可避免,不论是人工选择还是存储的时候,这个列表至少要生成一次。但如果是有规律的,就采用类似看帖权限的方法,每次用户请求通知列表的时候检查其是否符合要求,也可以分用户组,某些组内的用户可以查看某通知。 你的设想我觉得使用起来会有点麻烦,但效果和直接存储一个列表是一样的。如果一定要存储这个列表,不妨分类讨论,如果目标用户比较稀疏,就直接枚举;比较稠密就实用你的方法。当然这可能需要两个字段。

婷婷同学_

你可以试试把用户列表存进去 结构类型就变成 idmessage_id 信息IDuser_id_list 用户ID列表

繁华开满天机

这个基于你用户量是多少,如果只是10000的话可以用你那种方法,如果数据量比较大100万 1000万,还是只能使用第一种方法,就算数据量大,但是字段少,查询还是很快的,若数据再大就进行分表就行了

翻过高山走不出你

数据全部存redis没问题队列同步到mysqlmysql可以分表

米脂

利用用户角色+订阅功能可以快速实现这个想法而且不用发送成千上万遍。
打开App,查看更多内容
随时随地看视频慕课网APP