关于数据仓库模型的选取和大家进行一个讨论

4
各位朋友大家好,我做数据仓库有快3年的时间了,项目也做个几个,不大不小,相关资料也看了不少,现在想把自己的理解和大家进行一个讨论,想听听大家的看法,说的对错请大家指点。
1、首先关于星型和雪花型的选取,有的资料上推荐使用星型,有的推荐使用雪花,个人认为还是星型结构值得推荐,虽然有的时候使用雪花有他的优点,但是我个人认为,雪花的优点,星型结构也可以规划业务维度、ETL过程处理掉。作为大数据量的数据集、效率还是王道。星型的效率(层次结构一样)应该会远高于雪花,不知道我这么理解是否正确,请各位指点。
2、就是在MDX时,现在公司中有的人使用维度中的属性进行查询,而不是层次关系去查询,这样对执行MDX的效率有没有影响,是不是设计好的聚合就不会被使用到?请指点。
已邀请:
3

BIWORK - 热衷于微软BI技术,技术架构和解决方案! 2015-10-09 回答

个人理解:
星型模型和雪花型模型没有绝对的谁好谁不好之分,都是维度建模的一种设计思想,只是看在什么情形下使用。
 
星型模型的提出主要是方便业务人员理解业务模型,通过什么样的维度来看数据,星型模型更加直观,并且查询效率高。雪花型模型对于业务人员来说直观程度不够,并且在查询上效率略低。
 
但是我来举一个反例。
日-月-年,产品-产品小分类-中分类-大分类,国家-省份-地区 加一个事实度量。如果每一个日,月,年类似于这样的都是一张维度表的话,就意味着这张事实表的外键涉及到上述所有的维度,变成 10 个外键维度和一个事实度量。可以想象一下这样的事实就如同一条蜈蚣一样形成了一个蜈蚣事实表,维度外键过多,虽然是星型模型但是实则并不好。
 
退一步说,这张事实表只关联到日,产品,地区这三个维度,日-月-年 成为日期维度的一部分属性,这种情况最终三个维度+一个事实,这种星型模型要稍微好一点。
 
我继续基于这个星型模型再来说明,我假设在产品维度中(产品-小分类-中分类-大分类) 假设小分类,中分类,大分类各有5个非重复的值,但是却有10W个产品。也就意味着在产品维度中,小分类-中分类-大分类差不多要重复10W次。 也就意味中如果要统计分类的量需要从这10W条里面做去重统计操作,这种做法我认为效率很低。
 
再次,如果小分类,中分类,大分类不仅仅是一个标签而且还包含着标签描述信息和其它的属性,可想而知在星型模型下的处理方式就只能扩展同样重复的字段,这种重复率随着需要补充描述的属性越多变得越高。反之,如果再把这些单个的小分类,中分类拉出去形成维度和事实度量值构成一个星型模型,就又回到我刚才说的蜈蚣表了。
 
所以,没有最好的设计,只有最合适的选择,我们就从上面的几个设计推演就能考虑很多星型模型的弊端,在很多时候不一定就是最好的。
 
关于第二个问题可以看看我的这篇文章 - http://www.flybi.net/blog/biwork/1084 微软BI 之SSAS 系列 - 维度的优化、灌木丛属性关系、以及自然层次结构与非自然层次结构的概念
 
3

老头子 - 专注是唯一的捷径 2015-10-09 回答

雪花模型在报表的查询SQL中必定会设计多表关联,在业务逻辑复杂的情况下多表关联会导致Oracle CBO的错误评估,导致错误的执行计划,从而报表查询缓慢,尤其biee这种自动生成SQL的报表工具,所以星型模型会有更好的用户体验,当然也就导致了部分数据冗余,看你关注什么咯~
1

BAO胖子 - 15年BI经验,涉足电力,快消品,医药,信息服务等行业的BI老兵。 2015-10-09 回答

如BIWORK所言,所谓模型无非也是根据实际情况而定,具体问题具体分析。
 
相比雪花模型,星型模型最大的问题是会带来数据不一致的隐患,而当维度表很大时,这个就比较成问题。另外还有一个问题就是,星型模型创建时,忽略和维度与维度之间的关系的描述,而将这种关系都体现在数据里,如果没有很好的模型管理,年深日久这些信息就会丢失以及出现问题。
 
此外,报表下拉时,需要从小表中取数,而不能从大维表里面做distinct,所以小表还是非常有必要保留的。
 
星型模型的好处是,非常有利于诸如BO, Cognos, BIEE这类需要语义层搭建的报表工具,会使模型简单而易于维护,而且这种模式下自动生成的SQL更容易优化,如果都按3NF模式来建,很多时候模型复杂得难以维护。
 
 
另外,蜈蚣表产生的原因很多是为了解决多对多的问题,不完全是星型模型引起的,即使是雪花模型也会有类似的问题。
@老头子 观点也有些不一致的地方,OLAP并不代表低并发, 对于全民BI的系统而言,并发查询是非常高的。而报表筛选一般没有静态写入下拉列表的模式,都是动态从表中获取。
 
1

BIANT 2016-02-03 回答

在实际使用中,看具体情况而定,如果机器性能较好,建议雪花,如果性能不咋地,还是星型;
一般在工作中,没有太多的区分,都是混合着用比较多
0

天善_小龙 2015-10-10 回答

都在讨论星形和雪花形,咱们多多少少也都用过。各自的优缺点在哪里。
 
有没有谁接触过其他的数据仓库模型的? 
0

superboyli520 - 微软BI技术达人 2015-10-13 回答

DW建模做多了,自我感觉没有那个模型是纯粹的标准,我感觉我一直在用混合模型。
业务设计合理化才是DW的设计准则。
0

ZanarKand - 天生我才必有用 2015-10-14 回答

讨论的好激烈啊,一直是 星型模型的支持者,雪花模型性能太差啊。。
0

王小米 - 永远在学习 2015-12-09 回答

现在遇到同样的问题啊,还在纠结中,数据仓库的设计。
0

cognos小白 - 为Cogno而生 2016-01-20 回答

这种讨论,可以出书啊。
0

哥本哈士奇 - 专注微软平台的商业智能解决方案 2016-01-30 回答

以前有前辈说选择star要比snow效率高,尽管有更多的冗余。当然我也没验证过。
0

Iven0814 - 不学BI不是好孩子。 2016-02-05 回答

大牛们的观点非常犀利
0

天涯浪子 - SSRS开发、数据仓库设计 2016-12-19 回答

这个讨论好赞,谢谢大家
0

hl_zhang0912 2018-01-30 回答

也遇到类似问题啊,公司最近弄数据仓库模型这块

要回复问题请先登录注册