这将是一个很好的算法,以保持未读邮件的数量在一个在线提要聚合器的实现?
-
13-09-2019 - |
题
假设数据库具有表对于用户来说,订阅,项和的能力知道哪个物品的用户已经看到。我寻找一个的设计范例强>可在服务器上被用于计算在很短的时间量[饲料ID,NUM_UNREAD]对于每个馈送用户已经订阅了。
假设大量的用户,并且该进料得到在后端定期更新。
编辑:我想解决的问题尼克j具有长大(见下文)。但我很欣赏发表克莱图斯的解决方案。我不是很担心的数据库查询,但希望有一个“设计模式” - 喜欢养看门狗的过程,保持未读邮件数在内存中,以便它可以在任何时候送达
。解决方案
我不知道该怎么确切地告诉你,因为就是你问的是相当简单的。
首先,使用谷歌阅读器作为在线feed聚合/读者参考。如果你想重新创建功能,谷歌阅读器已经非常钉它已经(恕我直言)
谷歌阅读器的工作原理简单地通过存储源列表。在数据库方面,你可能有这些实体
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
未读项目由饲料:
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调用一切标记为已读,留下一个项目标记为未读等。
不隶属于 StackOverflow