首页 > 代码库 > Mondrian 架构

Mondrian 架构

Mondrian的OLAP系统由4层组成,参见下图。从终端用户到数据中心内核,四层架构分别是:展现层(presentation layer)、维度层(dimensional layer)、星层(star layer)和存储层。

展现层确定了终端用户最终能够通过系统在显示器上看见什么内容,并提供了用户与系统进行交互的手段和方式。这里有多种方法展示多维数据,包括枢纽表(pivot tables)、饼图,线性图和柱状图等, 和一些高级的图形展示工具,如可交互的地图、动态图形等。展示部分的程序可以通过java 的Swing或者JSP进行实现,而图表可以被返回为JEPG或者GIF格式的文件,或者通过XML进行封装传输。用户通过展示层询问系统要展示什么东西,OLAP服务回应该询问。


第二层是维度层。维度层按阶段确认和执行了MDX查询请求。一个查询请求可以看成由多个阶段执行完成。维度轴线首先被计算,然后计算该维度轴线上的单个元素值。为了提高计算效率,维度层将元素(cell)请求以批量的方式发送给了聚合层(aggregation layer)。同时元数据描述了该维度模型和如何将维度模型映射为关系模型的方法。


第三层是星层,它负责维护一个聚合体(一个或多个cubes)的缓存,即一个聚合代表了由维度信息表征的内存中的元素(cell)的一个集合第二层的维度层传送了对指定元素的请求给星层,如果所需要查询的元素不在该缓存中,或者正在执行对聚合的滚卷操作,聚合管理器将发送一个数据请求给存储层,从而装载数据到内存中。


存储层为一个RDBMS。它负责提供被聚合的元素数据和维度表的成员。Mondrian目前主要持RDBMS作为数据源,不支持直接的多维数据库。


以上四层可以同时部署到一台机器上,也可以进行分布式部署到多台机器上。但是第二层和第三层必须部署到一台计算机上,其组成了Mondrian服务。存储层可以部署到其它的机器上并通过远程JDBC连接进行访问。在一个多用户系统中,展现层可以存在在每个用户终端机上(除非通过Jsp页面以服务器的方式产生)。


API

Mondrian 提供了一组API给用户用于执行查询操作。由于目前还没有一个公用的OLAP的API标准,因此Mondrain的主要API都是专有的。但是,任何使用过JDBC的开发人员都可以容易的掌握该API。Mondrian与JDBC中使用的SQL语句主要存在的不同是Mondrian采用了一种不同一种查询语言,即MDX(MutliDimensional eXpressions)来描述查询语句。什么是MDX,请参阅微软的MDX语言手册。

以下的java代码片段展示了,如何连接到一个Mondrian,并执行一个查询和输出其查询结果。

import mondrian.olap.*;
import java.io.PrintWriter;

Connection connection = DriverManager.getConnection(
    "Provider=mondrian;" +
    "Jdbc=jdbc:odbc:MondrianFoodMart;" +
    "Catalog=/WEB-INF/FoodMart.xml;",
    null,
    false);

Query query = connection.parseQuery(
    "SELECT {[Measures].[Unit Sales],[Measures].[Store Sales]} on columns," +
    " {[Product].children} on rows " +
    "FROM [Sales] " +
    "WHERE ([Time].[1997].[Q1], [Store].[CA].[SanFrancisco])");

Result result = connection.execute(query);
result.print(new PrintWriter(System.out));


与JDBC建立数据连接类似,通过DriverManager建立了一个数据连接。一个查询由一个MDX字符串创建,类似JDBC的statement。结果Result类似于JDBC的Resultset。由于我们处理的是多维数据,因此该Result由轴和元素组成,而非行和列。由于OLAP的目标是用于数据挖掘,因此您可以通过如钻取、分类等操作对一个查询中的阶段树进行修改,然后重新执行查询。

API也将数据库的schema展示为一组对象的集合。这组对象为:schema,cube,dimension,hierarchy,level,member。更多的API信息请查看Mondrian官网。

除了java编程方式外,Mondrian支撑通过标准XML访问Mondrian执行查询任务。