历史版本12 :缓存功能简介 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 描述编辑

对于大数据量报表,若每次直接从数据库取数,不仅增加数据库服务器的压力,也极大的影响了取数的速度从而降低报表的执行速度,为此 FineReport 提供了数据集缓存功能。

FineReport 可先将其数据集查询的结果缓存下来,对于缓存下来的数据,再次使用到相同数据集时,无需再次连接数据库重新查询数据,直接使用缓存下来的结果,即使用 FineReport 的数据集共享机制,达到资源复用,减少取数时间从而提高了报表的展现速度。


2. 缓存数据有效范围编辑

如果不同模板的某个同名数据集 SQL 查询语句和传入参数相同,则所有模板使用同一个数据集缓存。

如果不同模板的某个同名数据集 SQL 查询语句和传入参数都不同,则会生成多个不同的数据集缓存。

注:cpt 模板和 frm 表单都支持数据集缓存。


3. 数据集缓存方式编辑

数据集缓存分为缓存至内存和缓存至磁盘这两种方式。不同点在于数据集缓存数据的存放位置不同。

3.1 缓存至内存

1)设置方法:

数据集缓存默认缓存至内存,在数据库查询窗口下拉框选择所有记录都保存在内存中,如下图所示:

1.png

2)设置后的效果:

当执行数据查询时就会将查询所得数据缓存至内存中,下次执行此数据集数据查询时,会直接从内存缓存中取数。

3)优缺点:

空间资源有限,但效率很高,取数速度快。

4)使用场景:

一般使用频率高,且数据量不算太大的报表,可直接使用内存缓存。

3.2 缓存至磁盘

1)设置方法:

点击下拉框选择缓存至磁盘当记录数大于,并设置行数,如下图所示:

2.png

缓存至磁盘是将数据缓存到服务器的磁盘中,默认是在C:\Users\用户名\.FineReport100\cache(Windows 操作系统)下。

注:如启用了磁盘缓存,发现系统目录下没有 cache 文件夹,不要感到惊讶,虽然激活了磁盘缓存,但不是马上开始把数据写到磁盘中,而是会考虑系统的实际运行情况然后再进行处理。

2)设置后的效果:

记录数默认大于 0 行:表示从第 0 条数据开始,使用磁盘缓存。即只采用磁盘缓存,查询的数据全部缓存在磁盘中。

记录数大于如 1000 行:表示查询的数据前1000条是缓存到内存中,剩余全部缓存至磁盘。

3)优缺点:

空间资源又大又便宜,几乎没有限制,但效率低,取数速度往往很慢。

4)使用场景:

若是数据量很大的报表,如:几十万条记录,可使用缓存至磁盘,设置恰当的行数,避免全存在内存中,导致服务器 OutOfMemory 内存溢出。如行式引擎报表,可以将使用频率高的前 N 页数据缓存在内存,剩余数据缓存在磁盘中。

注:需要根据实际情况合理分配内存和磁盘,把那些使用频率最高的数据尽量放在内存中,从而提高在内存中的命中率。


4. 开启数据集缓存编辑

4.1 设置方法

在数据集的数据库查询界面勾选共享数据集,下拉框选择数据集缓存方式,如下图所示:

1.png

注:数据集缓存设置只对当前数据集有效,不同数据集需要分别设置。

4.2 数据集共享属性设置

我们可以对缓存下的结果进行一些设置。

在浏览器中输入http://localhost:8075/webroot/decision,进入 FR 平台,选择管理系统>系统管理>缓存,可以看到数据集共享属性如下图所示:

222

1)共享数据集最大个数:

缓存容器中最多数据集缓存个数,如果缓存的数据集超过设定的数目,则服务器会根据下面的缓存原则来选择缓存数据集的去留。

2)缓存原则

  • 最近使用:优先移除最久没有被访问的缓存

  • 最不常使用:优先移除被使用次数最少的缓存

  • 先进先出:优先移除最早进入的缓存

3)最大空闲时间:超过最大空闲时间仍然不被访问的数据集缓存,立即移除。

4)最大生存时间:超过最大生存时间,数据集缓存立即移除。