zoukankan      html  css  js  c++  java
  • 基于mondrian聚合表的R计算olap开发

    原文出处:http://www.cnblogs.com/qiaoyihang/p/7348328.html

    最近在做基于Mondrian的olap开发,总结一下!

    一、 schema构建

    1、思考:我们为什么要构建多维模型?

    多维模型schema就相当于我们多维分析的一个逻辑模型,就类似于我们开发一个java应用模块的uml原型图。试想,没有原型图,开发一个应用就是盲目的,这里如果没有逻辑模型,你的多维分析也就是盲目的!

    2多维模型的基本概念和主要架构

    A、基本概念:

    cube可以理解为数据仓库中被挑选出来当成研究对象的数据集,相当于oltp里面的数据库,包括原始事实数据、聚合数据,这些数据聚合允许用户快速进行复杂查询。 

    维度(Dimension):描述对象事务的一个方面,角度

    级别(Level:维度可以分为多个级别。比如,地区维度可以包含级别层级:Countryschoolclass

    成员(Member:一个成员是维度(包括度量维Measures)上的一个项目值

    度量(Measure:度量实际上市属于维度的成员

    看着这个图能正确理解先关概念才算对多维模型又了初步的认识

    B、要想知道多维模型是如何构建的,那就要了解多维模型的主要架构。

    这是我自己总结的简单理解,更深入的可以自己google下!

    两种主要架构,星型和雪花型。

    从查询性能角度来看,在OLTP角度看,星型架构性能更高,因为雪花型要做多个表联接;

    当然雪花型也有自己的优势:

    OLAP环节,由于雪花型架构更有利于度量值的聚合,因此性能要高于星型架构。

    雪花型架构更加贴近OLTP系统的结构,比较符合业务逻辑,层次比较清晰

    我们系统的组织机构这块可以明显的看出区别!(xx省,xx市,xx区)

    我们一般建议使用星型架构, 因为我们在实际项目中,往往最关注的是查询性能问题.

    那么我们可以完全抛弃雪花型模型了吗?

    当然不是,

    在维度表数据量极大,需要节省存储空间的情况下,或者是业务逻辑比较复杂、必须要体现清晰的层次概念情况下,可以使用雪花型。

    好了,我们现在已经大概了解了多维模型的基本概念,下面开始构建 

    构建步骤:

    通过workbench 这个工具

    构建schemacubetabledimensionlevelmeasure

    二、 R计算

    思考:我们为什么抛弃了原先的java计算,而用R计算

    代码量大,多层循环,对配置要求高,不易扩展

    很多现成算法函数,抛弃循环对数据进行操作,各种新需求可快速开发,数据类型丰富易用,现阶段虽然对配置要求高,但是后面可用磁盘作为内存扩展,也可搭建分布式环境,跑到sparkR上,甚至yarn上面

    计算步骤:

    1、 mysql 的数据到R内存

    2、 在构建的schema 的基础上分析数据

    3、 把产生的结果,各种维度组合放在postgre 数据库

    需要对OLAP星型模型的所有维度进行组合

    组合的结果集为:

    如果有5个维度     

    取一个维度: C(5,1)5种组合

    取二个维度: C(5,2)10种组合

    取三个维度: C(5,3)10种组合

    取四个维度: C(5,4)5种组合

    取五个维度: C(5,5)1种组合

    总的组合数为: C(5,1)+ C(5,2)+ C(5,3)+ C(5,4)+ C(5,5) = 31

    如果有6个维度

    C(6,1)+ C(6,2)+ C(6,3)+ C(6,4)+ C(6,5)+C(6,6) = 63

    如果有8个维度

    28次方减1等于255

    如果有3个维度

    23次方减1等于7

    到这里,我们可以感觉到,Mondrian只做了个表路由的功能,选择维度的组合,自动映射相应的表。这个思路,不用mondrian也可以实现,但选择Mondrian最大的优点是拥有cache缓存和支持MDX查询

    4、 把分析完成之后的数据构建xml

    5、 发布到saiku(由于我们的展现端用的saiku,可根据自己的情况来)

    6、 重点注意几个包:

    data.tablestring2plyrxmlparallelsugar

     

    三、 mondrian介绍

     

    好了,到现在我们已经有了我们自己的逻辑模型和聚合表数据,那么saiku是如何操作聚合表的数据呢?那就需要用到mondrian

     

    Mondrian是一个开源项目。一个用Java写成的OLAP(在线分析性处理)引擎。它自定义了一种使用mdx语言的客户端接口,从关系数据库(RDBMS)中读取数据。然后经过Java API用多维的方式对结果进行展示。

     

    注意:Mondria的元数据仅仅包括了多维逻辑模型,从关系型数据库到多维逻辑模型的映射,存取权限等信息,它不是数据仓库服务器,但是支持星型模型和雪花模型的功能

     

    不用mondrian也可以实现,但选择Mondrian最大的优点是拥有cache缓存和支持MDX查询(经过实际测试,报表的第二次打开速度会比第一次快许多),同时Mondrian支持XMLA协议(类似于soap的一种协议)

     

  • 相关阅读:
    编写 ES6 的 7 个实用技巧
    [docker] 常用命令
    ansible 的第一次亲密接触
    [bug] JS sort 函数在 ios 中无效
    这几天bug多,自我检讨一下
    【面试】——随手收集面试问题
    Linux的五个查找命令:find,locate,whereis,which,type
    Linux下php安装Redis扩展
    mysql in 子查询 效率慢 优化(转)
    mysql group by 用法解析(详细)
  • 原文地址:https://www.cnblogs.com/qiaoyihang/p/7348328.html
Copyright © 2011-2022 走看看