java - 如何追踪用户观看习惯

标签 java jms java-ee-7

我需要为每个用户访问的几个页面保留一个计数器。

假设我需要保留第 1 页和第 2 页的计数器。用户 A 访问第 1 页 10 次,因此其计数器应为 10,并且 userB 访问页面 1 5 次,访问页面 2 7 次,因此用户页面 1 的计数器应为 5,页面 2 的计数器应为 7。

CounterTable ( shows number of times that each page has been visited by each user)

 Username Page Counter
 A         1    10
 B         1    5
 B         2    7

为了实现这一目标,我在数据库中有一个表,用于保存用户名、页码和计数器,每次用户访问页面时,数据库中的相关计数器都会增加。

我的问题是,如果我增加所需的计数器,则每次我想要检索页面(1 或 2)时,用户都需要等待应用程序在访问页面之前更新所需的记录。

为了避免这种情况,我应该使用 JMS 发送异步请求来增加数据库中的计数器吗?另一种选择是使用 ajax 向服务器发送异步请求。

有没有更有效的方法?如果不是哪个更有效?

最佳答案

假设计数器主要用于审计目的而不是显示目的,另一个选择可能是在本地写入访问日志。我会推荐一种标准格式,例如 NCSA 通用日志格式,它定义了 URL、方法和用户等字段,但当然还有许多其他选项可用。您甚至可能已经将此类日志记录内置到您的 JavaEE 容器或库中,只需将其打开即可。

然后,您可以使用 Splunk 或 LogStash 等工具或其他工具在请求流之外获取和聚合这些数据,并从所有服务器收集这些数据。通过保留这些原始访问数据,您还可以进行进一步的分析,不仅限于特定用户查看特定页面的次数,还可以回答诸如特定用户在一天/一周中的哪些时间处于 Activity 状态等问题,您的服务器似乎比其他服务器收到更多请求?特定页面在特定时间是否流行?还有更多。

关于java - 如何追踪用户观看习惯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23260344/

相关文章:

java - 通过自己的类创建通用数组

java - 一个Java包中可以放多少个类?

java - Spring - 属性 'name' 不允许出现在元素 'constructor-arg' 中

java - 无法将消息发送到 weblogic 队列

java - 如何在 Spring boot 中动态地向 JMSListener Annotation 添加不同的目的地?

java - ChronicleMap没有手动关闭,从Cleaner中清理

java - 是否可以在 .war 中写入图像文件(任何其他文件)?

java - 从终端扫描输入

java - Glassfish/JMS MDB 事务中止

jakarta-ee - 如何确定 JBoss AS 7.1 的 Java EE 版本