知识库 : 多维引擎缓存的使用说明

Edit Document

 

 

 

 

 

 

 

 

 

多维引擎缓存的使用说明

 

 

 

作者 霍琦


目录

1.               多维缓存的意义

1.1.               多维分析

1.2.               意义

2.               参数说明

2.1.               刷新时间

2.2.               替换策略

2.3.               内存占比阈值

2.4.               保存参数

2.5.               强制卸载缓存

3.               缓存实体分类

3.1.               多维定义缓存

3.2.               维度成员缓存

3.3.               SQL 缓存

3.4.               聚合对象缓存

 

1.     多维缓存的意义

1.1.     多维分析

从多个角度对事实发生的数据做分析,称为多维分析。其中涉及到的模型包括立方体、维度、指标等,从报表查询开始的执行流程基本是这样的,实施人员需要对业务报表有清晰的理解,也要掌握生产库中的业务数据结构,对生产数据进行 ETL ,生成可用于分析的数据到数据仓库中,建立多维分析模型,将模型置于报表中的相应位置,做多维分析。

1.2.     意义

根据多维分析的定义,可以看到一次多维分析中涉及到的实体包括,立方体维度等分析模型,指标聚合值等数据,由于要和数据库打交道,还要包括数据库查询模型等。对于业务比较复杂的分析,一次分析涉及到的实体数量会很多,执行时间也会随着业务的复杂程度而变化。而在多维分析的应用场景中,数据仓库的数据以及分析模型的变化频率很低,很多情况基本都是以星期、月这样的时间单位在变化。此时缓存的意义就体现出来,对于变化不是很频繁的数据、模型,分析引擎会将其缓存在服务器上,以便于多次查询分析中使用,这样做可以明显提升分析效率,提高用户对产品的体验性,并且可以更充分地利用服务器资源。

2.     参数说明

首先来介绍一下缓存管理中使用到的几个参数。

2.1.     刷新时间

刷新时间指缓存池的刷新时间,即缓存的失效时间。这个参数以秒为单位。对于基本不会变的缓存实体,可以把时间设置的相对长一些。

2.2.     替换策略

缓存中的数据不是全部都有意义的,当缓存实体占满缓存池,并且又有新的实体需要缓存时,应该对缓存池中的一些对象实施卸载策略,也称为缓存替换策略。替换策略分为两种,最近最少使用和先进先出。

最近最少使用:当需要缓存池需要卸载对象时,选择那些最近使用频率最低的缓存实体,将其移出缓存池。

先进先出:缓存池中的实体按照排队方式进入到缓存池,当缓存池需要卸载对象时,选择最先进入缓存池,排在队伍头的缓存实体,将其移出缓存池。

2.3.     内存占比阈值

 

内存占比阈值,指当此应用程序(不只是分析引擎)使用的内存占分配给 JAVA 虚拟机的最大内存的比例达到一定程度后,会启动缓存卸载程序,直到占比满足设置的参数。比如,当内存占比阈值设置为 60% 时,如果使用内存占 JAVA 虚拟机的最大内存的比例达到 60% 时,会卸载缓存池中的某些缓存实体。

此处需要说明的是,由于虚拟机是动态地分配内存及垃圾回收,所以设置的比例参数不一定能准确地反映当前内存使用情况,只是一个大概的比例设置。

 

 

2.4.     保存参数

修改缓存参数后,点击【保存】,使缓存设置更新。

2.5.     强制卸载缓存

因为某些原因,希望缓存立刻失效,可以点击【强制卸载】,立刻卸除缓存池中的所有缓存实体。

 

 

 

 

 

 

 

 

 

 

3.     缓存实体分类

如下图所示,多维分析涉及到的缓存实体包括:多维定义缓存,维度成员缓存、 SQL 缓存、聚合对象缓存,接下来会一一介绍。

              各个缓存实体之间是有父子关系的,即最上层的实体被卸载后,属于其的子实体也会被卸载出缓存池,具体的父子关系会在每个实体中说明。

 

 

3.1.     多维定义缓存

多维定义指对当前分析涉及到的多维模型的统称,该实体属于所有缓存实体中的父类,如果多维定义缓存被卸除,属于其的维度成员、 SQL 对象、聚合对象等缓存实体也会被卸除。

多维定义缓存可以不启用,设置位置在分析建模工具中所属的立方体模型,如下:

\\20.2.52.36\share\聚合对象缓存.bmp

在分析建模工具中修改多维模型,或者在缓存管理中强制卸载,会卸除多维定义缓存。

3.2.     维度成员缓存

一次查询分析涉及到的立方体可能包含多个维度,维度中又包含多个成员,在报表展现、计算聚合值等过程中都会加载维度成员,维度成员缓存就是避免多次加载。

维度成员缓存一定会启用,多维定义缓存被卸除后,或者在缓存管理中强制卸载,会卸除维度成员缓存。

3.3.     SQL 缓存

事实表或维表有可能是某一张具体的物理表,也有可能是语义模型,而语义模型最终在取数时表现的是一段 SQL 语句,对于解析出的元定义 SQL 模型,分析引擎会将它缓存起来,以便于重用。

因为 SQL 对应的是事实表或维表的元定义,所以在元定义中可以设置 SQL 缓存不启用。

 

如果 SQL 缓存被启用,多维定义缓存被卸除后,或者在缓存管理中强制卸载,会卸除 SQL 缓存。

3.4.     聚合对象缓存

聚合对象指的是某个指标对于某些维度成员的聚合值,比如, {[ 门店 ].[ 北京 ],[ 时间 ].[2015 ],[Measures].[ 销售量 ]} ,北京的门店在 2015 年的销售量就是一个聚合值,也是聚合对象。聚合值有可能在几次查询分析中被多次使用,所以需要缓存。

聚合对象缓存可以不启用,设置位置在分析建模工具中所属的立方体模型,如下。

\\20.2.52.36\share\聚合对象缓存.bmp

如果聚合对象缓存被启用,多维定义缓存被卸除后,或者在缓存管理中强制卸载,会卸除聚合对象缓存。

 

Attachments:

知识库-多维引擎缓存的使用说明.docx (application/vnd.openxmlformats-officedocument.wordprocessingml.document)