历史版本41 :抽数缓存插件 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

1.1 版本

报表服务器版本

JAR 包版本

 插件版本 

功能变更
10.02020-05-04V1.3.1-
10.02020-12-02V1.6.0删除「缓存模板提醒」功能
V1.7.1新增「联动缓存」功能,详见缓存模板管理

1.2 应用场景

对于报表执行速度而言,数据源取数性能是存在较大影响的一环。

如果对于数据的实时性要求不高能接受半小时左右的更新频率,使用缓存是一种既能降低服务器和数据库压力,又能提升报表执行速度的方案。

1.3 功能简介

注:抽数缓存只对「数据库查询」类型的数据集生效。

「抽数缓存」插件通过将数据集查询的结果缓存,再次进行相同查询时,无需再次连接数据库重新查询数据,直接使用缓存,达到资源复用,减少取数时间从而提高了报表的展现速度。同时通过定时抽取更新缓存数据,提升数据的准确性。

2. 插件介绍编辑

2.1 安装插件

插件下载:抽数缓存

设计器插件安装方法请参见: 设计器插件管理

服务器安装插件方法请参见: 服务器插件管理

2.2 对比共享数据集的优势

抽数缓存
共享数据集
支持精准推荐缓存适用模板,批量一键开启缓存需要每个数据集单独开启,自行识别适合的模板
支持资源占用自定义配置,限制最大资源占用,断绝对其他系统业务的影响仅支持设置缓存个数,占用内存磁盘等不可控,可能影响业务使用
支持实时监控缓存资源占用及访问情况不支持

支持用户工具栏显示数据更新时间并可手动获取最新数据

支持管理员手动停止缓存更新或立即更新最新数据

不支持,需要等到超时自动失效

支持定时更新,确保缓存始终延续并定期获取新数据不支持,超时失效后访问重新生成
支持与报表自身的填报功能联动,填报后自动失效填报相关的缓存不支持,发生填报后缓存相关数据依旧不变,可能出现数据不一致的问题
不常用或占用资源较多的缓存,将自动限制缓存或直接停止自动更新,检测到缓存活跃将再次进入自动更新缓存状态仅支持最近使用最不常使用先进先出三种简单策略

2.3 产品框架

插件采用模块化设计,具有良好的层级结构和解耦。产品内置了灵活的熔断限流调度机制,不会对数据库造成任何压力。

本节主要为大家介绍其中的主要模块和特点:

模块
特点
存储容器

默认最大内存占用为JVM heap的1/4,超出后自动踢出

单个缓存数据量不能超过500000(行*列,可通过配置修改)

调度器-缓存存储以后,调度器会根据每个缓存创建的策略,执行更新/失效/终止的调度。
最大空闲时间

当缓存创建后72h内无任何访问,将会被终止踢出。

如果采用按间隔更新,需要至少命中一次后,缓存才会被自动更新。

更新缓存

调度器默认提供了两种更新策略设置:

1)按固定间隔更新:如果设置30分钟,那么缓存将在从存储开始后的第30分钟自动更新

2)按CRON表达式更新:CRON表达式比较灵活的设置需要更新的时间点,当到达预设时间点也会自动更新。

更新缓存时,会根据当前缓存对应记录的sql,重新请求数据库得到结果集,并替换当前的缓存数据,此过程不会阻塞正常取数业务。

缓存个数限制总体缓存个数不能无限制的增长,单个模板的缓存也是这样。

调度器提供了两种踢出规则,依次进行检查:

1)单个模板缓存不能超过1000个(可通过配置修改),超出后踢出

2)总缓存数量不能超过10000个(可通过配置修改),超出后踢出

更新高负载

调度器目前设计了一个调度线程池用来调度缓存的行为(更新、失效、终止三种行为):

1)更新线程池线程个数是15(可通过配置修改),最大有15个线程同时以JDBC方式访问数据库。

2)监控更新操作任务的创建和完成吞吐量,和二者的比率,防止当由于数据库或者服务器的响应变慢时抽数缓存雪上加霜。

3)清除终止所有缓存后,正常的报表计算取数逻辑不受影响,按正常取数执行。

2.4 抽数缓存配置项

缓存数据量超出限制后,由于熔断限流调度机制,缓存被踢出,可能会出现无法缓存、模板加载慢等情况。

用户可根据自身需求,通过修改工程 fine_conf_entity 表中抽数缓存的相关配置项来调整缓存限制。如下表所示:

注1:「抽数缓存插件」版本需在 V1.4 以上。

注2:修改 fine_conf_entity 表中配置项的方法请参考:填报修改fine_conf_entity 。

        如果 fine_conf_entity 表中不存在以下配置项,在填报页面中新增记录,输入参数和相应参数值即可。

配置项
含义
修改规则
ESDEngineConfig.dataModelMaxSize

允许缓存的数据集最大数据量(行*列)

参数值需为长整型

默认值为 500000

ESDEngineConfig.maxSingleTemplateCacheEntries

单个模板最大允许生成的缓存数量

参数值需为正整型

默认值为 1000

ESDEngineConfig.maxCacheEntries

最大允许生成的缓存数量

参数值需为正整型

默认值为 10000

ESDEngineConfig.schedulePoolSize调度器执行缓存更新/缓存获取的线程池大小

参数值需为正整型

2.5 不支持的功能

1)不支持服务器数据集缓存。

2)不支持插件类型数据库。

2)不支持部分 sql 语句结构。具体可见下表:

不支持场景示例
参数不在 where 最外层,比如在子查询中SELECT * FROM S产品 where 产品ID in (SELECT 产品ID FROM S产品明细 where 产品名称="${mc}")
参数在数据库公式内SELECT * FROM S产品 where 产品ID = fanruan("${id}")
参数在 group by 或者 order by 语句中SELECT * FROM S产品 order by "${id}"
存在 if 函数,且结果分支大于 1(空分支不算)SELECT * FROM S产品 where 1=1  ${if(len(id) == 0,"and 产品ID=1","and 产品ID = '" + id + "'")} 
where 条件中包含字段与操作符相同的条件SELECT * FROM S产品 where 产品ID >1 and 产品ID >2
存在 sum 等计算函数SELECT sum(单价) FROM S产品 where 产品ID < 5

3. 插件使用编辑

「抽数缓存」插件安装后在平台中增加「管理系统>抽数缓存」目录,当管理员进入数据决策系统,点击「管理系统>抽数缓存」,界面如下图所示:

3.1 缓存模板管理

具体请参见:缓存模板管理

3.2 缓存配置

缓存配置页面中,可以对服务器的缓存进行设置,如下图所示:


各设置项介绍如下表所示:

注:除「监听数据变更」和「参数预测」外,「联动缓存」受剩余设置项控制;全局缓存受所有设置项控制。

设置项说明
开启缓存

针对设置缓存的模板,开启后将数据集查询的结果缓存

显示缓存提示

用于设置是否在模板预览的工具栏处显示缓存提示(无工具栏则不显示),包括手动更新数据按钮和缓存生成时间,点击更新数据后可在预览时手动更新用到的缓存,用于用户在觉得数据不准确时立即进行更新,如下图所示:

image.png

参数预测开启后,将提前预测模板的参数使用情况并缓存,进而优化加载性能
监听数据变更

监听数据库数据变更,减少额外更新和失效。

目前支持Oracle(11g及以上), SqlServer(2008及以上), MySQL(5.5及以上)

缓存内存空间限制

用于限制缓存占用服务器内存空间的最大值

注:「联动缓存」和「全局缓存」共享该内存空间大小。

缓存更新规则

简单重复执行:

1625714492452117.png

按照设定频率进行更新,支持开启「缓存规则自动优化」,开启后将在合理范围内动态调整缓存更新间隔,避免出现大量缓存同时更新。

按表达式设置: 

1625714525969363.png

可输入 CRON 表达式(例如0 0 12 * * ?表示每天中午 12:00 )

注:由于缓存主要用于提升取数性能,缓存较大数据量会造成服务器资源紧张,因此目前限制最大缓存数据量为 50W(行*列)。

3.3 运行监控

在抽数缓存插件的使用过程中,如对缓存的使用状况有了解诉求,或想手动处理部分异常缓存时,可进入「管理系统>抽数缓存」目录的「运行监控」

详细说明请参见:缓存运行监控

3.4 数据集单独缓存设置

系统中可能会存在一些模板的数据更新时间与其他大部分模板存在差异,不适合使用统一的设置进行抽数缓存,此时可以对相应数据集进行单独缓存设置。

「抽数缓存」插件安装后,在数据集编辑面板中,将替代原本共享数据集显示新的缓存设置。

1)采用服务器设置时,将使用服务器默认的缓存策略,可以看到对应的缓存策略及缓存是否默认开启,但不允许修改。如下图所示:

10.png

2)为该数据集单独设置时,允许单独设置此数据集是否使用缓存以及策略配置。如下图所示:

12.png

点击「策略配置」后,可自定义缓存策略配置。如下图所示:

1625725346771395.png

3)对于存在较多数据集的模板,一个个修改缓存设置较花时间,可以通过数据集工具栏的按钮实现快速开启/关闭。如下图所示:

1603951292523305.png

点击1.png按钮将批量修改当前模板的数据集为单独设置,并开启缓存。

点击2.png按钮将批量修改当前模板的数据集为单独设置,并关闭缓存。

4. 示例场景编辑

大屏/驾驶舱场景往往需要对多个指标同时进行分析,可能一个模板内存在大量的 SQL ,就算每个 SQL 的耗时不高,但十几个甚至更多指标的 SQL 耗时进行累加,就会导致整个页面需要较长的时间才能加载结束。

如果这些 SQL 较为复杂,整体大屏/驾驶舱的预览将耗时更久。而这类页面往往还是领导、管理层常常使用的,对性能要求会更加严格。

并行取数是一个优化办法,但由于取数先后关系、线程限制等因素的影响,只能优化一部分取数性能。可以直接将大屏/驾驶舱的对应模板开启抽数缓存,将模板内所有取数都缓存起来,保证大屏/驾驶舱的加载速度。如下图所示:

160016id1d6dlrm9de4nk3.gif

5. 注意事项编辑

1)抽数缓存会受到「模板限制」功能中的「单数据集行数限制」和「sql执行时长限制」影响,如果缓存失败可以检查该两项设置,或直接关闭测试。如下图所示:

10.png

2)不支持在菜单栏「模板>模板数据集」中对数据集进行抽数缓存策略配置,相关的设置项会灰化,呈不可设置状态。