mondrian源码分析与说明 联系客服

发布时间 : 星期日 文章mondrian源码分析与说明更新完毕开始阅读bf3b867f2e3f5727a5e96245

mondrian源码分析

1. 概述........................................................................................................................................... 1

1.1. 若干概念 ....................................................................................................................... 1 1.2. 架构 ............................................................................................................................... 2 2. 静态类包分析 ........................................................................................................................... 3

2.1. 包解释 ........................................................................................................................... 3 2.2. Schema manger部分 .................................................................................................... 4 2.3. 包mondrian.calc ........................................................................................................... 4 2.4. 包mondrian.olap—接口............................................................................................... 5

2.4.1. mdx函数包 ....................................................................................................... 5 2.4.2. funCall ............................................................................................................... 5 2.4.3. Query类 ............................................................................................................ 6 2.5. 包mondrian.rolap—计算层 ......................................................................................... 6

2.5.1. 成员读取包MemberReader ............................................................................. 6 2.5.2. 单元格读取CellReader .................................................................................... 8 2.5.3. RolapResult类 ................................................................................................ 11 2.5.4. RolapEvaluator类 ........................................................................................... 12 2.5.5. 关于排序 ......................................................................................................... 12 2.6. 聚集层Star layer ........................................................................................................ 13

2.6.1. 概述 ................................................................................................................. 13 2.6.2. 聚合装载过程 ................................................................................................. 13 2.6.3. segment详解 .................................................................................................. 14 2.6.4. 缓存失效控制 ................................................................................................. 17

3. 交互管理层 ............................................................................................................................. 18

3.1. 初始化MondrianModel.............................................................................................. 18 3.2. 获取结果集 ................................................................................................................. 19 4. 修改点..................................................................................................................................... 22

4.1. mondrian角色参数化 ................................................................................................ 22 4.2. 缓存失效控制 ............................................................................................................. 22 4.3. connection创建参数优化 .......................................................................................... 23 4.4. 维度成员排序 ............................................................................................................. 23 4.5. 对mondrian bug的修正 ............................................................................................ 24 4.6. to-do List ..................................................................................................................... 24

1. 概述

1.1. 若干概念

成员(member):成员是代表维度中一次或多次数据出现的项。度量值也可以算作一个维度,

因此一个具体度量值项也可以作为一个成员。

元组(tuple):是向量,用于定义来自多维数据集的数据切片;它由来自一个或多个维度的单个成员的有序集合组成。元组用于标识来自多维数据集的特定多维数据块;由来自多维数据集中各个维度的一个成员组成的元组完全描述单元值。换言之,元组是一种成员向量。 例如:(时间.[下半年], 路线.非陆地.航空),由单个成员组成的元组也可括在圆括号内,但这不是必需的。

单元(cell):多维成员的交集创建单元,可以是单个单元或单元块。元组唯一标识多维数据集中的一部分;它不必指某个特定单元,也不必包括多维数据集中的所有维度。

集合(set):集合是零个、一个或多个元组的有序集合。集合最常用于在 MDX 查询中定义轴维度和切片器维度,并且同样可能只具有单个元组或可能在某些情况下为空。下面的示例显示具有两个元组的集合:{ (时间.[上半年], 路线.非陆地.航空), (时间.[下半年], 路线.非陆地.海路) }

1.2. 架构

mondrian总共包含四个层次:表示层,计算层,聚集层,存储层.。

表示层(presentation layer):指最终呈现在用户显示器上的,以及与用户之间的交互,有许多方法来展现多维数据,包括数据透视表,饼,柱,线状图.

计算层(dimensional layer):分析,验证,执行MDX查询. 一个mdx查询语句会有多个处理阶段。先是计算轴,然后是轴上的单元值。为效率起见,计算层批量将单元请求发送到聚集层。请求转换器允许程序操作存在的请求,而不是为每个请求从头构造mdx请求。元数据描述了计算模型和它怎么匹配到关系模型。

聚集层(star layer):一个聚集指内存中一组计算值(cell),这些值通过维列来限制.计算层发送单元请求,如果请求不在缓存中,或者不能通过旋转聚集导出的话,聚集层向存储层发送请求. 聚集层是一个数据缓冲层(cache),从数据库来的单元数据,聚合后提供给计算层。聚集层的主要作用是提高系统的性能。

存储层:提供聚集单元数据(cell)和维表的成员(member),这些层可以不在同一机子上,但是计算和聚集层必须在同一台机子上。有三种需要存储的数据:事实数据(事实表)、维度表和聚集数据(即聚合表)

架构图如下:

2. 静态类包分析

2.1. 包解释

mondrian.calc 提供编译好的表达式。

mondrian.gui 设计Mondrian schema的图形接口 mondrian.i18n 国际化和本地化工具

mondrian.mdx 为mdx表达式定义解析树

mondrian.olap 核心包,定义了连接和schema的元模型,用来执行查询 mondrian.olap4j 中间层,olap服务器的驱动,用来代替jolap的 mondrian.recorder 任务处理记录接口

mondrian.rolap olap包的数据访问层的实现

mondrian.spi 用户自定义扩展的服务端支持接口

mondrian.tui Mondrian文本用户接口 mondrian.udf 用户定义方法 mondrian.util Mondrian工具包

mondrian.web Mondrian的servlet和tag库 mondrian.xmla xml for analysis API的实现

2.2. Schema manger部分

Mondrian.rolap.RolapSchema类是mondrian schema的核心类,该类在在建立RolapConnection时被建立,但是有个schema Pool维护着schema的缓存,参见RolapSchema.Pool内部类。

在RolapSchema对象生成之前,首先有个原始的MondrianDef$Schema对象,该对象相当于mondrian schema xml文件的简单对应,由xml解析器直接生成。具体来说首先由xml文件解析成dom对象,然后再生成更加结构化的MondrianDef$Schema,最后再load成更加高级的RolapSchema对象,具体参见RolapSchema.load(String catalogUrl,String catalogStr);

以MondrianDef$Schema或RolapSchema对象为根,都还会有一系列的内部类去对应于mondrian schema下的子元素。

如果一个Hierarchy的hasAll为true,则会有一个all member,对应着也需要一个虚拟的all level,位于该Hierarchy的levels[0]位置。

2.3. 包mondrian.calc

Calc是所有可计算表达式的基接口。在mondrian中关于表达式有如下两个概念: ? The logical language of parsed MDX fragments (Exp). ? The phyiscal language of compiled expressions (Calc).

两种语言可以允许我们将逻辑语言(即mdx语言) 和物理语言(how it is to be evaluated) 分开. 物理语言对类型的要求更加严格, and certain constructs which are implicit in the logical language (such as the addition of calls to the .CurrentMember function) are made explicit in the physical language。

Calc接口针对各种类型有许多子接口:其中IntegerCalc, BooleanCalc, DoubleCalc, StringCalc是数值型的,MemberCalc, LevelCalc, HierarchyCalc, DimensionCalc则用于olap模型中的元素。