我需要为每个用户访问的几个页面保留一个计数器。
假设我需要保留第 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/