1. 概述
对于大数据量报表,若每次直接从数据库取数,不仅增加数据库服务器的压力,也极大的影响了取数的速度从而降低报表的执行速度,为此 FineReport 提供了数据集缓存功能。
FineReport 可先将其数据集查询的结果缓存下来,对于缓存下来的数据,再次使用到相同数据集时,无需再次连接数据库重新查询数据,直接使用缓存下来的结果,即使用 FineReport 的数据集共享机制,达到资源复用,减少取数时间从而提高了报表的展现速度。
2. 缓存数据有效范围
如果不同模板的某个同名数据集 SQL 查询语句和传入参数相同,则所有模板使用同一个数据集缓存。
如果不同模板的某个同名数据集 SQL 查询语句和传入参数都不同,则会生成多个不同的数据集缓存。
注:CPT 模板和 FRM 表单都支持数据集缓存。
3. 数据集缓存方式
数据集缓存分为缓存至内存和缓存至磁盘这两种方式。不同点在于被缓存数据的存放位置不同。
3.1 缓存至内存
所有记录都保存在内存中,如下图所示:
默认缓存至内存,在 窗口下拉框选择当执行数据查询时就会将查询所得数据缓存至内存中,下次执行此数据集数据查询时,会直接从内存缓存中取数。
空间资源有限,但效率很高,取数速度快。
4)使用场景:
一般使用频率高,且数据量不算太大的报表,可直接使用内存缓存。
3.2 缓存至磁盘
点击下拉框选择缓存至磁盘当记录数大于,并设置行数,如下图所示:
缓存至磁盘是将数据缓存到服务器的磁盘中,默认是在C:\Users\用户名\.FineReport100\cache(Windows 操作系统)下。
注:如启用了磁盘缓存,发现系统目录下没有 cache 文件夹,不要感到惊讶,虽然激活了磁盘缓存,但不是马上开始把数据写到磁盘中,而是会考虑系统的实际运行情况然后再进行处理。
记录数默认大于 0 行:表示从第 0 条数据开始,使用磁盘缓存。即只采用磁盘缓存,查询的数据全部缓存在磁盘中。
记录数大于如 1000 行:表示查询的数据前 1000 条是缓存到内存中,剩余全部缓存至磁盘。
空间资源又大又便宜,几乎没有限制,但效率低,取数速度往往很慢。
4)使用场景:
若是数据量很大的报表,如:几十万条记录,可使用缓存至磁盘,设置恰当的行数,避免全存在内存中,导致服务器 OutOfMemory 内存溢出。如行式引擎报表,可以将使用频率高的前 N 页数据缓存在内存,剩余数据缓存在磁盘中。
注:需要根据实际情况合理分配内存和磁盘,把那些使用频率最高的数据尽量放在内存中,从而提高在内存中的命中率。
4. 开启数据集缓存
4.1 设置方法
在数据集的数据库查询界面勾选共享数据集,下拉框选择数据集缓存方式,如下图所示:
注:数据集缓存设置只对当前数据集有效,不同数据集需要分别设置。
4.2 数据集共享属性设置
我们可以对缓存下的结果进行一些设置。
在浏览器中输入http://localhost:8075/webroot/decision,进入 FineReport 平台,选择管理系统>系统管理>缓存,可以看到数据集共享属性如下图所示:
1)共享数据集最大个数:
缓存容器中最多数据集缓存个数,如果缓存的数据集超过设定的数目,则服务器会根据下面的缓存原则来选择缓存数据集的去留。
2)缓存原则
最近使用:优先移除最久没有被访问的缓存。
最不常使用:优先移除被使用次数最少的缓存。
先进先出:优先移除最早进入的缓存。
3)最大空闲时间:超过最大空闲时间仍然不被访问的数据集缓存,立即移除。
4)最大生存时间:超过最大生存时间,数据集缓存立即移除。
注:设置「最大空闲时间」和「最大生存时间」后,需要重启报表工程方可生效。
4.3 抽数缓存
详情链接:抽数缓存使用方法