·概述
由于项目需要,今天开始接触OLAP(Online Analytics Process, 联机分析处理)。说到OLAP,不能不用穷人通用的Mondrian。Mondrian官方网站(
http://mondrian.pentaho.org/)给出的定义是 Mondrian is an OLAP server written in Java. It enables you to interactively analyze very large datasets stored in SQL databases without writing SQL.
说白了,Mondrian是一个OpenSource的基于关系数据库的分析服务器,遵循MDX、XML/A和JOLAP标准。
·架构 Mondrian从架构上可以分为四个层次:表现层、计算层、聚合层、存储层。
计算层:分析、验证、执行MDX语句, 先计算坐标轴,然后再计算每个单元格的值,从效率上的考虑,计算层批量从聚合层获取单元格数据集合。
聚合层:聚合层中缓存了多维查询结果,即单元格的数据集合,如果计算层所需要的数据不在缓存中,从存储层中进行查询获取数据并缓存。
存储层:采用关系数据库实现,一般采用星型模型构建,提供维表、事实表和聚合表。
系统部署结构上,可以分三层结构分开部署,将表现层部署在一台机器上,计算层和聚合层部署在第二台,存储层部署在第三台。
·
存储和聚合
根据OLAP服务器数据存储技术,可以分为ROLAP和MOLAP,Mondrian采用ROLAP技术。
在ROLAP的多维模型组织和存储数据中,比较常用的方式是星型模式,由一个事实表和一组维度表组成。维度必须预先确定,可以是一般的星型架构,也可以是比较特殊的父子架构、雪花架构等。在ORACLE数据库中,我们能够按照维度进行预先的统计、分类、排序,创建大量的实体化视图。对于没有实体化视图类似功能的数据库,我们也可以创建大量的临时聚合表,这样当用户进行比较高级的分析的时候,不用访问数据量庞大的基础事实表,只需要在我们已经形成的实体化视图或聚合表上作进一步的聚合就可以了,这样能够大大提高查询分析的效率,并且减少占用的系统资源。
在使用聚合表方面有一个关键的技术称之为"聚合感知"技术,只有OLAP引擎必须能够根据多维查询中的维度信息,从适当的聚合表中提取数据,否则聚合表形同虚设。另外在多维模型设计中,设计正确的聚合表也是很关键的。不恰当的设计导致将聚合表的不能满足多维查询的需求,每次从事实表取数据,开销是非常大的。
Mondrian采用关系数据库存储事实表,其本身不具有"聚合感知"的技术,当需要从比较明细的事实表中汇总数据时,性能就比较差了。但是如果关系数据库能够支持实体化视图或其他聚合技术,那么就可以利用关系数据库的技术透明的提高系统性能。我们可以利用Oracle实体化视图来提高Mondrian的效率。
·初次使用
从SourceForge上下载了mondrian-2.3.2.8944版(
http://sourceforge.net/project/showfiles.php?group_id=35302),解压得到了里面的demo war包,自己搭建环境使用了一下Mondrian。下面的截图是我运行得到的结果:
关于具体如何使用,请关注我的下一篇文章 :-)
PS: 历史上的Mondrian
Mondrian,蒙得里安·皮特,1872-1944荷兰画家,作品以交错的三原色为基色的垂直线条和平面为特点,他的著作包括新造型主义(1920年),对抽象艺术的发展曾经产生很深影响。
以下为这位艺术家的几幅作品:
posted on 2007-07-04 18:05
小立飞刀 阅读(4156)
评论(8) 编辑 收藏 所属分类:
Mondrian OLAP