有这样一个应用:
一个向外推送帖子的网站,需要记录帖子都为哪些用户浏览过。怎么设计?
设计一(很粗糙的实现)
将帖子和用户做多对多关联,关联上了就是阅读过了。
那么问题来了,当用户数达到千万级别,帖子数达到万级,那将是很可怕的数量。
设计二(一位资深人士给的做法)
为每一个帖子开辟一个8M的存储空间,按照用户的id记录用户是否阅读过,以0表示false,1表示true。当然用户的id是从1开始自增长的。
我想说这两方法都太浪费存储资源了
关键是记录用户的最后访问时间,帖子的发布时间。
只要将用户的最后登陆时间和当前时间之间发布的帖子塞进用户的未读列表即可(可以在用户登陆的同时处理),用户每阅读一篇即可从未读列表中删除
如此,统计一篇帖子有哪些人未阅读过
最后登录时间早于帖子发布时间的 + 时间晚于帖子发布时间,且阅读列表中有这篇帖子的
统计一篇帖子有哪些人阅读过
时间晚于帖子发布时间,且阅读列表中没有这篇帖子的
这里的时间换空间就是消费计算机的运算时间换取存储的节约