Posted on 2010-03-30 11:55
FineReport——报表技术领跑者 阅读(152)
评论(4) 编辑 收藏 所属分类:
Java报表技术知识
静态并发控制
应用服务器的承载能力是有限的,当并发的用户数超过其承载能力,服务器肯定要出错。因此,控制并发数的能力是必须的。
最常用的办法是静态并发控制,FineReport就提供了这样的办法,其基本思路是:在服务器端预先配置允许并发的最大线程数,当请求线程超出了这个数,就采用一种策略保证当前的线程数不超过最大线程数,同时保证等待的线程能进来计算,客户端不会出现很大的延迟。
动态并发控制
当服务器对性能要求比较高的时候,光有静态并发控制是不够的。举例来说,服务器限定了允许最大20个线程访问,平均每个线程占用内存20m,总计服务器可以接受400M内存的耗用。可是,当正好每个线程访问的报表数据量都非常小时,也许20个线程加起来耗用的内存不足100M,此时多余的300M内存就浪费了;如果正好20个线程中某几个线程访问的报表数据量非常大,有可能一个线程占用的内存就超过100M,此时20个线程加起来占用内存可能远远超过400M,直接导致服务器内存溢出。同样的道理,对于CPU占用也是适用的。
因此,FineReport报表在提供简单静态并发数控制的基础上,为了合理的资源分配,并保证服务器的安全和流畅性,同时引入了动态并发控制的概念。
根据服务器硬件和Java虚拟机的配置,在服务器运算的过程中,动态的判断当前并发访问的所占用的资源是否达到预设值,如果已经达到预设值,则控制新进访问线程。
这种动态并发控制,和简单的并发数控制结合使用,更加灵活,更加合理。
缓存报表执行结果
在并发访问的机制下,经常出现同一报表被不同用户连续多次重复访问,此时如果能够把第一次算出的报表缓存下来,再次访问时直接从缓存中读取,则可以大大减少服务器的运算消耗。并且因为节省了报表的执行过程,可以大大加快访问速度。
对于带有参数的报表,当用户采用相同的参数进行重复访问时,也可以利用缓存,减少重复的计算。对于带有不同参数的报表会缓存不同的报表执行结果。因此如果第二次这第一次执行的参数不一样,报表就会重新计算,并缓存该报表和参数对应的结果报表。因此,对于有参数的报表来说,缓存时还必须识别参数的值。
打开菜单:服务器|缓存设置,设置报表直接结果缓存参数,如下图所示