利用Servlet2.3规范中的Filter特性来实现对网站中页面的访问统计????

03-10-16 ruby
性能如何?
请有经验的,特别是在项目中实施过此项技术的谈一下。
或者还有什么比较好的用来页面级的访问统计技术?

ruby
2003-10-16 09:35
会不会对web app造成比较大的负担?

无道
2003-10-16 17:34
放心用吧,在不改变原Servlet/JSP的情况下就可实现页面计数,一点性能上的开销算得了什么?何况Servlet及其Filter在第一次使用后通常驻留在内存,后继访问的代价就小得多了,可不计。

ruby
2003-10-16 21:15
在实现了filter的类里,为了记下访问的class名还有其它相应的访问量,比如每访问一次a.class,我就要将与a.class相关的计数器加一,将相应的访问时间记录下来,应该是记录在数据库吧,这样的对class的每一次访问我都要去操作一下数据库,这个性能的开销应该还是比较大的吧

crogers
2003-10-17 09:01
呵呵,iceant在某版那个思过又思过的文章,很适合楼主看

我可以告诉你结论,如果出现了瓶颈,肯定不是filter造成的,一般都是因为你数据库效率不够高造成的
如果你真的非常担心,可以把要保存的数据压进一个集合类型
同时有一个线程去把数据进数据库,也就是异步操作的了
不过我觉得象是杞人忧天,呵呵
我这里有个系统,全部访问后台的xml数据都进数据库,统计了昨天上午10点的一个小时,14000条数据,没有看到任何瓶颈,什么东西都闲得很...

无道
2003-10-17 11:38
crogers 说得对,像这种精确度要求不高的访问计数,完全可以先保存到内存,再定期保存到持久层

AreYouOK?
2003-10-17 11:57
我们现在也做了一个这样的东西。
用Filter对Servlet和JSP做过滤,统计每个页面的访问次数,最小相应时间、最大响应时间和平均响应时间,数据就在内存中操作,不访问数据库。通过一个jsp察看数据,有一个清除按钮用来清除数据。

每次更新数据的时候必须同步,由于很多客户一起访问的时候,一次只能有一个客户进入该临界区,所以我认为如果访问量特别大的情况下性能的瓶颈在同步的开销上。好在我们的系统并发访问量并不大,但是数据查询量很大。

目前还没有把它放到生产环境中,不过快了

ruby
2003-10-17 12:30
我要实现的页面访问统计系统并没有实时性要求,比如是在每周,每月,或者中间的某一天,将某一时间段内的页面访问记录统计成报表数据,能够分析出某些页面在某些时段的访问情况、峰值等等,产生的数据可能会作为业务调整的依据,所以并没有实时监控的要求。假如要产生实时监控数据的话,在B/S模式中有可行的实现方案么?因为HTTP是请求回应的,服务端不会主动发请求给客户端(用applet?)。
另外,不太明白你讲的“一次只能有一个客户进入该临界区”,是什么意思?临界区在这儿是指什么?



AreYouOK?
2003-10-17 12:56
我的数据是用来分析性能的,比如Filter过滤所有的JSP,那么每个对JSP的请求都会在Filter中处理,每次请求后都要更新该页面的点击次数、响应时间等数据,在多用户的情况下必须保证一个线程做更新计算、更新操作的过程中不能有其他线程也来更新,不然数据会出现混乱,因此需要用synchronized关键字同步。同步的代码块同时只能有一个线程进入,多用户同时请求的话就要排队,好在我这里并发不多,而且计算也很快。

按你的想法可能需要将流水记入数据库了,粒度越细,性能越糟
你可以定时记录,比如一个小时,其他时候在内存里面计算