Python+Superset:商业智能数据分析与实战
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.2 数据仓库技术

数据仓库是一个单一的数据存储工具,用于分析报告和支持决策,本节将介绍系统数据仓库的构建过程及数据仓库的拉链算法。

3.2.1 数据仓库构建过程

该系统的数据仓库构建于Hadoop分布式系统之上,与关系型数据库MySQL融合在一起,它们互相协作,共同完成数据清理、处理等任务,将不同数据分别写到Hadoop和MySQL中,并在各个层间传输数据。

1. 数据仓库的层级

数据仓库主要分为ODS层、DWD层、DWA层、DM层,可以满足不同用户的业务需求。

(1)ODS层。ODS(Operational Data Store)为数据的临时存储层,是用户浏览系统的详细数据文件及客户注册类数据的临时存储区域,为进一步的数据处理和清洗做准备。在一般情况下,由于ODS层的数据直接来自业务系统,因此,该层的数据和业务系统的数据是同构的,主要目的是为数据的处理、加工做准备。从数据粒度方面来说,ODS层的数据粒度是最细的。ODS层用于存储当前所需要加载的数据,也可以用来存储处理完的历史数据。

(2)DWD层。DWD(Data Warehouse Detail),是数据仓库的细节数据层,对ODS层数据进行沉淀,减少了抽取的复杂性。同时,DWD层的信息模型组织主要采用企业业务事务处理的形式,将各个专业数据进行集中,为企业进行经营数据的分析。系统将数据按分析主题的形式存放,与ODS层的粒度一致,属于分析的公共资源。

(3)DWA层。DWA(Data Warehouse Aggregate Data),是数据仓库的衍生汇总数据层,通过对DWD层数据进行预处理(轻度汇总、衍生),提高了后续数据处理和访问性能。其特点是面向各部门但不直接支持应用,将应用过程中的常用信息进行共同沉淀和处理,作为DWD层和DM层之间的一个过渡层次,与DWD层共同构成企业级数据仓库。

(4)DM层。数据集市(Data Mart),也称作数据市场,该层的数据是经过层层加工、处理后的数据,由于其主要面向某一个业务部门,因此,一个企业可以拥有多个数据集市。数据集市中的数据有可能从企业其他的数据仓库、数据库加工处理而来。数据集市只关心某一个领域内的数据,不会全盘考虑企业整体的数据架构和应用。每个应用都有自己的DM为专题经营分析服务,系统将数据按分析的专题组织成多维表的形式存放,属于分析目标范畴的数据组织与汇总,是分析的专有资源。

3.2.2 数据仓库拉链算法

采用拉链算法构造用户类信息模型可以极大地节约用户类信息所占的存储空间,因为用户类信息数据是被频繁使用的,所以相对于一般的建模方法,采用拉链式算法的数据库的维护工作可以在很大程度上保持良好的运行状态,为数据仓库的维护提供更大的便利。

我们设计的数据仓库架构是将Hadoop与MySQL、Hive相结合,用来存储用户购物、上网及其他细节类别的数据,并将关系型数据库的网址相关资料存储起来,当数据量越来越大时,数据库的性能会不可避免地受到影响。

针对此问题,我们使用拉链算法存储数据,因为用户的成员级别并不会频繁改变,例如,2020年11月11日某位会员是铜牌会员,而升为银牌会员则可能要花费数月甚至一年,若该会员需要一年时间才能提升为银牌会员,那么使用原始的存储方法将需要储存365份数据,而用拉链算法构造的模型则只需记录一条记录,因而运用拉链算法可以有效地避免MySQL数据库因数据量过大而产生的压力,同时可以节约存储空间。

在这个信息爆炸的时代,每天有数千万的企业数据要记录,尽管像Hadoop、Spark等大数据处理平台已经涌现出来,但是它们对一些数据的实时计算能力还不够强,这部分数据仍然存储在MySQL等关系型数据库中,这种存储时间较长的数据量也比较大,使用拉链算法可以节约大量的存储空间,从而保持MySQL数据库的高性能。

拉链算法就是把每一次载入数据都当作一次提取的源表数据来处理,在载入目的表的时候要考虑数据的历史。拉链算法引入拉链的概念,记录每一个主键改变的起始时间和结束时间,这一方法经常采用增量拉链加载策略,以历史表情况为目标,因为数据仓库中记录了大部分数据历史表,所以增量拉链加载策略是数据仓库中较为普遍的一种加载策略。

在一般情况下,这类历史表都包含start_date和end_date属性,将这两个字段与源数据表和目标表进行全面比较,以求出真正的增量数据,这样处理全量数据会极大地提高存储空间的利用率,因此从某种程度上减轻了数据库的压力,提高了数据库性能,此外,它还具有捕捉数据变化、便于获得数据等优点。