数据仓库
数据仓库:
诞生主要有两个原因
历史数据积存的需要
企业数据分析的需要
热数据:使用频率较高的数据
冷数据:使用频率较低的数据
数据仓库特点:
1.面向主题:针对不同的业务分析需求,可能需要多张表联表分组聚合查询
2.集成: 将不同的数据源的数据,进行标准化,整合成统一的数据规范,便于之后进行分析运算(统一单位)
3.非易失: 不允许数据修改,只能通过工具对数据进行查询、分析
4.时变性:
定期去接受、集成新的数据进来,保证与业务数据库数据一致
但是数仓又不允许修改,所以以时间戳标记版本,老旧的数据可以选择定期删除或保留
数据库与数据仓库的区别
# 数据库设计遵守设计范式 数据仓库不遵守设计范式
数据库是面向事务设计的,它属于OLTP(在线事务处理)系统,为业务提供数据存储服务,主要操作是随机读写;在设计时尽量避免冗余,常采用符合规范来设计。
数据仓库是面向主题设计的,属于OLAP(在线分析处理)系统,主要操作是批量读写;关注数据整合,以及分析、处理性能;会有意引入冗余,采用反范式方式设计。
架构设计
# MPP架构
是传统数据仓库中常见的技术架构,将单机数据库节点组成集群,从而提升处理性能
集群中吗,这些节点间使用非共享架构,每个节点拥有独立的磁盘存储和内存系统,在计算过程中独立运行,而不必去关心整个集群的状态,也不关心其他节点存储的数据信息
每台数据节点通过专用网络或者商业通用网络互相连接
优点:MPP数据库更适合中等规模的结构化数据处理,性能上有很好的提现
缺点:随着集群规模的增大,节点的故障率会逐渐升高,瓶颈就会越发明显
# 分布式架构
是大数据中常见的技术架构,也称为Hadoop架构/批处理架构
优点:数据在集群中是全局透明共享的,每个节点拥有自治的运算资源
因为使用了公共的数据存储,所以它的扩展性极强,而且非常适合处理非结构化、半结构化的数据
缺点:在数据量较低的情况下,运行速度远不及MPP架构;但数据量一旦超过某个量级,吞吐量的优势就会极大的发挥出来。
# MPP + 分布式架构
数据存储层采用分布式架构中的公共存储,提升了分区容错性,也将 MPP 的扩展性得到了质的提升。上层处理架构依然采用 MPP,减少运算的延迟
# 总结
MPP 架构和分布式架构的适用场景不同。MPP 适合中等规模的数据处理,延迟低、SQL 支持高是它主要的优势;分布式(批处理)架构更适合海量数据规模的批处理计算,吞吐高、运算速度快、扩展性强是它的优势,而这也是离线批处理数仓所看重的。
MPP + 分布式架构集成了两者的优势,扩展性强、延迟低、SQL 支持率高,实际上是两者间取了个折中,能够在海量数据规模下依然具有较好的低延迟特性。
这些架构并没有好坏之分,对于不同的场景只有适合和不适合之分。如果使用分布式架构的数据仓库对较少的数据量进行交互式的 SQL 查询,需要 5 分钟,但使用传统数仓只需要 1 秒;那不是产品的问题,而是用错的场景而已。
数据仓库技术实现
传统数据仓库(MPP)
优点
1. SQL支持率高
2. 学习成本低
缺点
1. 扩展性有限
2. 热点问题
大数据数据仓库
优点:
1. 解决了扩展性问题
2. 解决了热点问题(将任务分发给负荷最小的机器执行)
缺点:
1. SQL支持率低
2. 缺少事务支持
3. 数据量较少时,计算速度慢
常见数据仓库产品
# 传统数据仓库产品
Oracle RAC
DB2 DPF
Teradata(有钱就用这个)
Greenplum(没钱就凑合)
# 大数据数据仓库产品
Hive
SQL 支持率不高
适合海量数据的跑离线批处理场景
Spark SQL
无需单独安装。而且 Spark SQL 开发起来更为灵活,而且对 Spark 引擎的原生支持也更好,效率也更出色一些
HBase
一般作为结构化数据仓库的补充,更适合存储非结构化、半结构化数据,也可以存储结构化数据
Impala
一般作为数据仓库的补充产品进行使用,当做数据仓库的查询接口
HAWQ
属于 MPP+ 分布式批处理架构。它兼容了两者的特性,SQL 支持率高,性能也比较出色
数据仓库主流架构
架构整体上分为四部分:ETL、ODS、CDM、ADS
ETL
ETL是数据同步模块,将数据从业务数据库经过抽取(extract)、交互转换(transform)、加载(load)至数仓的过程
# 全量同步、增量同步
ODS(操作数据源层)
与原始数据保持一致,不进行任何的修改,目的就是为了原始数据的保存
# 额外添加字段
CDM(公共维度模型层)
主要是为了数据分析提供服务的
1.DWD(数据明细层)
针对数据进行清洗、标准化,剔除异常,统一编码、单位、字段描述等
2.DWS(数据汇总层)
按照分析主题对数据汇总、聚合后,存储到DWS(数据汇总层)中进行存储
# 最核心
ADS(数据应用层)
数据分析人员对 DWS(数据汇总层)的数据进行分析运算后,会将最终的结果表存储到 ADS 层中
建模
OLTP
遵循三大范式设计,减少冗余
OLAP
反三大范式设计,增加冗余
1.ROLAP
关系型
2.MOLAP
多维型
3.HOLAP
混合型
典型的数据仓库的建模方法有 ER 模型、维度模型、Data Value、Anchor
ER模型是比较经典的一种数据仓库模型
维度模型是最流行的数据仓库建模经典,也很贴合现在互联网企业的场景
ROLAP
# 一般常见的维度类型有:分类、时间、地域等
# 筛选条件就是维度,而筛选出来的手机数据就是事实
1.星型模型
标准的星型模型维度只有一层,分析性能最优
中间为事实表,然后通过 key 值的记录来关联其他维度表。
2.雪花模型
雪花模型具有多层维度,比较接近三范式设计,较为灵活,但牺牲掉了部分分析性能
3.星座模型
星座模型基于多个事实表,事实表之间会共享一些维度表
4.宽表模型
将维度表拼接到事实表中,形成宽表,以减少 join 操作,所以适合 join 性能不佳的数据仓库产品
MOLAP多维模型
1.Cube模型
使用方法也类似于魔方一样,不管从哪个维度查询都很快
需要大量的时间、空间。维度的预处理也可能会导致数据的膨胀
常见产品
Kylin、Druid
OLAP多维分析
上卷
多合一
# 驱蚊剂、防晒设备、急救用品,这些都是属于户外防护用品的子集
下钻
一拆多
# 户外防护用品,之后细分为驱蚊剂、防晒设备、急救用品
切片
切一刀
# 单独对 2004 这个维度进行查询,称为切片
切块
切多刀
# 对时间维度中的 2004 进行切片后,再对登山设备进行切片,称为切块
旋转
调整方向
# 称为切块 初始条件是先查询产品类型,然后再对时间进行筛选,对维度进行旋转后可变为先对时间进行筛选,然后再查询产品类型
数据仓库之表分类
在维度建模中,表类型分为事实表、维度表,而事实表又可以细分为事务事实表、周期快照事实表、累积快照事实表
# 事实表
指一个现实存在的业务对象
# 维度表
维度表一般是指对应一些业务状态,对数据起到筛选、组织作用
如订单状态表,商品分类表
# 事务事实表
一旦产生不会再变化,如交易流水、操作日志、出库入库记录
对事实事实表的操作只存在插入,而不存在修改
# 周期快照事实表
主要用于完成间隔周期内的度量统计,如年初至今的下单金额(年累计下单金额)、当前季度至今的下单金额
对周期快照事实表的操作是插入,也不存在修改的现象
# 累积快照事实表
累计快照事实表通常有多个时间字段,用于记录生命周期中的关键时间点
只有一条记录,针对此记录不断更新。
# 拉链表
用于记录每条信息的生命周期,用于保留数据的所有历史(变更)状态
生效结束日期为 9999-99-99 时,表示为最新的数据。当数据发生变动时,先进行修改旧数据的生效结束日期,然后再插入新数据
ETL同步策略
# 全量同步
数据初始化装载的时候,一定使用的是全量同步的方式
技术实现比增量同步简单
对于结构化数据,常用工具采用的是 JDBC 的方式直接连接到数据库进行抽取
如果存在风险,或者周期过长,可以采用抽取数据库日志的方式
使用特定工具来进行,如 Oracle 采用的是 OGG 方式,而 MySQL、SQL Server 等使用 CDC 方式
# 增量同步
数据规模巨大的情况下,第一次数据以全量方式同步到数据仓库后,之后的数据可以使用增量采集的方式进行
对于结构化数据,增量数据采集方式推荐对数据库日志进行抽取
如 Oracle 提供的 OGG 方式,开源的 CDC 技术,它是增量同步的一种通用的解决方案;当然也可以直接
对数据库使用 JDBC 方式进行抽取,此时数据需要有 create_time 和 update_time 字段,以便使用 SQL 筛选新增和修改的数据
任务调度
在分布式集群中,主流的调度工具有 Azkaban、Oozie
相对于 Oozie 而言,Azkaban 功能更为强大,且易用性更好,在企业选型中更受欢迎
出自作者:布是刺猬