数据集缓存

编辑
  • 文档创建者:文档助手1
  • 浏览次数:16184次
  • 编辑次数:12次
  • 最近更新:Leo.Tsai 于 2019-08-08
  • 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)最大生存时间:超过最大生存时间,数据集缓存立即移除。




    附件列表


    主题: 性能优化
    标签: 暂无标签
    如果您认为本文档还有待完善,请编辑

    文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
    关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
    若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

    此页面有帮助吗?只是浏览 [ 去社区提问 ]