vlambda博客
学习文章列表

5分钟读懂数据仓库四种存储策略!

想要入行大数据行业,你还不知道数据仓库的四种存储策略?


不慌,给我5分钟,我给你整明白儿滴!


所谓的数据仓库的四种存储策略,通俗的说就是全量表、增量表、快照表、拉链表。对大数据有些了解的朋友应该都听说过这四种表,但这四种表究竟代表了什么,有什么特点,又分别应该怎么使用呢?

作为背景知识,首先介绍一下数据仓库中分区的概念。

以最常见的以天为单位的日期分区为例,数据仓库将不同日期产生的数据保存在不同的日期分区中。初学者可以先形象地将分区这个概念理解为表格的一个属性,即在表中增加了一个分区列。

“分区”的概念示意

用户id

订单id

……

创建时间

分区

A

001


2020-03-13

2020-03-13

B

002


2020-03-14

2020-03-14

例如:数据仓库中有一张用户订单表,用来存储用户的订单信息。2020313日用户A购买了1笔订单,2020314日用户B购买了1笔订单。那么用户A购买订单的数据将被保存在用户订单表的2020-03-13分区中,而用户B购买订单的数据将被保存在用户订单表的2020-03-14分区中。


好了,不多说,盘它!


一、全量表


全量表是最容易理解的了,简单说就是数据仓库上一层将下一层的数据全部存储,全量表只有当前的全量数据,没有分区,无法记录历史数据。由于无法追溯历史数据,在实际工作中,全量表并不常用,一般只有对特殊的编码表、流水表等使用全量表存储。


二、增量表


增量表可以算是使用频率最高的表,尤其是在数据仓库底层。增量表是数据仓库上一层仅存储下一层当天的新增或修改数据,每天的新增、修改数据作为一个分区单独存储,不同日期的新增、修改数据存储在不同分区。当天没有发生变化的数据不会被存储。


三、快照表


理解了全量表与增量表,就很容易理解快照表的概念了。可以将快照表理解为有分区的全量表,快照表与增量表一样有时间分区,增量表的每个分区中存储的是当天新增或修改的数据,而快照表的每个分区中存储当天全量数据,即快照表的每个分区就是当天的全量表。


四、拉链表


上面三种存储策略都很容易理解,终极大BOSS拉链表可没那么容易了。要理解拉链表,首先想象我们常用的裤子拉链,拉开,闭合……好了,相信你们脑子里已经有画面了。

下面是拉链表中一条数据的历程:202021日,有一个新用户A注册了我们的产品,系统为他分配了用户id001,这时我们的用户表就有了下面的数据,这叫“开链”,表中的闭链时间是一个代表未来的时间。

用户id

用户名

注册时间

开链时间

闭链时间

分区

001

A

2020-02-01

2020-02-01

9999-01-01

9999-01-01

过了一个月,用户A已经熟悉了我们的产品,他用腻了用户名A,于是202032日,他将用户名改成A’。这时原先的数据首先要“闭链”,然后重新“开链”。

闭链数据:

用户id

用户名

注册时间

开链时间

闭链时间

分区

001

A

2020-02-01

2020-02-01

2020-03-01

2020-03-01

重新开链:

用户id

用户名

注册时间

开链时间

闭链时间

分区

001

A’

2020-02-01

2020-03-02

9999-01-01

9999-01-01

经过了闭链和重新开链,最终的拉链表:

用户id

用户名

注册时间

开链时间

闭链时间

分区

001

A

2020-02-01

2020-02-01

2020-03-01

2020-03-01

001

A’

2020-02-01

2020-03-02

9999-01-01

9999-01-01

拉链表就是通过这么反复开链与闭链的过程,将数据的每次变化轨迹存储起来,总结一下,表中闭链的数据是数据曾经经历过的历史状态,开链的数据代表当前的有效数据状态。


好啦,完工!