大数据中拉链表,你懂了吗?

        通过一个业务需求场景来理解,例如对于一个网站的注册用户来说,有一张专门用来记录用户注册信息的表,每出现一个新的注册用户就新增一条记录,但在这个过程中难免会出现一些注册信息修改的行为;如用户的注册邮箱地址中途发生了变更,对于业务系统来说,一般有两种数据同步方案,第一种是将修改后的这张表的最新全量数据同步给数据仓库端,数据仓库端就可以一直保留最新的用户注册信息;第二种就是业务系统只同步新增和变化的数据到数据仓库端,然后数据仓库统一用append的方式来记录新增和修改的数据;但是对于数据仓库来说,如果我们想知道注册用户对其信息的整个修改历史记录,对于刚才的第一种全量数据同步方案来说显然是不行的,因为没有保留任何历史数据的痕迹;而对于第二种用统一变化数据append的方式虽然记录了修改的行为,但是没有办法通过条件筛选很快把这部分有过修改历史的用户给找出来,只能用全表扫描的数据分析方式,分析代价比较高;一种新的解决方案就该出现了。

        用拉链表就可以了,拉链表存在开链和闭链两个动作;开链就是一条数据在刚刚生成之后还没有对其进行update所呈现的最初的样子,开链代表当前数据包含的信息是有效的;闭链则是对最初生成的那条数据进行状态修改之后所呈现的样子,闭链代表该数据中的信息已经失效;对于拉链表中的每一条数据要么是开链状态,要么就是闭链状态。为了区分当前是开链或者是闭链,在拉链表中引入两个除业务字段之外的特殊字段,一个叫xx_start_time另一个叫xx_end_time,前者代表这条数据的业务操作生成时间,后者代表这条数据开链或者闭链的状态,或者说生命周期状态;如果xx_end_time值为无穷大则代表当前数据为开链状态证明当前记录有效,而如果xx_end_time为一个小于无穷大的值则代表为闭链状态,证明当前记录失效。

        对于拉链表可以用这个查询语句select * from user_register where xx_end_data ='9999-99-99',查询出当前所有的有效记录;用这个查询语句select * from user_register where xx_start_time <= '2023-2-26' and xx_end_time >= '2023-2-26' 来查询一个月前今天的历史快照记录。对于拉链表来说比较适合这种数据规模较大且存在少量数据更新同时业务又需要保留更新记录以及查看某个历史时间快照信息的场景。拉链表虽然能带来业务的便利,但是设计实现的难度比一般的表要复杂很多,因此使用需要特别慎重。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值