数据仓库(DW)
是一个面向主题的,集成的,非易失的且随时间变化的数据集合
主要用于组织积累的历史数据,并使用分析法(OLAP、数据分析)进行分析整理,进而辅助决策,为管理者、企业系提供数据支持,构建商业智能。
数据仓库特点:
1.面向主题:为数据分析提供服务,根据主题将原始数据集合在一起
2.集成:原始数据来源于不同数据源,要整合成最终数据,需要经过抽取,清洗,转换的过程
3.非易失:保存的数据是一系列历史快照,不允许被修改,只允许通过工具进行查询、分析(同步过来的数据是不允许被修改的)
4.时变性:数仓会定时接收,集成新的数据,从而反映出数据的最新变化。(业务数据每天的数据都会有变化,数据仓库每天同步一次,目的是为了保证与业务数据库相一致)
数据仓库VS数据库
数据库面向事务设计,属于OLTP(在线事务处理)系统,主要操作是随机读写;在设计时尽量避免冗余,常采用符合范式规范来设计。
数据仓库时面向主题设计的,属于OLAP(在线分析处理)系统,主要操作时批量读写;关注数据整合,以及分析、处理性能;会有意引入冗余,采用反范式方式设计。
数据库 | 数据仓库 | |
面向 | 事务 | 分析 |
数据类型 | 细节、业务 | 综合、清洗过的数据 |
数据特点 | 当前的、最新的 | 历史的、跨时间维护 |
目的 | 日常操作 | 长期信息需求、决策支持 |
设计模型 | 基于ER模型,面向应用 | 星形/雪花模型,面向主题 |
操作 | 读/写 | 大多为读 |
数据规模 | GB到TB | >=TB |
数仓一般存储的是历史的,不可能实时去同步
传统数据仓库
- 由关系型数据库组成MMP(大规模并行处理)集群 :传统数仓因为是由单机数据库发展而来的 由一个单节点,组成一个集群进行数据存储,包括运算。
MPP&分布式架构
MPP架构
- 传统数仓中常见的技术架构,将单机数据库节点组成集群,提升整体处理性能(集群比单机数据库的节点整体性能更,适合大规模数据的处理 )
- 节点间为非共享架构(Share Nothing),每个节点都有独立的磁盘存储系统和内存系统(既可以存储数据,又可以进行运算)
- 每台数据节点通过专用网络或者商业通用网络互相连接,彼此协同计算,作为整体提供服务
- 设计上优先考虑C(一致性),其次考虑A(可用性),尽量做好P(分区容错性)(运算方式,数据管理方式比较精细,更注重锁、事务包括内外层交互的细节,从而保证数据的一致性)
架构优点
- 运算方式精细,延迟低、吞吐低
- 适合中等规模的结构化数据处理
架构缺点
- 存储位置不透明,通过Hash确定数据所在的物理节点,查询任务在所有节点均会执行(没办法确定需要查询的任务在哪个节点所以所有的节点都会执行)。
- 并行计算时,单节点的瓶颈会成为整个系统短板,容错性差(随着节点的增加,集群规模的增大,节点故障率会越来越高,瓶颈故障率会越发明显,这就是MPP数据库扩展性较差的更笨原因)
- 分布式事务的实现会导致扩展性降低
分布式架构
- 大数据中常见的技术架构,也成为Hadoop架构/批处理架构 (MPP架构无法单独运行局部应用,只能作为一个整体对外提供服务)
- 各个节点实现场地自治(可以单独运行局部应用),数据在集群中全局透明共享(MPP不共享数据,但是批处理架构他数据的访问是透明的。)
- 每台节点通过局域网或广域网相连,节点间的通信开销较大,在运算时致力减少数据移动(移动计算而不是移动数据)
MPP + 分布式架构
- 数据存储采用分布式架构中的公共存储,提高分区容错性
- 上层架构采用MPP,减少运算延迟
架构
ETL --> ODS(操作数据源层) -->CDM(公共维度模型层)1.DWD (数据明细层)接受ODS层的数据,最后拿到的是统一规范后的一些数据 这些数据主要还是为数据分析服务,数据明细层对数据清洗完后还不能直接用于数据分析的任务 2. DWS(数据汇总层) 整个CDM层为数据分析提供服务的 -->ADS(数据应用层)报表决策,并发查询,搜索检索。
ETL --Extract-Transform-Load
数据抽取(Extract)
- 抽取的数据源可以分为结构化数据、非结构化数据、半结构划数据
- 结构化数据一般采用JDBC、数据库日志方式,非|半结构化数据会监听文件变动(数据库为了保证数据的可靠性,在对数据进行操作的时候他都会先把这些记录写到日志里,对这种WAL日志的一个采集对数据库的影响是极小的。对采集到的数据库日志需要经过解析之后,才能获取到数据)
抽取方式
- 数据抽取方式有全量同步、增量同步两种方式
- 全量同步会将全部数据进行抽取,一般用于初始化数据装载
- 增量同步方式会检测数据的变动,抽取发生变动的数据,一般用于数据更新
数据转换(Transformation)
- 数据转换要经历数据清洗和转换两个阶段
--数据清洗主要是对出现的重复性,二义性、不完整、违反业务或逻辑规则等问题的数据进 行统一的处理
--数据转换主要是对数据进行标准化处理,进行字段、数据类型、数据定义的转换
- 结构化数据在转换过程中的逻辑较为简单,非|半结构化数据的转换会较为复杂
数据加载(Loading)
- 将最后处理完的数据导入到对应的目标源里
操作数据层(ODS)
在数据仓库中完成数据积存的一个任务,既然要做数据积存的话意味着它ODS层保存的数据是必须与原业务数据保持一致的且不允许修改。保持一致 --ODS层的数据是原始数据的一个扩充集。
- 数据与原业务数据保持一致,可以增加字段用来进行数据管理
- 存储的历史数据是只读的,提供业务系统查询使用
- 业务系统对历史数据完成修改后,将update_type字段更新为UPDATE,追加回ODS中
- 在离线数仓中,业务数据定期通过ETL流程导入到ODS中,导入方式会有全量、增量两种
-- 全量导入:数据第一次导入时,选择此种方式
--增量导入: 数据非第一次导入,每次只需要导入新增,更改的数据,建议使用外连接&全覆 盖方式(每天新增的数据可以直接追加到ODS里面,)
数据明细层(DWD)
- 数据明细层对ODS层的数据进行清洗、标准化、维度退化(时间、分类、地域)(维度是对数据的组织方式,维度也可以是对商品数据的组织)
- 数据仍然满足3NF模型,为分析运算做准备
数据汇总层(DWS)
-
数据汇总层的数据对数据明细层的数据,按照分析主题进行计算汇总,存放便于分析的宽表
-
存储模型并非3NF,而是注重数据的聚合,复杂查询,处理性能能优的数仓模型,如维度模型
数据应用层(ADS)
- 数据应用层也被称为数据集市
- 存储数据分析结果,为不同业务场景提供接口,减轻数据仓库的负担
-- 数据仓库擅长数据分析,直接开放业务查询接口,会加重其负担