基于mondrian聚合表的R计算olap开发
原文出处:http://www.cnblogs.com/qiaoyihang/p/7348328.html
最近在做基于Mondrian的olap开发,总结一下!
一、 schema构建
1、思考:我们为什么要构建多维模型?
多维模型schema就相当于我们多维分析的一个逻辑模型,就类似于我们开发一个java应用模块的uml原型图。试想,没有原型图,开发一个应用就是盲目的,这里如果没有逻辑模型,你的多维分析也就是盲目的!
2、多维模型的基本概念和主要架构
A、基本概念:
cube可以理解为数据仓库中被挑选出来当成研究对象的数据集,相当于oltp里面的数据库,包括原始事实数据、聚合数据,这些数据聚合允许用户快速进行复杂查询。
维度(Dimension):描述对象事务的一个方面,角度
级别(Level):维度可以分为多个级别。比如,地区维度可以包含级别层级:Country、school、class
成员(Member):一个成员是维度(包括度量维Measures)上的一个项目值
度量(Measure):度量实际上市属于维度的成员
看着这个图能正确理解先关概念才算对多维模型又了初步的认识

B、要想知道多维模型是如何构建的,那就要了解多维模型的主要架构。
这是我自己总结的简单理解,更深入的可以自己google下!
两种主要架构,星型和雪花型。


从查询性能角度来看,在OLTP角度看,星型架构性能更高,因为雪花型要做多个表联接;
当然雪花型也有自己的优势:
从OLAP环节,由于雪花型架构更有利于度量值的聚合,因此性能要高于星型架构。
雪花型架构更加贴近OLTP系统的结构,比较符合业务逻辑,层次比较清晰
我们系统的组织机构这块可以明显的看出区别!(xx省,xx市,xx区)
我们一般建议使用星型架构, 因为我们在实际项目中,往往最关注的是查询性能问题.
那么我们可以完全抛弃雪花型模型了吗?
当然不是,
在维度表数据量极大,需要节省存储空间的情况下,或者是业务逻辑比较复杂、必须要体现清晰的层次概念情况下,可以使用雪花型。
好了,我们现在已经大概了解了多维模型的基本概念,下面开始构建
构建步骤:
通过workbench 这个工具
构建schema》cube》table》dimension》level》measure
二、 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个维度
2的8次方减1等于255种
如果有3个维度
2的3次方减1等于7种
到这里,我们可以感觉到,Mondrian只做了个表路由的功能,选择维度的组合,自动映射相应的表。这个思路,不用mondrian也可以实现,但选择Mondrian最大的优点是拥有cache缓存和支持MDX查询
4、 把分析完成之后的数据构建xml
5、 发布到saiku(由于我们的展现端用的saiku,可根据自己的情况来)
6、 重点注意几个包:
data.table,string2,plyr,xml,parallelsugar
三、 mondrian介绍
好了,到现在我们已经有了我们自己的逻辑模型和聚合表数据,那么saiku是如何操作聚合表的数据呢?那就需要用到mondrian。
Mondrian是一个开源项目。一个用Java写成的OLAP(在线分析性处理)引擎。它自定义了一种使用mdx语言的客户端接口,从关系数据库(RDBMS)中读取数据。然后经过Java API用多维的方式对结果进行展示。
注意:Mondria的元数据仅仅包括了多维逻辑模型,从关系型数据库到多维逻辑模型的映射,存取权限等信息,它不是数据仓库服务器,但是支持星型模型和雪花模型的功能
不用mondrian也可以实现,但选择Mondrian最大的优点是拥有cache缓存和支持MDX查询(经过实际测试,报表的第二次打开速度会比第一次快许多),同时Mondrian支持XMLA协议(类似于soap的一种协议)

基于mondrian聚合表的R计算olap开发的更多相关文章
- 基于ACCESS和ASP的SQL多个表查询与计算统计代码(一)
近期在写几个关于"Project - Subitem - Task"的管理系统,说是系统还是有点夸大了,基本就是一个多表查询调用和insert.update的数据库操作.仅仅是出现 ...
- Android版数据结构与算法(四):基于哈希表实现HashMap核心源码彻底分析
版权声明:本文出自汪磊的博客,未经作者允许禁止转载. 存储键值对我们首先想到HashMap,它的底层基于哈希表,采用数组存储数据,使用链表来解决哈希碰撞,它是线程不安全的,并且存储的key只能有一个为 ...
- CSharpGL(54)用基于图像的光照(IBL)来计算PBR的Specular部分
CSharpGL(54)用基于图像的光照(IBL)来计算PBR的Specular部分 接下来本系列将通过翻译(https://learnopengl.com)这个网站上关于PBR的内容来学习PBR(P ...
- (数据科学学习手札88)基于geopandas的空间数据分析——空间计算篇(下)
本文示例代码及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在基于geopandas的空间数据分析系列 ...
- python爬虫(正则取数据)读取表格内的基金代码后爬取基金最新净值,同时写到对应的表格中,基于最近一次购买净值计算出涨跌幅(名字有点长)
最近基金跌的真够猛,虽说是定投,但大幅度下跌,有时候适当的增加定投数也是降低平均成本的一种方式 每天去看去算太费时间,写了个爬虫,让他自动抓数据后自动计算出来吧 实现逻辑: 1.创建了一个excel表 ...
- 《BI那点儿事—数据的艺术》理解维度数据仓库——事实表、维度表、聚合表
事实表 在多维数据仓库中,保存度量值的详细值或事实的表称为“事实表”.一个按照州.产品和月份划分的销售量和销售额存储的事实表有5个列,概念上与下面的示例类似. Sate Product Mouth U ...
- linq查询数值为null的问题以及数据表的关联计算问题
说明:下面实例都是我进行项目开发时的真实部分代码,毫无保留 一.数据表的关联计算 //把当前年度的分差计算出来,建立两个关联的数据表 try { using(TransactionScope scop ...
- HDFS的快照原理和Hbase基于快照的表修复
前一篇文章<HDFS和Hbase误删数据恢复>主要讲了hdfs的回收站机制和Hbase的删除策略.根据hbase的删除策略进行hbase的数据表恢复.本文主要介绍了hdfs的快照原理和根据 ...
- js语言评价--js 基于哈希表、原型链、作用域、属性类型可配置的多范式编程语言
js 基于哈希表.原型链.作用域.属性类型可配置的多范式编程语言 值类型.引用类型.直接赋值: 原型是以对象形式存在的类型信息. ECMA-262把对象定义为:无序属性的集合,其属性可以包含基本值,对 ...
随机推荐
- mysql 求季度产量平均值
表名:product 表结构: 表数据: 如果使用日期查询的话:sql: SELECT QUARTER(create_time) AS '季度',AVG(seller) AS '平均值' FROM p ...
- JVM Specification 9th Edition (2) Chapter 1. Introduction
Chapter 1. Introduction 翻译太累了,我就这样的看英文吧. 内容列表 1.1. A Bit of History 1.2. The Java Virtual Machine 1. ...
- telnet master主机的NodePort服务不通的问题
硬件环境: 两台物理机: 172.16.114.210(master主机) 172.16.114.211(node主机) 软件环境: kubernetes 1.5.2 flannel 0.5.5 问题 ...
- freemarker 超出字符用省略号表示
<#if x.content?length lt 200> ${x.content} <#else> ${x.content[0..201]}... </#if>
- 数据库I/O:CMP、Hibernate
★什么是“Persistence” 用过VMWare的朋友大概都知道当一个guest OS正在运行的时候点击“Suspend”将虚拟OS挂起,它会把整个虚拟内存的内容保存到磁盘上,譬如你为虚拟OS分配 ...
- 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败解决方案
第一种方法测试过可用:地址:http://download.csdn.net/detail/itjjfamily/8853509 下面是第二种: .NET导出Excel遇到的80070005错误的解决 ...
- 卡友pos机使用流程
Q: pos机正常使用步骤 A: 1. 按开机键开机2. 输入“01”进行签到3. 系统提示输入密码,密码为“0000”4. 系统提示“请刷卡”,可正常刷卡消费首次使用请务必登陆商户后台核对结算收款账 ...
- HDU2059 龟兔赛跑 【DP】
龟兔赛跑 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 64、具有过渡动画效果的布局Layout( 2 )
[ CoordinatorLayout-与手势完美结合的滑动视图 ] [ AppBarLayout-可以随手势滑动的AppBar ] <android.support.design.widget ...
- PhoneGap 获得设备属性Demo
<!DOCTYPE html> <html> <head> <title>设备属性Demo</title> <script type= ...