为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕尼黑的夜晚无繁华 2019-03-16 16:03:19
有这么个需求:一篇通知发出,指定哪些人可以看。 利用mysql的最简单的方案: message信息表id 信息IDnamecontent message_user 用户查看信息表idmessage_id 信息IDuser_id 用户ID 说说方法优点:实现简单 弊端:比如说一篇文章指定给一万个人,发个几千篇文章。那message_user表很快信息量就要爆了,很快就有性能瓶颈。 所以,请各位大侠给出更高效的方案,第三方存储不限。 有个设想,利用二进制每一个位表示一个用户ID,该位值为1表示有读权限,0则没权限:message信息表,增加一列binary(10000)二进制类型 假设为user_control 用户ID 1 可读,2不可读,3,可读,....1000可读 那么user_control对应的二进制数为 1... ..1010 不知道可行?
查看完整描述

5 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

如果你要发送的一万个人是任意的,没有任何规律,那生成这一万个人的列表不可避免,不论是人工选择还是存储的时候,这个列表至少要生成一次。但如果是有规律的,就采用类似看帖权限的方法,每次用户请求通知列表的时候检查其是否符合要求,也可以分用户组,某些组内的用户可以查看某通知。

你的设想我觉得使用起来会有点麻烦,但效果和直接存储一个列表是一样的。如果一定要存储这个列表,不妨分类讨论,如果目标用户比较稀疏,就直接枚举;比较稠密就实用你的方法。当然这可能需要两个字段。

查看完整回答
反对 回复 2019-03-18
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

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

查看完整回答
反对 回复 2019-03-18
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

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

查看完整回答
反对 回复 2019-03-18
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

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

查看完整回答
反对 回复 2019-03-18
?
米脂

TA贡献1836条经验 获得超3个赞

利用用户角色+订阅功能可以快速实现这个想法而且不用发送成千上万遍。

查看完整回答
反对 回复 2019-03-18
  • 5 回答
  • 0 关注
  • 371 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信