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