0

假设数据库有用户表、提要表、项目表,并且能够知道用户已经看过哪些项目。我正在寻找一种可以在服务器上使用的设计范例,以便在短时间内为用户订阅的每个提要 [feed id, num_unread] 进行计算。

假设有大量用户,并且提要在后端定期更新。

编辑:我想解决 Nick J 提出的问题(见下文)。但我很欣赏 cletus 发布的解决方案。我不太担心数据库查询,而是想要一个“设计范例”——比如保持一个看门狗进程,将未读计数保存在内存中,以便随时提供服务。

4

1 回答 1

1

我不确定要确切地告诉您什么,因为您要问的内容相当简单。

首先,使用谷歌阅读器作为在线提要聚合器/阅读器的参考。而且,如果您尝试重新创建该功能,Google Reader 已经非常成功了(恕我直言)。

Google Reader 只需存储一个提要列表即可。在 DB 术语中,您可能拥有这些实体

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 调用带有附加链接以将所有内容标记为已读,将项目标记为未读等等。

于 2009-06-12T21:35:47.593 回答