白话数据仓库

大数据时代,人人离不开数据,但是数据是怎么组织管理,如何为我们的生活服务的呢? 作为一个数据从业者,基于我个人的理解白话下。

数据与生活


对比线下时代,数据从两个方面提升了大家的生活:

  1. 交易,技术上对应的术语叫联机事务处理(OLTP online transaction processing),数据是交易系统中流淌的血液,他可以对应你在电商上的一个订单、一件商品、一笔支付流水,通常使用数据库进行数据管理
  2. 分析,技术上对应的术语叫联机分析处理(OLAP online analysis processing),数据是分析系统的原料,通过数据分析电商上可以给你推荐商品、进行产品定价、销量预测,通常使用数据仓库进行数据管理

白话数据仓库_第1张图片

本文从下面几个角度给大家介绍下数据仓库。

什么是数仓


数据库(主要指关系型数据库)为交易系统提供底层服务,支持数据的增删查改,且要求高度的范式保障(具备ACID特性,即原子性、一致性、隔离性、持久性),实现了快速的事务响应和吞吐; 分析系统对数据的要求:

  1. 数据体量巨大(可以了解大数据的4V理论)
  2. 数据查询为主,且持久的数据存储(通常不进行删除、更新操作)
  3. 数据的设计更好的支持分析决策

数据仓库就是一种面向数据分析决策需求的系统性解决方案,用数据模型描述映射现实世界,面向不同的场景制定数据建设规范,同时确保高效安全稳定的数据生产。

数据模型


前面提到数据模型是对现实世界的映射,常见的模型有:层次模型、网状模型、关系模型:

  1. 关系模型,对应关系型数据库,用表格方式映射现实世界;通过表、行、字段等表示了显示世界中的对象、对象属性、对象之间的关系;结构简单、级联查询效率低
  2. 网状模型,对应图数据库,结构复杂,不方便维护;典型的数据库有neo4j titan等,在社交网络分析中有一定应用场景
  3. 层次模型,用树来映射现实世界;查找方便、结构呆板

目前应用最广泛的是关系模型,具体到数据仓库有有两种建模方式:
Inmon企业信息工厂架构 vs Kimball总线体系结构
白话数据仓库_第2张图片

建模方式 范式建模 维度建模
特点 更像数据库 少冗余 字段只依赖主键 一系列的事实表 + 维度表,结构上冗余较多,相对灵活
建设方式 自顶而下的建设方式 自下而上方式构建
业务适应 适应业务变化偏弱 较好适应业务变化
模型 3NF范式模型 星型模型或者雪花模型

目前主流互联网的数据仓库建设都选择维度模型,或者在公共数据域采用相对固定的范式建模,在数据应用层采用更灵活的维度模型。

维度模型


维度模型中最重要的两个概念:

  1. 维度—看世界、事务的角度; 层次维、变化维、角色扮演维、分类维、其他类
  2. 事实—对世界、事务的度量

白话数据仓库_第3张图片

维度模型常见建模方式:

  1. 星型模型(上图就是典型的星型模型)
  2. 雪花模型(事实-维度-子维度组合)
  3. 星座模型(多事实多维度)
  4. 数据立方体cube(预处理 快速分析使用)

维度模型的设计

通过数据来映射现实世界,进行维度建模的时候通常遵循下面的设计流程:
从业务需求出发,将业务流程进行拆分,颗粒度细到我们可以用维度+事实来描述事物,将现实世界中事物抽象为具体的表、字段,并通过示例数据、业务规则进行辅助说明

数仓的分层


通过维度模型我们构建了现实事物的数据映射后,事物发展的过程中我们不断的进行数据采集,最终的数据量是非常巨大的(4V的volume),通常这种数据是无法直接进行分析使用的,我们需要对数据进行逐层的收敛聚合,于是产生了数仓分层的概念。

在介绍数仓分层之前我们先介绍下数据仓库的管理工具Hive

数据仓库与hive

hive基于hadoop的数据仓库工具,用来进行数据提取、转化、加载,可以存储、查询和分析存储在hadoop中的大规模数据的机制; hive将hdfs中结构化的数据文件映射为一张张数据库表,提供sql查询功能,将sql转换为mr计算(穿插了hadoop的整个体系,给用户熟悉的SQL方式进行数据的处理和交互)

hadoop三大模块: hdfs分布式存储、yarn调度系统、mr计算系统。使用hadoop体系构建数据仓库可以支持大容量、分布式的存储和计算

数仓分层及复用

常见的数仓分层:
白话数据仓库_第4张图片

  1. 基础层/ods层数据,一般是通过datasink的技术将oltp系统中记录的数据、日志等转移到数仓,数据的转移有离线、实时等多种处理方案,具体参考数据时效性要求、数据容量以及处理成本
  2. 仓库层,以事实表+维度表的方式进行数据的管理,其中的事实表又区分原子事实表、聚集事实表(di)、累积事实表(df)
  3. 主题层/应用层,按照业务主题进行数据组织,必要情况会使用宽表进行事实和维度的组合,主题层也会按照分析的需求进行数据的预聚合,形成一系列的指标表

在数据分层设计的时候要确保:

  1. 尽量的数据复用,即同层内部确保数据少冗余
  2. 层之间的边界确定,考虑数据的容量、处理的成本、查询的要求等

为了提升数据处理的速度在引擎层面、计算层面也有一些提升的技术:

  1. 引擎层:通过spark进行更快速的计算(替代MR);通过flink计算引擎提供实时的数据流处理能力
  2. 存储层:druid、clickhouse、hbase等kv、列式存储技术在数据查询、分析场景提供更快的处理速度

以上介绍数据仓库的一些基本概念,下一篇我们介绍如何使用hive sql查询获取数据仓库中的数据。

关于作者:
大家好,我是数据展博,致力于在生活和工作中更好的理解数据、应用数据,让数据说话,用数据赚钱、数据使生活更美好。

你可能感兴趣的:(大数据,数据仓库,数据建模)