假设数据库具有用户,供稿,项目的表格,并且能够知道用户已经看过哪些项目。我正在寻找可以在服务器上使用的设计范例,以便在用户订阅的每个Feed的短时间内[feed id,num_unread]进行计算。
假设有大量用户,并且后端会定期更新Feed。
编辑:我想解决Nick J带来的问题(见下文)。但我很欣赏cletus发布的解决方案。我不是那么担心数据库查询,而是想要一个“设计范例” - 比如保持一个看门狗进程,将未读数量保存在内存中,以便可以随时提供。
答案 0 :(得分:1)
我不确定该告诉你什么,因为你提出的要求相当简单。
首先,使用Google Reader作为在线Feed聚合器/阅读器的参考。如果你正在尝试重新创建这个功能,那么Google阅读器已经完全固定了它(imho)。
Google阅读器只需存储供稿列表即可。在数据库术语中,您可能拥有这些实体
User: id, name, email, etc...
Feed: id, feed_name, feed_url
Content: id, feed_id, title, content
User Feed: id, user_id, feed_id, user_label, has_read
未读物品:
SELECT COUNT(1)
FROM user u
JOIN user_feed uf ON uf.user_id = u.id
JOIN feed f ON f.id = uf.feed_id
WHERE has_read = 0
Feed中的未读项目:
SELECT feed_id, feed_name, COUNT(1)
FROM user u
JOIN user_feed uf ON uf.user_id = u.id
JOIN feed f ON f.id = uf.feed_id
WHERE has_read = 0
GROUP BY feed_id, feed_name
然后你只需要一些机制来将项目标记为已读。在谷歌阅读器的情况下,只有由鼠标悬停事件触发的AJAX调用,其他链接将所有内容标记为已读,保留标记为未读的项目等等。