阅读笔记——《大数据之路》

10 维度设计

10.1 维度设计基础

10.1.1 维度的基本概念

        维度是维度建模的灵魂。维度是用于分析事实所需要的多样环境。一般用于查询约束、分类汇总以及排序等。维度所包含的表示维度的列,称为维度属性

        如何获取维度或者维度属性?

        (1)报表  (2)业务人员交谈。  因为它们经常出现在查询或报表请求中的按照语句内。入:用户要 按照 月份和产品来查看销售情况。

        维度使用主键标识其唯一性,主键也是确保与之相连的任何事实表之间存在引用完整性的基础。

10.1.2 维度的基本设计方法

10.1.4 规范化和反规范化

        当属性层次被实例化为一系列维度,而不是单一的维度时,被称为雪花模式。大多数的OLTP系统的底层数据结构在设计时采用此种规范化技术,通过规范化处理将重复属性移至其自身所属的表中,删除冗余数据。

        比如在OLTP系统中,存在商品表和类目表,且商品表中有冗余的类目表的属性字段,假设对某类目进行更新,则必须更新商品表和类目表,且由于商品和类目是一对多的关系,商品表可能每次需要更新几十万甚至上百万条记录,这是不合理的。而对于OLAP系统来说,数据是稳定的,不存在OLTP系统中所存在的问题。

10.1.5 一致性维度和交叉探查

        将不同数据域的商品的事实合并在一起进行数据探查,如计算转化率等,成为交叉探查。维度一致性方法:

        (1)共享维表。比如在阿里巴巴的数据仓库中,商品、卖家、买家类目等维度有且只有一个。所以基于这些公共维度进行的交叉探查不会存在任何问题。

        (2)一致性上卷。其中一个维度的维度属性是另一个维度的维度属性的子集,且两个维度的公共维度属性结构和内容相同。比如在阿里巴巴的商品体系中,有商品维度和类目维度,其中类目维度的维度属性是商品维度的维度属性的子集,且有相同的维度属性和维度属性值。这样基于类目维度进行不同业务过程的交叉探查也不会存在任何问题。

        (3)交叉属性。两个维度具有部分相同的维度属性。比如在商品维度中具有类目属性,在卖家维度中具有主营类目属性,两个维度具有相同的类目属性,则可以在相同的类目属性上进行不同业务过程的交叉探查。

10.2 维度设计高级主题

10.2.1 维度整合        

(1)垂直整合,即不同的来源表包含相同的数据集,只是存储的信息不同。比如淘宝会员在源系统中有多个表,如会员基础信息表会员扩展信息表、淘宝会员等级信息表、天猫会员等级信息表,这些类都属于会员相关信息表,依据维度设计方法,尽量整合至会员维度模型中,丰富其维度属性。

(2)水平整合,即不同的来源表包含不同的数据集,不同子集之间无交叉,也可以存在部分交叉。比如针对蚂蚁金服的数据仓库,其采集的会员数据有淘宝会员、1688 会员、国际站会员、支付宝会员等是否需要将所有的会员整合到一个会员表中呢?如果进行整合,首先需要考虑各个会员体系是否有交叉,如果存在交叉,则需要去重;如果不存在交叉,则需要考虑不同子集的自然键是否存在冲突,如果不冲突则可以考虑将各子集的自然键作为整合后的表的自然键;另一种方式是设置超自然键,将来源表各子集的自然键加工成一个字段作为超自然键。在阿里巴巴,通常采用将来源表各子集的自然键作为联合主键的方式,并且在物理实现时将来源字段作为分区字段。

 10.2.2 水平拆分

 维度通常可以按照类别或类型进行细分。比如航旅的商品和同分的淘系商品,都属于商品,都有商品价格、标题、类型。上架时间目等维度属性,但是航旅的商品除了有这些公共属性外,还有酒店象点、门票、旅行等自已独特的维度属性。

针对此问题,主要有两种解决方案:方案1 是将维度的不同分类实例化为不同的维度,同时在主维度中保存公共属性,方案2是维护单一维度,包含所有可能的属性。

根据数据模型设计思想,在对维度进行水平拆分时,主要考虑如下两个依据。

        第一个依据是维度的不同分类的属性差异情况。当维度属性随类型变化较大时,将所有可能的属性建立在一个表中是不切合实际的,也没有必要这样做,此时建议采用方案 1。定义一个主维度用于存放公共属性,同时定义多个子维度,其中除了包含公共属性外,还包含各自的特殊属性。比如在阿里巴巴数据仓库维度体系中,依据此方法,构建了商品维度、航旅商品维度等。公共属性一般比较稳定,通过核心的商品维度,保证了核心维度的稳定性,通过扩展子维度的方式,保证了模型的扩展性。

        第二个依据是业务的关联程度。两个相关性较低的业务,耦合在一起弊大于利,对模型的稳定性和易用性影响较大。比如在阿里巴巴数据仓库维度体系中,对淘系商品和 1688 商品构建两个维度。虽然淘系和1688 在底层技术实现上是统一的,但属于不同的 BU,业务各自发展:在数据仓库层面,淘系和 1688 属于不同的数据集市,一般不会相互调用。

 10.2.3 垂直拆分

为什么要垂直拆分?

(1)由于维度分类的不同而存在特殊的维度属性

(2)某些维度属性的来源表产出时间较早,而某些维度属性的来源表产出时间较晚,或者某些维度属性的热度高、使用频繁,而某些维度属性的热度低、较少使用,或者某些维度属性经常变化,而某些维度属性比较稳定。

出于扩展性、产出时间、易用性等方面的考虑,设计主从维度。主维表存放稳定、产出时间早、热度高的属性;从维表存放变化较快、产出时间晚、热度低的属性。比如在阿里巴巴数据仓库中,设计了商品主维度和商品扩展维度。其中商品主维度在每日的 1:30 左右产出,而商品扩展维度由于有冗余的产出时间较晚的商品品牌和标签信息,在每日的 3:00 左右产出。

10.3 维度变化

10.4 特殊维度

10.4.3 多值维度

(1)降低事实表的粒度

(2)采用多字段

(3)采用较为通用的桥接表

11 事实表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值