【问题标题】:Collating/Managing data to populate "live activity feeds" in web app整理/管理数据以填充 Web 应用程序中的“实时活动源”
【发布时间】:2011-08-23 04:49:59
【问题描述】:

我有一个关于管理网站上的实时供稿/投票的抽象问题。

我正在创建一个 Web 应用程序(基于 Java/Spring/Hibernate 构建),并且在用户的主页上,我想要那里团队所有成员的最新活动的实时提要,并且我正在努力找出最好的在服务器端处理此查询的方法。

蛮力方法是加载当前用户的队友列表,然后遍历他的每个队友,加载他们最新的对话/文件上传/等,然后将所有这些活动合并到一个列表中按时间戳排序并返回(举例来说,我们只返回提要的前 10 个最新活动)。

但是,这似乎非常不理想,尤其是因为需要定期执行此操作(取决于轮询间隔)。

我还考虑过将所有潜在活动(对话/状态更新/上传)作为扩展 Activity 类,然后在 DAO 中直接使用 SQL/JPQL 查询,从一组用户中选择所有最新活动被返回,但担心可能会绕过缓存并继续访问数据库也会降低性能。

以前有人处理过这类问题吗?有人知道什么是好的方法吗?

谢谢!

【问题讨论】:

  • 虽然我从来没有实现过这样的东西,但我想 pubsubhubbub 解决方案可能会对你有所帮助:code.google.com/p/pubsubhubbub
  • 谢谢卢卡斯,我快速浏览了一下,但这看起来不太像我需要的 - 也许我没有很好地描述我的问题,但我将通过数据模型创建一个提要(在 Hibernate 中)并希望找到一种有效的方法来定期处理 Hibernate 对象以创建提要。

标签: java web-applications feed polling


【解决方案1】:

这是一个旧的,但这是我为此所做的:

  1. 应该出现在活动墙上的所有任务都扩展Activity(已经是这种情况)
  2. 创建了一个新的Notification 对象,Notification 有一个指向底层Activity 的链接和一个指向用户(被通知的用户)的链接。
  3. Activity 创建了一个 pre-persist 钩子,该钩子为要持久化的 Activity 创建了一个 Notification 对象 - 它为每个感兴趣的用户执行此操作(所有用户都关注正在持久化 Activity 的用户)

目前,Notifications 被持久化/检索到数据库 - 可能无法扩展到非常大的容量,但我认为该方法支持移动到基于队列的系统(例如专门为此设计的 LinkedIn's Kafka queue library目的)。由于它是针对每个用户的,它还提供了为重要通知设置已读/未读通知标志的选项。

【讨论】:

    猜你喜欢
    • 2011-04-08
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多