数据仓库建设--OLAP和数据立方体概念

http://student-lp.iteye.com/blog/2263154

OLAP(On-LineAnalysis Processing)在线分析处理是一种共享多维信息的快速分析技术;利用多维数据库技术使用户从不同角度观察数据;用于支持复杂的分析操作,侧重于对管理人员的决策支持,可以满足分析人员快速、灵活地进行大数据复量的复杂查询的要求,并且以一种直观、易懂的形式呈现查询结果,辅助决策。

2.相关概念

(1)

是人们观察数据的特定角度,是考虑问题时的一类属性集合构成一个维(如时间维、地理维等)。

(2)级别(Level)

人们观察数据的某个特定角度(即某个维)还可以存在细节程度不同的各个描述方面(如时间维:日期、月份、季度、年)。即维的级别。

(3)成员(Member)

维的一个取值,是数据项在某维中位置的描述。(“某年某月某日”是在时间维上位置的描述)。

(4)度量(Measure)

多维数组的取值,如“某年某月某日的工资”。

(5)钻取(Drill-up和Drill-down)

改变维的层次,变化分析的粒度。Drill-up是将低层次的数据概括到高层次的汇总数据或者说是减少维度;drill-up则是相反,是将汇总的数据深入到细节,或说是增加新维。

(6)切片和切面

是在一部分维上选定值后,关心度量数据在剩余维上的分布。如果剩余的维只有两个,则是切片;如果有三个或以上,则是切块。

(7)旋转

是变换维的方向,即在表格中重新安排维的放置(例如行列互换)

根据事实表和维度表的关系,又可将常见的模型分为星型模型雪花型模型
  星形模型:所有维度表连接到事实表上的时候,整个图就像一个星星,故称之为星型模型。星型架构是一种非正规化的结构,多维数据集的每一个维度都直接与事实表相连,不存在渐变维度,所以数据有一定冗余。因为有冗余,所以很多统计不需要做外部的关联查询,因此一般情况下效率比雪花模型高。维表对应于各个分析的角度,它除了主键以外还包含描述和分类信息

  雪花模型:当有多个维度表没有直接连接到事实表上,而是通过其他维度表连接到事实表上时,其图形就像雪花,故称雪花模型。雪花模型的优点是减少了数据冗余,所以一般情况下查询需要关联其他表。在冗余可接受的前提下使用星型模型。

星型模型和雪花模型的区别在于:维度表是直接连接到事实表还是其他维度表。

比如按省市县的维度分析销量。星形模型的销量事实表中字段有id,省code,市code,县code,销量。事实表直接与省、市、县关联。而雪花模型销量事实表中字段有id,县code,销量。在按省分析销量时,事实表—县维度—市维度—省维度关联起来分析。

3. 星座模式

星座模式(Fact Constellations Schema)也是星型模式的扩展。基于这种思想就有了星座模式:

前面介绍的两种维度建模方法都是多维表对应单事实表,但在很多时候维度空间内的事实表不止一个,而一个维表也可能被多个事实表用到。在业务发展后期,绝大部分维度建模都采用的是星座模式。

从大数据谈起1:OLTP和OLAP的设计区别

https://blog.csdn.net/u010482626/article/details/9213735

在设计大数据处理系统时,首先需要从这两个层面来考虑,需要考虑的因素包括:1、数据大小有多大;2、数据如何使用;3、数据更新频率。

从目前来看需要大数据的主要应用领域,也只有两个:联机事务处理OLTP(On-line
Transaction Processing)、联机分析处理OLAP(On-Line Analytical Processing)。

OLTP

是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。一般就是把大数据用于在线业务,比如淘宝的订单交易、商品展示、历史交易、百度的网页搜索、新浪的微博内容展示等。这种需求要求有实时性,查询以后需要在秒级别返回,且对于服务稳定性和容错性有一定要求的。另外,读操作的数量远远大于写操作,且增量数据的大小要远远小于历史数据。在设计OLTP的数据系统中,主要技术难点有:

分层、分片、分布式事务

OLAP

数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。一般不需要表关联,直接读取单表即可

OLAP主要是做离线分析,对时效性要求不高,跑几个小时到几天问题都不大,并且机器挂了也没事,大不了restart一下。但是这种系统往往数据量非常大,维数特别多,基本都需要把历史数据全部扫描1-2遍。在设计OLAP系统里主要涉及到技术有:

列存储、降维、切分

 

OLTP

OLAP

用户

操作人员,低层管理人员

决策人员,高级管理人员

功能

日常操作处理

分析决策

设计

面向应用

面向主题

数据

当前的, 最新的细节的, 二维的分立的

历史的, 聚集的, 多维的,集成的, 统一的

存取

读/写数十条记录

读上百万条记录

工作单位

简单的读写

复杂查询

DB大小

0-100G

TB-PB级别

OLTP做起来相对容易。小型项目用mysql+redis+memcached足够应付。大型项目在开源社区的支持下,hadoop
+hbase+redis
也可以从无到有地应对需求。而大型商业产品推出的分布式数据库,和一些开源分布式产品,例如淘宝开源的OceanBase都在保证分布式数据库的ACID的原子性上进行了一定程度的尝试。

OLAP较为复杂,由于数据是多维的, SQL语言Hold不住了。在这方面建模和抽象变得很重要,如何解决数据的语义性和查询的可描述性变得很困难。目前OLAP主要的开源产品包括HDFS、HIVE和Impala等

总体来看,如何根据需求来设计系统才是一个技术人员需要考虑的问题,过分的设计和过分的资源消耗都是不合适。下次我们再介绍下OLTP里的分层思想

BI学习之一创建一个简单的Olap多维数据集的展现

讲解利用vs创建一个商业智能项目->Analysis Services项目。简单讲解如何创建维度表、事实表和分析报表。

第二篇:数据仓库与数据集市建模

写的特别好。重点看下。

缓慢变化维度问题

虽然,维表的数据比事实表更稳定。但不论如何维度在某些时候总会发生一些变化。在之前曾抛出一个问题:为什么维度建模后的关系不是***ID,而是***Key了。这样做的目的其实就是为了解决一种被称为缓慢维度变化(slowly changing dimension)的问题。在维度变化后,一部分历史信息就被丢掉了。比如张三是某公司会员。

但仅仅这么做还是不够的,代理码需要配合时间戳,以及行标识符使用才能解决缓慢维度变化的问题。如下CUSTOMER表使用该方法避免缓慢维度变化:

可以看到用户张三对应新维度的TaxBracket状态由Low变成了High。如果需要统计张三的相关行为,那么可以让所有记录用CustomerID字段Join事实表;如果要统计当前TaxBracket为Low的用户状态,则可将Row Indicator字段为Current的记录用CustomerKey字段Join事实表;如果要统计历史TaxBracket状态为Low的用户情况,则只需要将TaxBracket属性为Low的用户记录的CustomerKey属性与事实表关联。

第三篇:数据仓库系统的实现与使用(含OLAP重点讲解)

Olap学习笔记的更多相关文章

  1. 学习笔记:The Log(我所读过的最好的一篇分布式技术文章)

    前言 这是一篇学习笔记. 学习的材料来自Jay Kreps的一篇讲Log的博文. 原文很长,但是我坚持看完了,收获颇多,也深深为Jay哥的技术能力.架构能力和对于分布式系统的理解之深刻所折服.同时也因 ...

  2. OGG学习笔记02-单向复制配置实例

    OGG学习笔记02-单向复制配置实例 实验环境: 源端:192.168.1.30,Oracle 10.2.0.5 单实例 目标端:192.168.1.31,Oracle 10.2.0.5 单实例 1. ...

  3. 高性能MySQL--索引学习笔记(原创)

    看过一些人写的学习笔记,完全按书一字不漏照抄,内容很多,真不能叫笔记.遂自己整理了一份,取其精要. 更多笔记请访问@个人简书 [toc] 索引概述 索引即key 在存储引擎层实现,不同引擎工作方式不同 ...

  4. 学习笔记:The Log(我所读过的最好的一篇分布式技术文章)

    前言 这是一篇学习笔记. 学习的材料来自Jay Kreps的一篇讲Log的博文. 原文非常长.可是我坚持看完了,收获颇多,也深深为Jay哥的技术能力.架构能力和对于分布式系统的理解之深刻所折服.同一时 ...

  5. OGG学习笔记02

    实验环境:源端:192.168.1.30,Oracle 10.2.0.5 单实例目标端:192.168.1.31,Oracle 10.2.0.5 单实例 1.模拟源数据库业务持续运行 2.配置OGG前 ...

  6. SparkSQL学习笔记

    概述 冠状病毒来临,宅在家中给国家做贡献之际,写一篇随笔记录SparkSQL的学习笔记,目的有二,一是记录整理之前的知识作为备忘录,二是分享技术,大家共同进步,有问题也希望大家不吝赐教.总体而言,大数 ...

  7. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  8. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  9. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

随机推荐

  1. C++ 智能指针七

    /* 智能指针weak_ptr */ #include <iostream> #include <string> #include <memory> /* weak ...

  2. 【Qt】信号和槽对值传递参数和引用传递参数的总结

    在同一个线程中 当信号和槽都在同一个线程中时,值传递参数和引用传递参数有区别: 值传递会复制对象:(测试时,打印传递前后的地址不同) 引用传递不会复制对象:(测试时,打印传递前后的地址相同) 不在同一 ...

  3. 第四百零二节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署,uwsgi安装和启动,nginx的安装与启动,uwsgi与nginx的配置文件+虚拟主机配置

    第四百零二节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署,uwsgi安装和启动,nginx的安装与启动,uwsgi与nginx的配置文件+虚拟主机配置 软件版本  uwsgi- ...

  4. C# 多线程中经常访问同一资源可能造成什么问题?

    竞态条件和死锁. 如果两个或多个线程访问相同的对象,或者访问不同步的共享状态 ,就会出现竞态条件: 为了避免出现该问题,可以锁定共享的对象.但是过多的锁定也会有麻烦,那就是死锁: 当至少有两个线程被挂 ...

  5. Groovy和Java互调

    Scala和Java为静态语言,Groovy为动态语言 Scala: 函数式编程,同时支持面向对象 Groovy: jvm上的脚本,较好兼容java语法,Groovy加强了Java集成. 可配置化的优 ...

  6. 外部访问docker容器(docker run -p/-P 指令)

    容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P(大写) 或 -p (小写) 参数来指定端口映射. (1)当使用 -P 标记时,Docker 会随机映射一个 49000~4990 ...

  7. 使用ReentrantLock和Condition来代替内置锁和wait(),notify(),notifyAll()

    使用ReentrantLock可以替代内置锁,当使用内置锁的时候,我们可以使用wait() nitify()和notifyAll()来控制线程之间的协作,那么,当我们使用ReentrantLock的时 ...

  8. [原] MyBatis 整理

    花了一上午的时间,先整理一个脑图.

  9. nodejs electron 创建桌面应用

    //首先安装cnpm npm install -g cnpm --registry=https://registry.npm.taobao.org //使用cnpm进行安装,使用方法和npm相同 cn ...

  10. 进程池原理及效率测试Pool

    为什么会有进程池的概念? 当我们开启50个进程让他们都将100这个数减1次减到50,你会发现特别慢! 效率问题,原因: 1,开辟内存空间.因为每开启一个进程,都会开启一个属于这个进程池的内存空间,因为 ...