我有一些关于在网站上管理实时供稿/投票的抽象问题。
我正在创建一个Web应用程序(基于Java / Spring / Hibernate构建),在用户的主页上,我想要一个来自团队所有成员的最新活动的实时源,我正在努力找到最好的在服务器端处理此查询的方法。
蛮力方式是加载当前用户的队友列表,然后遍历他的每个队友,加载他们最新的对话/文件上传/等,然后将所有这些活动合并到一个列表中按时间戳排序并返回(为了举例说明我们只返回前10个最新的活动)。
然而,这似乎非常不具备性能,特别是因为此操作需要定期进行(取决于轮询间隔)。
我还考虑过将所有潜在的活动(对话/状态更新/上传)扩展为一个Activity类,然后在DAO中直接进行SQL / JPQL查询,从而选择一组用户中的所有最新活动返回,但担心可能绕过缓存并继续访问数据库也会降低性能。
以前有人处理过这类问题吗?任何人都知道什么是好方法?
谢谢!
答案 0 :(得分:0)
现在这是一个旧的,但这就是我为此所做的:
Activity
(已经是这种情况)Notification
对象,Notification
有一个指向基础Activity
的链接和一个指向用户的链接(被通知的人)。Activity
创建了一个预先持久化的钩子,为持久存储的Notification
创建了一个Activity
对象 - 它为每个感兴趣的用户(跟随用户的所有用户)执行此操作坚持Activity
)目前,Notifications
被持久化/检索到数据库 - 可能无法扩展到非常高的数量,但我认为这种方法支持迁移到基于队列的系统(例如LinkedIn's Kafka queue library专为此目的而设计)。由于它是每个用户,它还提供了对重要通知具有读/未通知标记的选项。