整理/管理数据以在Web应用程序中填充“实时活动源”

时间:2011-05-11 10:36:25

标签: java web-applications feeds polling

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

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

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

然而,这似乎非常不具备性能,特别是因为此操作需要定期进行(取决于轮询间隔)。

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

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

谢谢!

1 个答案:

答案 0 :(得分:0)

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

  1. 应该在活动墙上显示的所有任务都会延伸Activity(已经是这种情况)
  2. 创建了一个新的Notification对象,Notification有一个指向基础Activity的链接和一个指向用户的链接(被通知的人)。
  3. Activity创建了一个预先持久化的钩子,为持久存储的Notification创建了一个Activity对象 - 它为每个感兴趣的用户(跟随用户的所有用户)执行此操作坚持Activity
  4. 目前,Notifications被持久化/检索到数据库 - 可能无法扩展到非常高的数量,但我认为这种方法支持迁移到基于队列的系统(例如LinkedIn's Kafka queue library专为此目的而设计)。由于它是每个用户,它还提供了对重要通知具有读/未通知标记的选项。