Posted on 2010-02-23 11:23
FineReport——报表技术领跑者 阅读(494)
评论(0) 编辑 收藏 所属分类:
Java报表技术知识
通常情况下,我们首先需要对sql进行优化以保证数据集中不包含不必要的数据,比如上一节"SQL优化数据集"所讲到的尽量不要使用"select * from"和"尽量在sql里面过滤"。通过sql优化,我们往往能够得到最精简的数据集,满足大部分报表的需求。
但是,对于一些大数据量的报表来说,仅仅优化SQL是不足够的,对于这种报表,因为他所要展现的数据量本身就很大,所以即使sql精简优化后,仍然有很多条记录,有时候如果不缓存这些数据,那么频繁的数据库连接和sql查询是数据库所承受不了的,并且取数速度的降低会极大的降低报表执行速度。因此,FineReport提供可选择的方案让你来缓存这些数据,缓存分为内存缓存,和磁盘缓存。顾名思义,内存缓存就是把数据缓存到RAM中,从而再次取数时就不需要从数据库取,而是直接从内存里面拿。内存缓存是效率很高,取数速度快,但是重要的缺点是占用内存空间资源,如果把大量的记录,比如几十万条都缓存到内存中去,就有可能造成OutOfMemory抛错。因此在数据量超过内存缓存限制的情况下,我们采用空间资源更大更便宜的硬盘缓存,但是硬盘缓存会造成取数效率下降,增长时间。因此,在大数据量下,合理平衡分配内存缓存和磁盘缓存往往对性能有着至关重要的影响。一个重要的原则是,内存缓存空间资源有限,但效率很快;硬盘缓存空间资源几乎没有限制,但效率底,往往很慢。
下面是设置数据集缓存的界面: