我现在有一条消息发布出去,假如有一万人同时接收到,我现在在数据库 增加了一个 字段 存储已读过的用户 的用户名 用逗号隔开, 假如这么多用户的话 那么 这个标记字段长度就得非常长了 这样就不合理了。 所以我想问的是有没什么比较好的方案 对于同一条消息 标记当前用户是否已读过
我现在有一条消息发布出去,假如有一万人同时接收到,我现在在数据库 增加了一个 字段 存储已读过的用户 的用户名 用逗号隔开, 假如这么多用户的话 那么 这个标记字段长度就得非常长了 这样就不合理了。 所以我想问的是有没什么比较好的方案 对于同一条消息 标记当前用户是否已读过
如果用户量不大的话,可以设计一张用户消息表,每给一个用户发一条消息就存储到里面,已读未读就一个字段标识就可以了。用户量大的话会造成很大的存储浪费,可以记录一张消息-用户表,里面只记录读了这条消息的用户,只不过在显示某个用户消息的时候需要做点处理。
系统消息和发给用户的消息应该存储在两个不同的表中呀。用户是否已读,是用户的行为,不能附加到系统上去。根据你这个需求,当系统新生成一条消息,在sys_news的表中存储一条记录,这个表可以很简单,有个id,有个内容就行。然后消息发送给用户,分发给那个用户,用户的消息表中user_news中就要增加一条记录。用户消息表要有用户的id,消息的id,消息状态(是否已读)。当用户读了,根据用户的id和消息的id改用户消息表的状态就可以了。
你可以新建一个表,用来存储对这条信息已读和未读的信息。
简单帮你设计一个一下这个表如下:
假如这条信息是2017-11-29T12-12-12这个时间点发出的,通过比较用户读这个消息的时间(存储在上表的READ_DATE)这个字段里,如果用户读取这个消息的时间大于这个消息发出的时间,就证明读过这个消息,反之没有读过。
8 回答6.4k 阅读
5 回答3.4k 阅读✓ 已解决
3 回答3.7k 阅读✓ 已解决
1 回答4.2k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
2 回答3.2k 阅读
2 回答3.9k 阅读
看看这个