本文已参与「新人创作礼亅活动,一起开启掘金创作之路。
数据仓库与数据模型总结
1. 数据仓库
1.1 数据仓库的概念
官方定义 数据仓库是一个面向主题的、集成的、随时间变化的、但信息本身相对稳定的数据集合,用于对管理决策过程的支持。 这个定义的确官方,但是却指出了数据仓库的四个特点。 特点 面向主题:数据仓库都是基于某个明确主题,仅需要与该主题相关的数据,其他的无关细节数据将被排除掉 集成的:从不同的数据源采集数据到同一个数据源,此过程会有一些ETL操作 随时间变化:关键数据隐式或显式的基于时间变化 信息本身相对稳定:数据装入以后一般只进行查询操作,没有传统数据库的增删改操作 效率足够高:数据仓库的分析数据一般分为日、周、月、季、年等,可以看出,日为周期的数据要求的效率最高,要求24小时甚至12小时内,目前普遍的数据展现方式为T+1,即当日处理昨日的业务数据。 数据质量:基于数据仓库的应用所面对的一般为企业决策层用户,所以对数据仓库提供的各种信息,肯定要准确的数据;但由于数据源有脏数据或者代码不严谨,所以数据仓库流程通常分为多个步骤,包括数据抽取,清洗,转换,装载,查询,展现等等;其中数据清洗则主要对抽取过来各数据源的脏数据和不规范数据进行统一标准化。 扩展性:有的大型数据仓库系统架构设计复杂,是因为考虑到了未来3-5年的扩展性,这样的话,未来不用花太多时间去重建数据仓库系统,就能很稳定运行。主要体现在数据建模的合理性,数据仓库方案中多出一些中间层,使海量数据流有足够的缓冲,不至于因为数据源的变动而导致用户应用功能的频繁变动。
个人理解 数据仓库就是整合多个和多种数据源的历史和现在的数据进行细粒度的、多维度的分析,帮助高层管理者或者业务分析人员做出商业战略决策或商业报表。唤醒企业沉睡多年的历史数据。
1.2 数据仓库的用途
• 整合公司所有业务数据,建立统一的数据中心 • 产生业务报表,用于作出决策 • 为网站运营提供运营上的数据支持 • 可以作为各个业务的数据源,形成业务数据互相反馈的良性循环 • 分析用户行为数据,通过数据挖掘来降低投入成本,提高投入效果 • 开发数据产品,直接或间接地为公司盈利 • …
1.3 数据库和数据仓库的区别
| 差异项 | 数据库 OLTP | 数据仓库 OLAP |
|---|---|---|
| 特征 | 操作处理 | 信息处理 |
| 面向 | 事务 | 分析 |
| 用户 | DBA、开发 | 经理、主管、分析人员 |
| 功能 | 日常操作 | 长期信息需求、决策支持 |
| DB设计 | 基于ER模型,面向应用 | 星形/雪花模型,面向主题 |
| 数据 | 当前的、最新的 | 历史的、跨时间维护 |
| 汇总 | 原始的、高度详细 | 汇总的、统一的 |
| 视图 | 详细、一般关系 | 汇总的、多维的 |
| 工作单元 | 短的、简单事务 | 复杂查询 |
| 访问 | 读/写 | 大多为读 |
| 关注 | 数据进入 | 信息输出 |
| 操作 | 主键索引操作 | 大量的磁盘扫描 |
| 用户数 | 数百到数亿 | 数百 |
| DB规模 | GB到TB | >=TB PB EB |
| 优先 | 高性能、高可用性 | 高灵活性 |
| 度量 | 事务吞吐量 查询吞吐量、 | 响应时间 |
2.数据模型
在数据仓库的建设中,一般都会围绕着星型模型和雪花模型来设计表关系或者结构。下面我们先来理解这两种模型的概念。
(一)星型模型图示如下:
星型模是一种多维的数据关系,它由一个事实表和一组维表组成。每个维表都有一个维作为主键,所有这些维的主键组合成事实表的主键。强调的是对维度进行预处理,将多个维度集合到一个事实表,形成一个宽表。这也是我们在使用数仓时,经常会看到一些大宽表的原因,大宽表一般都是事实表,包含了维度关联的主键和一些度量信息,而维度表则是事实表里面维度的具体信息,使用时候一般通过join来组合数据,相对来说对OLAP的分析比较方便。
(二)雪花模型图示如下
当有一个或多个维表没有直接连接到事实表上,而是通过其他维表连接到事实表上时,其图解就像多个雪花连接在一起,故称雪花模型。雪花模型是对星型模型的扩展。它对星型模型的维表进一步层次化,原有的各维表可能被扩展为小的事实表,形成一些局部的 "层次 " 区域,这些被分解的表都连接到主维度表而不是事实表。雪花模型更加符合数据库范式,减少数据冗余,但是在分析数据的时候,操作比较复杂,需要join的表比较多所以其性能并不一定比星型模型高。
(三)星型模型和雪花模型的优劣对比:
| 属性 | 星型模型 | 雪花模型 |
|---|---|---|
| 数据总量 | 多 | 少 |
| 可读性 | 容易 | 差 |
| 表个数 | 少 | 多 |
| 查询速度 | 快 | 慢 |
| 冗余度 | 高 | 低 |
| 对实时表的情况 | 增加宽度 | 字段比较少,冗余底 |
| 扩展性 | 差 | 好 |
(四)应用场景
星型模型的设计方式主要带来的好处是能够提升查询效率,因为生成的事实表已经经过预处理,主要的数据都在事实表里面,所以只要扫描实时表就能够进行大量的查询,而不必进行大量的join,其次维表数据一般比较少,在join可直接放入内存进行join以提升效率,除此之外,星型模型的事实表可读性比较好,不用关联多个表就能获取大部分核心信息,设计维护相对比较简单。 雪花模型的设计方式是比较符合数据库范式的理念,设计方式比较正规,数据冗余少,但在查询的时候可能需要join多张表从而导致查询效率下降,此外规范化操作在后期维护比较复杂。
(五)总结
通过上面的对比,我们可以发现数据仓库大多数时候是比较适合使用星型模型构建底层数据表,通过大量的冗余来提升查询效率,星型模型对OLAP的分析引擎支持比较友好,这一点在报表中比较能体现。而雪花模型在关系型数据库中如MySQL,Oracle中非常常见,尤其像电商的数据库表。在数据仓库中雪花模型的应用场景比较少,但也不是没有,所以在具体设计的时候,可以考虑是不是能结合两者的优点参与设计,以此达到设计的最优化目的。