数据仓库专题(4)-分布式数据仓库事实表设计思考---讨论精华

一、前言

  上一篇分享博文《数据仓库专题(3)--分布式数据仓库事实表设计思考》后,陆续有各位兄弟参加大讨论,提出了各种问题,关于分布式环境下,维表和事实表设计,进行了比较深入的探讨,在此汇集整理,分享给大家。希望能有更多人参与尽力啊,共同探索分布式数据仓库数据模型的设计。

二、纪要

【活跃】北京-RTB-胖哥(1106110976) 10:21:36

分布式模式下事实表设计思考:

做大做强事实表,做小做弱维表;

【冒泡】杭州-电子病历<[email protected]> 10:23:31

能举例子说明吗? 您这句话,我似懂非懂,但是确实在临床上又有非常多的问题存在。

【潜水】厦门-BI-锅盖(584249213) 10:25:58

胖哥,我看了你博客,这点确实不太理解。你是指只有唯一值的维度直接合并到事实表吗?


【潜水】bomb(4684895) 10:26:45

但是这样做会有个问题,导致事实表变的更大


【潜水】bomb(4684895) 10:27:20

我觉得比较好的方式是使用列存储数据库,列存储数据库对于聚合计算是有很大优势的


【冒泡】杭州-电子病历<[email protected]> 10:31:37

@厦门-BI-锅盖 胖哥的博客,您在哪里看的?方便发博客地址我吗?


【潜水】厦门-BI-锅盖(584249213) 10:32:43

现在列存储的厂家就SAP HANA,Oracle Exadata,不多而且比较贵

 

【潜水】厦门-BI-锅盖(584249213) 10:33:06

http://www.cnblogs.com/hadoopdev/p/4425715.html


【潜水】厦门-BI-锅盖(584249213) 10:33:26

分布式模式-维度建模新原则

  (1)以值代键:针对键值唯一的维表,除非必要,否则不引入维表,如IP地址维表,采用IP作为维表的主键,事实表中存储IP值;

(2)合理分表:传统关系型数据仓库存在多表整合的冲动,如上图Event事实表,各种Acount Ind,Finance Ind等,用来扩展表的通用性,试图把所有的数据都存储到一张表 中。分布式数据仓库的设计,恰恰相反,因为单表数据规模的问题,如果要满足分析和处理的性能,合理的按照业务进行数据的分表存储。如财务相关事件、账户相关事件,单独成表。更有利于数据的计算和分析。 


【冒泡】南京-电商-凌云<[email protected]> 10:38:34

列存储数据库 只是在平台层面考虑的问题,但是对于海量数据的时候,在模型上面还是要有一定的考量的


【冒泡】南京-电商-凌云<[email protected]> 10:41:29

@北京-RTB-胖哥  分布式数据仓库 在架构层面是如何设计的?


【活跃】北京-RTB-胖哥(1106110976) 10:43:13

架构,具体知识技术脚骨


【活跃】北京-RTB-胖哥(1106110976) 10:43:20

架构还是数据架构


【活跃】北京-RTB-胖哥(1106110976) 10:43:24

是两个不同的问题。


【潜水】bomb(4684895) 10:43:50

sql


【潜水】bomb(4684895) 10:44:00

sql server 也有列存储了


【活跃】北京-RTB-胖哥(1106110976) 10:44:03

事实表不变,也大。因为海量数据情况下,单表的容积都是百亿级别的。


【活跃】北京-RTB-胖哥(1106110976) 10:44:38

Hive的分表,前提是你分表周期内的数据,都已经达到百亿级别的情况。


【活跃】北京-RTB-胖哥(1106110976) 10:45:13

主要是分布式列式数据库,维表不能大,大了的话,内存消费不起呢。


【冒泡】南京-电商-凌云<[email protected]> 10:46:26

维表不能太,是不是意味着维表就要做分表策略呢?


【冒泡】南京-电商-凌云<[email protected]> 10:47:36

那就是维度设计考虑的问题,维度的层次是不是要多一些


【冒泡】南京-电商-凌云<[email protected]> 10:48:03

  (1)以值代键:针对键值唯一的维表,除非必要,否则不引入维表,如IP地址维表,采用IP作为维表的主键,事实表中存储IP值;


【冒泡】南京-电商-凌云<[email protected]> 10:48:35

在这里考虑的主键的作用是什么?


【冒泡】南京-电商-凌云<[email protected]> 10:54:10

@北京-RTB-胖哥  是数据架构


【活跃】北京-RTB-胖哥(1106110976) 10:55:59

首先IP不重复,可以承担维表中的主键,其次,IP作为事实表重的维度FK,如果只是针对IP地址的数值统计,可以不引入IP维表


【活跃】北京-RTB-胖哥(1106110976) 10:56:07

FK值就是IP地址。


【冒泡】南京-电商-凌云<[email protected]> 10:58:27

但是如果是IP作为一个维表的话,那么主键是不是IP地址 没有关系啊,因为你在事实表中还是要引用IP维表的主键作为FK,同样可以基于IP维表的主键做数量统计的


【潜水】bomb(4684895) 11:00:19

这样的情况,事实表也就是IP的维度表,自然不再需要IP的维度表


【冒泡】南京-电商-凌云<[email protected]> 11:00:31

不对


【冒泡】南京-电商-凌云<[email protected]> 11:01:13

事实表中不仅包括IP,还有其他的维度信息啊


【潜水】bomb(4684895) 11:01:52

恩,我明白胖哥的意思


【冒泡】南京-电商-凌云<[email protected]> 11:02:12

对于IP维度来讲的话,他的也是有层次的,比如国内IP,国外IP,不同电信运营商线路的IP


【潜水】bomb(4684895) 11:02:53

这样的情况我认为一般不会出现,就像一个销售记录中有订单号,我们通常不会用订单号做维度


【冒泡】南京-电商-凌云<[email protected]> 11:03:00

是不是可以把IP地址理解成一种伪度量去考量的


【潜水】bomb(4684895) 11:06:42

我认为这个时候IP(或订单号)其实就是事实表的主键了,通常这种情况下也不会对IP(或者订单号)做分析,做分析时我们会关系一类IP或者某个地域的一类IP是什么样的情况,而不会关心单个IP是什么样的情况,如果关心单个IP的情况,就是明细查询了,明细查询可以考虑用其他的方式,比如搜索引擎


【潜水】bomb(4684895) 11:08:14

个人的一点愚见,欢迎拍砖


【冒泡】南京-电商-凌云<[email protected]> 11:09:05

IP是事实表的主键?能举例吗


【活跃】北京-RTB-胖哥(1106110976) 11:09:27

先掐着,掐明白了,就明白了。

 

【潜水】bomb(4684895) 11:09:40

我觉得胖哥的意思,就像我们常见到的销售订单表


【潜水】bomb(4684895) 11:09:49

我同意,胖哥


【潜水】bomb(4684895) 11:10:48

在销售订单表中,每个订单号是唯一的,就可以作为主键,这种情况下,我们通常不会再做一张订单号的维度表

 

【冒泡】南京-电商-凌云<[email protected]> 11:11:18

我们在销售单中一般的考量是ID+单号


【潜水】bomb(4684895) 11:11:25

其实我们原来一个项目中干过这样的实情,结果就呵呵了……


【潜水】bomb(4684895) 11:12:02

cube处理要很长时间,后来发现用户根本不会用订单号这个维度做分析,所以把这个维度去了,就快多了


【冒泡】南京-电商-凌云<[email protected]> 11:12:42

这个是你的事实表数据粒度的考虑


【潜水】bomb(4684895) 11:12:47

一般我在事实表中没有主键(sql server)


【冒泡】南京-电商-凌云<[email protected]> 11:12:57

如果客户要用订单号做分析呢


【潜水】bomb(4684895) 11:13:07

那就悲催了……


【冒泡】南京-电商-凌云<[email protected]> 11:14:59

模型设计的时候不应该完全按照现有的数据分析需求考量


【潜水】bomb(4684895) 11:15:25

这个我同意


【冒泡】南京-电商-凌云<[email protected]> 11:16:50

带IP或者是订单号的数据一般是粒度比较低的事实数据或者明细数据


【潜水】bomb(4684895) 11:16:53

但是对订单信息按照每个订单做分析,我认为是没有意义的,数据分析是反映批量数据的状态或趋势,对单条订单的查询是明细查询


【冒泡】南京-电商-凌云<[email protected]> 11:17:49

对啊,所以说事实表的数据是按照维度的粒度做计算,分层的


【活跃】北京-RTB-胖哥(1106110976) 11:22:36

最细粒度的数据,有时候需要刻意的反规范设计


【活跃】北京-RTB-胖哥(1106110976) 11:22:42

也是没办法的事情。


【冒泡】南京-电商-凌云<[email protected]> 11:27:29


【冒泡】南京-电商-凌云<[email protected]> 11:27:57

反规范做冗余是经常的事情

三、未完待续

      分布式数据仓库数据存储模型设计进行中,后续会持续更新,请关注QQ群:分布式数据仓库建模 398419457。

时间: 2024-10-25 00:54:45

数据仓库专题(4)-分布式数据仓库事实表设计思考---讨论精华的相关文章

数据仓库专题(3)-分布式数据仓库事实表设计思考

一.前言 最近在设计数据仓库的数据逻辑模型,考虑到海量数据存储在分布式数据仓库中的技术架构模式,需要针对传统的面相关系型数据仓库的数据存储模型进行技术改造.设计出一套真正适合分布式数据仓库的数据存储模型. 二.事实表设计基础 事实表记录发生在现实世界中的操作型事件,其所产生的可度数值.事实表的设计完全依赖于物理活动,不受可能产生的最终报表的影响.事实表中,除数字度量外,事实表总是包含外键,用于关联与之相关的维度,也可以包含退化的维度键和日期/时间戳. 三.传统模式 以FS-LDM数据存储模型Ev

数据仓库专题(16)-分布式数据仓库实践指南-目录篇

前言: 准备系统化整理一套分布式数据仓库建模实践指南,先把目录列出来吧,算是给自己设计一个目标吧. 第一部分 基础篇 第一章 数据仓库概念与定义 1.1 数据管理体系 1.2 数据仓库概念 1.3 数据仓库职责 第二章 数据仓库体系结构 2.1 Inmon CIF 2.2 Kimball 2.3 对于与分析 第三章 维度建模基础 3.1 kimball四步建模法 3.2 维度设计 3.3 事实表设计 第二部分 实践篇 第一章 路线图 第二章 业务分析-深浅有度 第三章 数据分析-区别对待 第四章

数据仓库专题(2)-Kimball维度建模四步骤

一.前言 四步过程维度建模由Kimball提出,可以做为业务梳理.数据梳理后进行多维数据模型设计的指导流程,但是不能作为数据仓库系统建设的指导流程.本文就相关流程及核心问题进行解读. 二.数据仓库建设流程 以下流程是根据业务系统.组织结构.团队结构现状设定的数据仓库系统建设流程,适合系统结构复杂,团队协作复杂,人员结构复杂的情况,并且数据仓库建设团队和业务系统建设团队不同的情况.具体流程如下图所示: 图1 数据仓库系统建设流程 三.四步维度建模 Kimball四步建模流程适合上述数据仓库系统建设

数据仓库专题(8)-维度属性选择之维护历史是否应该保留

一.背景 数据仓库建模过程中,针对事务型事实表设计,经常会遇到维度属性选择的问题,比如客户维度,在操作型系统中,为了跟踪客户状态的变化,往往会附加客户记录的四个属性: 1.add time:添加时间: 2.add user:添加用户: 3.mod time:修改时间: 4.mod user:修改用户: 问题在于,当我们进行维度建模的时候,如果以客户作为维度,是否应该考虑以上四个属性? 二.观点 1.应该保留 (1)我觉得 添加时间 可以作为维度属性,以后可能进行相关的统计: 2.不应该保留 (1

数据产品设计专题(5)- 分布式数据仓库技术架构

一.分布式数据仓库技术架构 二.核心内容解读 (1)分布式数据仓库存储技术:hive+hdfs: (2)事实计算平台技术框架:spark: (3)数据挖掘算法技术框架:mllib + sparkR

数据仓库/集市 星形/雪花形 事实/维度表

声明:本文转载至Davor Gornik 对数据仓库进行数据建模 OLTP 与数据仓库--有何差异? 在日常生活中,我们要使用大量的应用程序来生成新的数据.变更数据.删除数据,当然在大多数的情况下我们还要查阅和分析数据.就来想象一个收发 email 的简单应用程序吧.我们已经存储了地址信息,可能还存储了一些文档.我们可以决定是否存储已经发送过的邮件,但是也可能隔一段时间后将其删除,或者删除已经发送过的所有邮件.那么我们该如何处理一段时间以前删除或者修改过的地址呢?我们再也不会看到它们了. Ema

BI中事实表,维度表和数据集市,数据仓库的理解

维度表(dimension)存放着一些维度属性,例如时间维度:年月日时:地域维度:省份,城市:年龄维度:老年,中年,青年:职称维度:高,中,低.它定义了可以从哪些角度分析事实表. 事实表(fact)存放着一些业务产生的数据,例如:商品订购产生的订单信息,银行的流水信息,erp系统的办公信息.但它不仅存放着上述事实信息,而且存放在事实信息与维度信息关联的键值,例如订单信息里面有日期字段可以和时间维度关联,可以通过银行中的个税流水与收入维度关联量化各个收入群体,erp流水中的员工号可以同职称维度表关

数据仓库--事实表和维度表

本文主要参考如下几篇文章:http://www.cnblogs.com/47613593/archive/2009/02/20/1394581.htmlhttp://jackwxh.blog.51cto.com/2850597/827968 1.数据仓库与操作型数据库的区别 数据仓库的物理模型与常见的操作型数据库的物理模型有很大不同.最明显的区别是:操作型数据库主要是用来支撑即时操作,对数据库的性能和质量要求都比较高,为了防止"garbage in,garbage out",通常设计操

《BI那点儿事—数据的艺术》理解维度数据仓库——事实表、维度表、聚合表

事实表 在多维数据仓库中,保存度量值的详细值或事实的表称为“事实表”.一个按照州.产品和月份划分的销售量和销售额存储的事实表有5个列,概念上与下面的示例类似. Sate Product Mouth Units Dollars WA Mountain-100 January 3 7.95 WA Cable Lock January 4 7.32 OR Mountain-100 January 3 7.95 OR Cable Lock January 4 7.32 WA Mountain-100 F