5分钟读懂数据仓库四种存储策略!
想要入行大数据行业,你还不知道数据仓库的四种存储策略?
不慌,给我5分钟,我给你整明白儿滴!
所谓的数据仓库的四种存储策略,通俗的说就是全量表、增量表、快照表、拉链表。对大数据有些了解的朋友应该都听说过这四种表,但这四种表究竟代表了什么,有什么特点,又分别应该怎么使用呢?
作为背景知识,首先介绍一下数据仓库中“分区”的概念。
以最常见的以天为单位的日期分区为例,数据仓库将不同日期产生的数据保存在不同的日期分区中。初学者可以先形象地将“分区”这个概念理解为表格的一个属性,即在表中增加了一个“分区”列。
“分区”的概念示意
用户id |
订单id |
…… |
创建时间 |
分区 |
A |
001 |
2020-03-13 |
2020-03-13 |
|
B |
002 |
2020-03-14 |
2020-03-14 |
例如:数据仓库中有一张用户订单表,用来存储用户的订单信息。2020年3月13日用户A购买了1笔订单,2020年3月14日用户B购买了1笔订单。那么用户A购买订单的数据将被保存在用户订单表的2020-03-13分区中,而用户B购买订单的数据将被保存在用户订单表的2020-03-14分区中。
好了,不多说,盘它!
一、全量表
全量表是最容易理解的了,简单说就是数据仓库上一层将下一层的数据全部存储,全量表只有当前的全量数据,没有分区,无法记录历史数据。由于无法追溯历史数据,在实际工作中,全量表并不常用,一般只有对特殊的编码表、流水表等使用全量表存储。
二、增量表
增量表可以算是使用频率最高的表,尤其是在数据仓库底层。增量表是数据仓库上一层仅存储下一层当天的新增或修改数据,每天的新增、修改数据作为一个分区单独存储,不同日期的新增、修改数据存储在不同分区。当天没有发生变化的数据不会被存储。
三、快照表
理解了全量表与增量表,就很容易理解快照表的概念了。可以将快照表理解为有分区的全量表,快照表与增量表一样有时间分区,增量表的每个分区中存储的是当天新增或修改的数据,而快照表的每个分区中存储当天全量数据,即快照表的每个分区就是当天的全量表。
四、拉链表
上面三种存储策略都很容易理解,终极大BOSS拉链表可没那么容易了。要理解拉链表,首先想象我们常用的裤子拉链,拉开,闭合……好了,相信你们脑子里已经有画面了。
下面是拉链表中一条数据的历程:2020年2月1日,有一个新用户A注册了我们的产品,系统为他分配了用户id:001,这时我们的用户表就有了下面的数据,这叫“开链”,表中的闭链时间是一个代表未来的时间。
用户id |
用户名 |
注册时间 |
开链时间 |
闭链时间 |
分区 |
001 |
A |
2020-02-01 |
2020-02-01 |
9999-01-01 |
9999-01-01 |
过了一个月,用户A已经熟悉了我们的产品,他用腻了用户名A,于是2020年3月2日,他将用户名改成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 |
拉链表就是通过这么反复开链与闭链的过程,将数据的每次变化轨迹存储起来,总结一下,表中闭链的数据是数据曾经经历过的历史状态,开链的数据代表当前的有效数据状态。
好啦,完工!