zoukankan      html  css  js  c++  java
  • 搭建数据仓库第09篇:物理建模

    归纳起来就是

    • 主题域设计
    • 分层设计
    • 维度建模反第三范式操作,星型模型和星座模型
    • 分区设计

    依照逻辑模型,在数据库中进行建表、索引等。数据仓库,为了满足高性能的需求,可以增加冗余、隐藏表之间的约束等反第三范式操作

    这一阶段,主要针对的是数据库、硬件、性能。

    范式

    第一范式:数据库表的字段都是单一属性,不可再分。

    第二范式:数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖。

    (部分函数依赖指的是存在组合关键字中的某些字段决定非关键字段的情况)。即要求所有属性都依赖于主键。

    第三范式:数据库表中不存在非关键字段对任一候选关键字段的传递函数依赖

    星型模型和雪花模型

    首先,他们都是由一个事实表和一组维度表组成。

    星型模型,也被称为维度建模

    区别在于:

    星型模型:维度表直接跟事实表连接,图型像星星。

    如区县和地市做为同一维度都在地市表中。

    *维度预处理,维度会预先进行分类,排序等预处理。

    雪花模型:一些维度表不是直接与事实表连接,而是通过维度表中转,图形像雪花。

    例如:

    clip_image007

    图1:星型模型

    clip_image009

    图2 雪花模型

    从性能来看,星型模型查询性能好。

    为了提高性能,可以允许违反第三范式,适当的冗余、隐藏表之间的约束。

    clip_image010

    维度建模

    将商业维度融合到数据模型中,由此得名维度建模。

    或者说,为了分析方便(商业应用要求),将同一维度的不同层次的维度(如地市ID,区县ID)都融合到事实表中(如用户宽表)。

    维度模型也是星型模型。

    它 强调的是先对维度进行预处理,将多个维度集合到一个事实表,形成一个宽表,如上面的用户统一视图。包含了20多个维度。这样可以组合各维度,形成灵活的报表查询。

    clip_image012

    B. 分层设计原则

    电信行业的数据仓库都采用了分层设计原则。

    总的来说,分三层:接口层、中间汇总层和应用层。

    应用层

    数据集市

    地市数据集市、数据挖掘

    应用层

    KPI报表、cagnos、主题分析、指标库

    中间层

    深度汇总层

    信息聚合:用户统一视图、3G用户统一视图、固话用户统一视图

    业务拓展:用户行为、增值业务、集团业务、国际业务

    轻度汇总层

    清单汇总、用户属性聚合、费用汇总、集团客户汇总等

    接口层

    存储层

    接口备份、增量转全量、减少I/O(分常用数据和历史数据)

    接口层

    日接口、月接口、增量接口、全量接口

    特别强调的是:

    中间层是数据仓库最重要的一层。直接决定了数据仓库的性能。

    一般的做法是:

    1)数据汇总。将底层数据按维度进行小颗粒度汇总

    2)信息聚合。将多张表的信息聚合在一个表中。这样的好处,是避免使用表关联,提高查询性能。

    C. 主题域设计方法

    如果说分层设计,是横向的设计原则,那么主题分域是纵向的处理方法。

    具体做法就是从业务上,高度的抽象和归纳,将数据划分为不同的主题域。

    分域后的好处:业务紧耦合、便于数据拓展、便于使用。

    域是要具有明显的表命名规则,如:

    用户信息域—— user

    通信行为—— call

    数据业务—— gprs

    账务 —— bill

    客户服务—— serv

  • 相关阅读:
    springBoot单元测试-模拟MVC测试
    springBoot单元测试-基础单元测试
    java使用HttpClient 发送get、pot请求
    定时任务框架-quartz 时间配置
    定时任务框架-quartz
    java接入极光推送
    实现自动解析properties文件并装配到Bean
    Redis-NoSql 概述,NoSql的优点
    springboot
    JAVA常见集合类
  • 原文地址:https://www.cnblogs.com/benchen/p/6571743.html
Copyright © 2011-2022 走看看