首页 > 其他分享 >大数据-拉链表模型

大数据-拉链表模型

时间:2023-10-18 14:34:16浏览次数:40  
标签:99999999 拉链 模型 20231018 日期 date 数据

  拉链表是一种维护历史状态,以及最新状态数据的一种表。拉链表根据拉链粒度的不同,去除了一部分不变的记录,通过拉链表可以很方便的还原出拉链时点的客户记录,实际上相当于快照。

拉链表特征

1)记录一个事物从开始,一直到当前状态的所有变化的信息;
2)每次上报的都是历史记录的最终状态,是记录在当前时刻的历史总量;
3)当前记录存的是当前时间之前的所有历史记录的最后变化量(总量);
4)存量一般设计成拉链表(月报 - 常用、日报);
5)关链时间可以是3000年,9999等比较大的年份,例如[2022-07-01,9999-12-31]
表示连续的状态,因为开始时间为2022-07-01,闭合时间为未知;

拉链表适用场景

1) 数据量比较大。
2) 表中的部分字段会被更新,比如用户的地址,银行利率,订单的状态等。 3) 需要查看某一个时间点或者时间段的历史快照信息,比如,查看利率在历史某一个时间点的状态。 4) 变化的比例和频率不是很大,比如,总共有1000万的会员,每天新增和发生变化的有10万左右。 5) 如果对这边表每天都保留一份全量,那么每次全量中会保存很多不变的信息,对存储是极大的浪费; 拉链历史表,既能满足反应数据的历史状态,又可以最大程度的节省存储。

举个栗子:

  • 假如有张表如表1-1所示,每天的数据量大概有50w
  • 表中有些字段会被 update,如表1-2,且每天更新的数据量很小,大约只有5k
  • 有些报表需要查看历史某个日期的数据
  • 存储空间有限,需要尽可能的节约存储空间

表1-1

idnamephone
1 Agnes 123
2 Max 456
3 Tony 789

表1-2

 

idnamephone
1 Agnes 123
2 Max 456
3 Tony 321

方法1:每天追加一份全量数据

这样可以根据日期查看历史的数据,但是没有改变的数据会产生数据产生大量冗余,浪费存储空间,时间一长会非常浪费。

方法2:直接覆盖原数据

这样存储空间虽然节省了,但是历史数据会被覆盖,没有办法反应历史数据的变化

方法3:使用拉链表

  在原始表的基础上,增加start_datte和end_date,第一次抽取的时候,将start_date初始化为抽取日期,end_date初始化为永久日期,形成一个开区间[20231018,99999)

idnamephonestart_dateend_date
1 Agnes 123 20231018 99999999
2 Max 456 20231018 99999999
3 Tony 789 20231018 99999999

之后抽取的时候,将end_date改为当前抽取的日期,形成两个区间:[20231018,20231019]和[20231019,99999999)

idnamephonestart_dateend_date
1 Agnes 123 20231018 99999999
2 Max 456 20231018 99999999
3 Tony 789 20231018 20231018
3 Tony 321 20231019 99999999

拉链表如何实现

方法一:

(1)获取当日数据;

(2)比较当日数据及历史数据,找出新增和变化的数据,存到临时表,并将开始日期置为当前日期,结束日期置为最大日期;

(3)将历史数据表中的变化数据的结束日期更新为当前日期,即闭链;

(4)将临时表的新增和变化数据插入历史数据表中,即开链。

方法二:

(1)获取当日数据;

(2)比较当日数据和昨日数据,找出新增数据和变化后数据;

(3)比较昨日数据和当日数据,找出删除数据和变化前数据;

(4)删除历史数据表中的删除数据和变化前数据;

(5)将新增数据和变化后数据插入历史数据表中,把开始日期置为当前日期,结束日期置为最大日期;

(6)将删除数据和变化前数据插入历史数据表中,把结束日期置为当前日期。


方式一比较简洁;在数据量比较大的情况下,方式二效率比较高,因为用删除插入的操作替代更新的操作,当然,这是对于传统数据库而言,具体的方式应根据实际数据量和数据库来制定。

 

https://blog.csdn.net/weixin_43596734/article/details/129855284

 

标签:99999999,拉链,模型,20231018,日期,date,数据
From: https://www.cnblogs.com/syq816/p/17772268.html

相关文章

  • 下拉选项 数据验证 选择序列
    在Excel中设置下拉选项的步骤如下12:打开Excel,点击选中一个单元格,点击数据;然后点击数据验证;之后点击任何值边上的下拉箭头,选择序列;然后在来源中输入多个下拉选项,例如“男,女”,男和女之间用英文逗号隔开;之后我们点击确定;然后我们点击下拉箭头;可以看到里面有很多个下拉选项可以选择。......
  • Cocos Creator 2D/3D基础/ 第003节3D模型的基本概念
    3.1计算机如何制作一个3D模型 讲述这个问题之前,我们先来看下现实生活中我们要做一个模型,应该如何做呢?首先我们要把模型的形状给雕刻构建出来,现实生活中的物体都是由分子组成的连续的表面,计算机是离散的无法做到这点,所以计算机通过微分的方式,把一个曲面分成”多个平面”来模拟......
  • react数据管理之setState与Props
    react数据管理之setState与PropssetState调用原理setState是React中用于更新组件状态(state)的方法。它的调用原理可以分为以下几个步骤:状态的改变:当调用setState时,React会将新的状态对象与当前状态对象进行合并(合并过程是浅合并)。React不会直接修改当前状态对象,而是创建一个......
  • 数据要素市场又添力作,《数据要素安全流通》正式出版发售!
    随着大数据、云计算、人工智能等新兴技术的迅猛发展,数据已经成为我国经济社会发展的五大生产要素之一,《网络安全法》《个人信息保护法》《数据安全法》的先后出台为维护国家安全、保护公民个人信息、规范网络行为以及促进数据经济发展奠定了法律基础,2022年底,中共中央、国务院颁布“......
  • 使用ffmpeg将opencv捕获的摄像头数据推流到本地rtsp器上
    首先,为什么使用opencv?答:方便对视频进行处理,各种深度学习网络就有了用物之地。具体流程参考的FFmpeg/opencv+C++实现直播拉流和直播推流(对视频帧进行处理)_c++ffmpeg拉流_酒神无忧的博客-CSDN博客,但是细节不同。简述一下流程:使用opencv从摄像头中读取数据。将cv::Mat转换为A......
  • 用jstack导出线程信息,用jmap导出线程信息和堆数据信息
    jmap导出的*.hprof文件需要用jvisualvm.exe工具来查看(当然也有第三方的其他工具),jdk8之后的是不会自带了需要手动安装;jmap导出的文件里是包含了线程信息,但是没有jstack导出的多,比如jstack里还有具体等待哪个锁的信息,这个锁的对象类型,还能看到是哪个线程获得了这个锁locked;jmap使......
  • LAS Spark+云原生:数据分析全新解决方案
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群随着数据规模的迅速增长和数据处理需求的不断演进,云原生架构和湖仓分析成为了现代数据处理的重要趋势。在这个数字化时代,企业面临着海量数据的挑战和机遇,而构建可扩展、灵活且高效的数据......
  • 【数据结构】7.平衡搜索树(AVL树和红黑树)
    0.概述对于普通的搜索树,如果一直插入比第一个元素小的元素,它会退化成一个无限向左下角眼神的单链表,使得时间复杂度退化为O(n)。如果我们在插入时保持树的结构是平衡的,则可以保证查找、插入和删除的时间复杂度有对数级的时间性能,下面讲到的AVL树和红黑树都是平衡搜索树,通过旋......
  • python 操作向量数据库qdrant
    qdrant官网:https://qdrant.tech/documentation/overview/两个步骤:1、文本进行向量化2、连接qdrant进行存储步骤一:文本向量化文本向量化可以借助很多现有模型,个人使用bge-large-zhfromsentence_transformersimportSentenceTransformer#模型已下载到本地MODELBGE=Sen......
  • 数据采集IO卡 软件无线电处理平台:136-KC705E增强版基于FMC接口的 Kintex-7 XC7K325T P
    一、板卡概述   本板卡基于Xilinx公司的FPGAXC7K325T-2FFG900 芯片,pin_to_pin兼容FPGAXC7K410T-2FFG900 ,支持PCIeX8、64bit DDR3容量2GByte,HPC的FMC连接器,板卡支持各种接口输入,软件支持windows,Linux驱动。   二、功能和技术指标: 板卡功能参数内容主处理器Xi......