数据仓库
一个面向主题的
、集成的
、非易失的
且随时间变化的
数据集合。
主题
是在较高层次上将企业信息系统中的数据进行综合
、归类
和分析
利用的一个抽象概念。
集成性
是指数据仓库中数据必须是一致的
非易失:
数据仓库中的数据是经过抽取而形成的分析型数据
随时间变化:
数据仓库以维的形式对数据进行组织,时间维是数据仓库中很重要的一个维度(不断增加新的数据,删去旧的数据)
数据仓库和数据库的区别
数据库(捕获和存储数据) | 数据仓库 (分析数据) |
---|---|
数据的集合 | 数据的集合 |
事务处理OLTP | 数据分析OLAP |
前端用户 | 管理人员 |
增删改查 | 查询 |
事件记录 | 维度 |
3NF | 星型、雪花 |
OLTP和OLAP的区别
OLTP | OLAP |
---|---|
每次查询只返回少量记录 | 对大量记录进行汇总 |
随机、低延时写入用户的输入 | 批量导入 |
用户,Java EE项目管理人员 | 内部分析师,为决策提供支持 |
最新数据状态 | 随时间变化的历史状态 |
GB | TB到PB |
星型模型
1)、事实表
就是你要关注的内容;
2)、维度表
就是你观察该事务的角度
星型模型是一种多维的数据关系,一个星型模式中可以有一个或多个事实表,每个事实表引用任意数量的维度表。
应用场景:
星型模型的事实表可读性比较好,不用关联多个表就能获取大部分核心信息,设计维护相对比较简答
雪花模型
雪花模型:当有一个或多个维表没有直接连接到事实表上,而是通过其他维表连接到事实表上时,其图解就像多个雪花连接在一起。雪花模型是对星型模型的扩展,它对星型模型的维表进一步层次化
应用场景
:设计方式是比较符合数据库范式的理念,设计方式比较正规,数据冗余少,但在查询的时候可能需要join多张表从而导致查询效率下降,此外规范化操作在后期维护比较复杂
数据ETL
抽取(Extract):
从操作型数据源获取数据
转换(Transform):
转换数据,使之转变为适用于查询和分析的形式和结构
装载(Load):
将转换后的数据导入到最终的目标数据仓库
CDC:Change Data Capture(改变数据捕获)
是数据库级别实现的增量抽取解决方案之一。
基于时间戳的CDC:两列时间,分别记录create_time和modify_time,可以识别变动数据
缺点:
1.无法识别多次更新
2.无法识别删除
3.不具有实时能力
基于触发器的CDC:当执行增删改操作可以使用数据库的触发器来执行,将变更的数据保存到临时表中,然后从临时表抽取数据的ODS层
缺点:影响数据库的性能
基于快照的CDC:每天将mysql的表都导入到ODS层,每天存成一张新表
缺点:占用太多内存
基于日志的CDC:开启binlog,记录增删改操作
flume收集日志工具 + binlog日志= 整合,实时监控,使用flume-ng-sql-source
数据分层
ODS层(近源层)
操作数据层,保存原始数据
该层的数据主要来自业务数据库的 binlog 日志
、埋点日志
和应用程序日志
;
DWD层(数据明细层)
数据来源于ODS层,主要是做一些通用ETL 处理
(去除空值,脏数据,超过极限范围的明细解析),将非结构化的数据结构化,根据主题定义好事实与维度表,保存最细粒度的事实数据
DWS层(数据服务层)
宽表
-用户行为,轻度聚合
,在DWD层的基础之上根据不同的业务需求做轻度汇总;
DM(ADS,数据集市)
做分析处理同步到RDS数据库里边