一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于ClickHouse数据库的纯新增式拉链实现方法及系统与流程

2022-12-19 21:30:41 来源:中国专利 TAG:

基于clickhouse数据库的纯新增式拉链实现方法及系统
技术领域
1.本发明涉及数据处理技术领域,具体涉及基于clickhouse数据库的纯新增式拉链实现方法及系统。


背景技术:

2.clickhouse数据库是一种在线分析处理查询(olap:onlineanalyticalprocessing)mpp架构的列式存储数据库(dbms:databasemanagementsystem),可存储结构化数据,并使用sql查询实时生成分析数据报告。
3.拉链表是数据库中常见的表形态之一,基于时间换空间的思路设计,用于记录一个事物自开始至当前状态的所有变化信息。其可满足记录数据的粒度需求,并避免普通快照表占用存储空间较大的问题。但拉链表算法基于对历史数据的直接更新操作进行,即对历史数据直接执行更新结束日期操作,并插入一条新的数据;因此其仅适用于传统的关系型数据库。而对于clickhouse数据库,由于列式存储数据库无法直接进行数据的更新操作,因此导致拉链表并无法在clickhouse数据库有效应用。
4.虽然目前的clickhouse数据库的更新版本中新增了对数据的更新和删除功能,但由于新增的更新和删除功能以关系型数据库下的拉链表算法为基础框架,并使用了alter语句的异步操作。因此其在使用时仍具有以下缺陷:首先,所述新增的功能继承了传统拉链表算法复杂度高的缺陷;其次,该异步操作常导致更新后的数据不能立刻变更,从而使下游使用数据时出现脏读或幻读等数据不一致或不完整的缺陷。


技术实现要素:

5.本发明目的在于提供一种基于clickhouse数据库的纯新增式拉链实现方法及系统,用于解决传统拉链表算法复杂度高,且不支持事务操作的数据库中为使用拉链表采用异步操作而导致下游数据存在不一致或不完整的技术问题。
6.为达成上述目的,本发明提出如下技术方案:
7.基于clickhouse数据库的纯新增式拉链实现方法,拉链表的更新基于来源表进行,包括:
8.引入去重引擎并设定其去重规则及分区字段;其中,所述去重规则包括:基于所有条记录的业务主键及开始时间进行查重,并基于查重结果删除创建时间与本轮创建时间相邻的记录;
9.对比当前拉链表与新来源表以确定变化数据;其中,所述变化数据包括:变更类数据,删除类数据及新增类数据;
10.基于各所述变化数据分别创建适用于当前拉链表的记录;其中,
11.基于所述变更类数据创建第一变更记录及第二变更记录;所述第一变更记录的结束时间为当前时间点,其余项信息与所述当前拉链表中相应条记录的对应项信息分别一致;所述第二变更记录的开始时间为当前时间点,除变更项外的其余项信息与所述当前拉
链表中相应条记录的对应项信息分别一致;
12.基于所述删除类数据创建删除记录;所述删除记录的结束时间为当前时间点,其余项信息与所述当前拉链表中相应条记录的对应项信息分别一致;
13.基于所述新增类数据创建新增记录;所述新增记录的各项信息与所述新来源表中对应信息相一致;
14.将上述创建的各记录均插入所述当前拉链表的对应分区内,基于所述去重引擎进行去重,并在合并后得到新拉链表。
15.进一步的,所述对比当前拉链表与新来源表以确定变化数据,包括:
16.基于当前拉链表获取当前时间点的有效数据并存入第一临时表;
17.基于新来源表获取当前时间点的全量数据并存入第二临时表;
18.对比所述第一临时表及所述第二临时表以确定变化数据。
19.进一步的,所述对比当前拉链表与新来源表以确定变化数据之后,包括:
20.创建第三临时表及第四临时表;其中,所述第三临时表用于存储所述变化数据中的关链数据,所述第四临时表用于存储所述变化数据中的开链数据。
21.进一步的,所述基于各所述变化数据分别创建适用于当前拉链表的记录,包括:
22.将所述第一变更记录及所述删除记录存入所述第三临时表;
23.将所述第二变更记录及所述新增记录存入所述第四临时表。
24.进一步的,所述基于所述去重引擎进行去重,并在合并后得到新拉链表,包括:
25.基于所述去重引擎进行去重,并对去重后的各记录进行手动强制合并以得到新拉链表。
26.进一步的,所述去重引擎的分区字段的分区规则包括:
27.使拉链表中同一业务主键下的所有条记录被存储在同一分区内。
28.基于clickhouse数据库的纯新增式拉链实现系统,包括:
29.预指定模块,用于引入去重引擎并设定其去重规则及分区字段;其中,所述去重规则包括:基于所有条记录的业务主键及开始时间进行查重,并基于查重结果删除创建时间与本轮创建时间相邻的记录;
30.数据对比模块,用于对比当前拉链表与新来源表以确定变化数据;其中,所述变化数据包括:变更类数据,删除类数据及新增类数据;
31.记录新增模块,用于基于各所述变化数据分别创建适用于拉链表的记录;其中,
32.基于所述变更类数据创建第一变更记录及第二变更记录;所述第一变更记录的结束时间为当前时间点,其余项信息与所述当前拉链表中相应条记录的对应项信息分别一致;所述第二变更记录的开始时间为当前时间点,除变更项外的其余项信息与所述当前拉链表中相应条记录的对应项信息分别一致;
33.基于所述删除类数据创建删除记录;所述删除记录的结束时间为当前时间点,其余项信息与所述当前拉链表中相应条记录的对应项信息分别一致;
34.基于所述新增类数据创建新增记录;所述新增记录的各项信息与所述新来源表中对应信息相一致;
35.去重合并模块,用于将上述创建的记录均插入所述当前拉链表的对应分区内;基于所述去重引擎进行去重,并在合并后得到新拉链表。
36.进一步的,包括:
37.第一缓存模块,用于基于当前拉链表获取当前时间点的有效数据并存入第一临时表;
38.第二缓存模块,基于新来源表获取当前时间点的全量数据并存入第二临时表;
39.缓存对比模块,用于对比所述第一临时表及所述第二临时表以确定变化数据。
40.进一步的,包括:
41.第三缓存模块,用于将所述第一变更记录及所述删除记录存入第三临时表;
42.第四缓存模块,用于将所述第二变更记录及所述新增记录存入第四临时表。
43.进一步的,包括:
44.强制合并模块,用于对去重后的各记录进行手动强制合并以得到新拉链表。
45.有益效果:
46.由以上技术方案可知,本发明的技术方案提供了一种基于clickhouse数据库的纯新增式拉链实现方法;用于解决现有的clickhouse数据库在使用拉链表进行数据更新存储时存在的各种缺陷。
47.在所述方法中,首先基于当前拉链表与新来源表的对比获取了变化数据。然后与现有技术在拉链表中直接基于所述变化数据的具体类型(即变更类数据、删除类数据及新增类数据)对当前拉链表中的相应记录操作不同,将各类变化数据均以“新增”方式处理,并为其创建对应的适用于当前拉链表的记录。具体的,基于所述变更类数据创建第一变更记录及第二变更记录。所述第一变更记录的结束时间为当前时间点,其余项信息与所述当前拉链表中相应条记录的对应项信息分别一致。所述第二变更记录的开始时间为当前时间点,除变更项外的其余项信息与所述当前拉链表中相应条记录的对应项信息分别一致。基于所述删除类数据创建删除记录;所述删除记录的结束时间为当前时间点,其余项信息与所述当前拉链表中相应条记录的对应项信息分别一致。基于所述新增类数据创建新增记录;所述新增记录的各项信息与所述新来源表中对应信息相一致。此时将获得与变化数据相应的全部记录。
48.继续地,将上述创建的所有记录存入当前拉链表内。由于此时的当前拉链表内还存在与基于变更类数据、删除类数据创建的上述“新记录”相应的“原始记录”。因此需要对该类生命周期有误的“原始记录”进行剔除。而由于本技术方案在一开始即引入了去重引擎,并设定了去重引擎的去重规则及分区字段。因此可通过所述去重引擎对“原始记录”进行先去重,此时在合并后就可获得与新来源表相应的新拉链表。
49.由上述可见,由于本技术方案将所有变化数据均进行新增处理,不用对当前拉链表中的“原始记录”进行直接处理,即采用纯新增的更新方式。因此一方面,与现有技术中基于clickhouse数据库进行异步操作相比,保证了数据一致性和完整性;另一方面,此时可支持任何时间点的数据重跑修复,具有高可用性。
50.同时,在采用纯新增的基础上,还只在最后进行一次各记录的去重合并。因此一方面,与传统的拉链算法需要进行频繁的更新和删除操作相比,整个过程更加简单;此时随着数据量的快速增加,还可有效避免数据库的臃肿,保证了拉链表更新时的计算速度。另一方面,流程开发部署更加简单,且流程一旦确定即可与后续新增的拉链需求共用流程,具有良好的普适性。
51.应当理解,前述构思以及在下面更加详细地描述的额外构思的所有组合只要在这样的构思不相互矛盾的情况下都可以被视为本公开的发明主题的一部分。
52.结合附图从下面的描述中可以更加全面地理解本发明教导的前述和其他方面、实施例和特征。本发明的其他附加方面例如示例性实施方式的特征和/或有益效果将在下面的描述中显见,或通过根据本发明教导的具体实施方式的实践中得知。
附图说明
53.附图不意在按比例绘制。在附图中,在各个图中示出的每个相同或近似相同的组成部分可以用相同的标号表示。为了清晰起见,在每个图中,并非每个组成部分均被标记。现在,将通过例子并参考附图来描述本发明的各个方面的实施例,其中:
54.图1为实施例1所述的基于clickhouse数据库的纯新增式拉链实现方法的流程图;
55.图2为图1中进行变化数据确定时的一种具体流程图;
56.图3为图1中各类型变化数据创建记录的流程图;
57.图4为图1中进行创建的记录存储的一种具体流程图;
58.图5为图1中获得所述新拉链表前进行记录合并的一种具体流程图;
59.图6为实施例2的具体操作流程示意图。
具体实施方式
60.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例的附图,对本发明实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于所描述的本发明的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。除非另作定义,此处使用的技术术语或者科学术语应当为本发明所属领域内具有一般技能的人士所理解的通常意义。
61.本发明专利申请说明书以及权利要求书中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,除非上下文清楚地指明其它情况,否则单数形式的“一个”“一”或者“该”等类似词语也不表示数量限制,而是表示存在至少一个。“包括”或者“包含”等类似的词语意指出现在“包括”或者“包含”前面的元件或者物件涵盖出现在“包括”或者“包含”后面列举的特征、整体、步骤、操作、元素和/或组件,并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。“上”“下”“左”“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
62.现有技术中的拉链算法为:依据新来源表直接对旧拉链表中的记录执行更新结束时间的操作并插入新记录;因此拉链算法仅对传统的关系型数据库有效。为了使其应用于clickhouse数据库,需要在clickhouse数据库中增加相应的异步操作以实现对数据的更新或删除等异步操作。但此时在clickhouse数据库进行的拉链算法不但会继承传统拉链算法的本身缺陷:(1)频繁的更新和删除不但导致拉链表更新步骤复杂,且会占用计算机大量的运行资源及存储资源;(2)随着数据量的快速增长,数据库会越来越臃肿;为了保证查询性能,通常采用空间换时间的方式来分表操作,进而形成运行性能、存储性能及查询性能间的
恶性循环。同时,对于clickhouse数据库而言,相应的异步操作还会导致如下缺陷:(3)更新后的数据不能立刻变更,从而使下游使用数据时出现脏读或幻读等数据不一致或不完整。因此本实施例旨在提供一种基于clickhouse数据库的纯新增式拉链实现方法及系统,以同时改善上述各种缺陷。
63.实施例1
64.结合图1所示,所述方法包括如下步骤:
65.步骤s102、引入去重引擎并设定其去重规则及分区字段。
66.本实施例中所述去重引擎具体为:replacingmergetree表引擎,并设置etl时间为merge字段。
67.所述去重规则包括:基于所有条记录的业务主键及开始时间进行查重,并基于查重结果删除创建时间与本轮创建时间相邻的记录。
68.所述去重引擎只能对处于同一分区内的记录分区使用上述去重规则。在具体设定分区字段时,需要满足以下条件:首先,使拉链表的所有数据能够均匀分布于不同的服务器下以保证查询速度;其次,需要保证具有相同业务主键和开始时间的数据能够放在同一分区下。基于此,本实施例设定分区字段的分区规则为:使拉链表中同一业务主键下的所有条记录被存储在同一分区内。
69.步骤s104、对比当前拉链表与新来源表以确定变化数据。其中,所述变化数据包括:变更类数据,删除类数据及新增类数据。
70.作为一种可以选择的实施方式,为了提高当前拉链表更新过程中的逻辑性,并便于相关问题排查,此处引入了临时表。结合图2所示,所述步骤s104具体包括:
71.步骤s104.2、基于当前拉链表获取当前时间点的有效数据并存入第一临时表。
72.步骤s104.4、基于新来源表获取当前时间点的全量数据并存入第二临时表。
73.步骤s104.6、对比所述第一临时表及所述第二临时表以确定变化数据。
74.本实施例中,所述拉链表的信息项包括:业务主键、具体数据、开始时间及结束时间。所述变化数据均针对当前拉链表而言。
75.具体的,在传统的拉链表更新时,所述变更类数据为:相较于新来源表,对于当前拉链表中已有记录,需要更新其信息项中的具体数据以形成新的记录。所述删除类数据为:相较于新来源表,对于当前拉链表中已有记录,需要更新其结束时间以使关于该业务主键的记录废止。所述新增类数据为:基于新来源表,需要在当前拉链表中增加一条记录。
76.步骤s106、基于各所述变化数据分别创建适用于当前拉链表的记录。
77.现有技术中,仅对所述新增类数据创建适用于拉链表的记录。而本实施例中,为了适用于clickhouse数据库,并避免对当前拉链表中旧记录频繁的直接操作。将所述变更类数据、所述删除类数据也作为新增类数据处理,为其创建了与当前拉链表的记录。
78.作为一种具体的实施方式,结合图3所示,各类型的变化数据的记录创建过程为:
79.步骤s106.2.2、基于所述变更类数据创建第一变更记录及第二变更记录。所述第一变更记录的结束时间为当前时间点,其余项信息与所述当前拉链表中相应条记录的对应项信息分别一致。所述第二变更记录的开始时间为当前时间点,除变更项外的其余项信息与所述当前拉链表中相应条记录的对应项信息分别一致。
80.步骤s106.2.4、基于所述删除类数据创建删除记录。所述删除记录的结束时间为
当前时间点,其余项信息与所述当前拉链表中相应条记录的对应项信息分别一致。
81.步骤s106.2.6、基于所述新增类数据创建新增记录。所述新增记录的各项信息与所述新来源表中对应信息相一致。
82.具体的,在当前拉链表的更新过程中,将相应的变化数据还分为关链数据及开链数据。所述关链数据即为生命周期已经结束的数据;所述开链数据即为生命周期仍然存续的数据。因此为了提高各记录创建过程中的逻辑性以避免出错,作为一种优选的实施方式,结合图4所示,所述步骤s106还包括:
83.步骤s106.4.2、创建第三临时表及第四临时表。其中,所述第三临时表用于存储所述变化数据中的关链数据,所述第四临时表用于存储所述变化数据中的开链数据。
84.步骤s106.4.4、将所述第一变更记录及所述删除记录存入所述第三临时表。
85.步骤s106.4.6、将所述第二变更记录及所述新增记录存入所述第四临时表。
86.步骤s108、将上述创建的记录均插入所述当前拉链表的对应分区内,基于所述去重引擎进行去重,并在合并后得到新拉链表。
87.当上述步骤s106.2~步骤s106.6创建的各记录插入当前拉链表后,会与生命周期有误的原始记录共存。因此需要在步骤s108中通过去重引擎对原始记录进行去重合并。
88.由上述可知,本实施例中所述去重引擎具体为replacingmergetree表引擎。其虽然可自动进行合并。但自动进行合并的时间未知,因此为了下游数据获取的及时性及准确性,本实施例中具体采用手动强制合并。因此如下图5所示,所述步骤s108还包括:
89.步骤s108.2、基于所述去重引擎进行去重,并对去重后的各记录进行手动强制合并以得到新拉链表。
90.上述程序可以运行在处理器中,或者也可以存储在存储器中(或称为计算机可读存储介质),计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体,如调制的数据信号和载波。
91.这些计算机程序也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤,对应与不同的步骤可以通过不同的模块来实现。
92.实施例2
93.结合图6所示,基于实施例1所述的方法,基于clickhouse数据库使用拉链表对用户的账户余额进行存储更新。本实施例中,所述业务主键具体为用户名。具体步骤为:
94.首先,将自当前拉链表获取的当前时间点的有效数据存入第一临时表t0;将自新来源表获取的当前时间点的全量数据存入第二临时表t1。具体的,由第一临时表t0可见,当前时间点的有效数据包括用户1、用户2、用户3及用户4的余额信息。由第二临时表t1可见,
当前时间点的全量数据包括用户1、用户2、用户3及用户5的余额信息。
95.其次,对比第一临时表t0与第二临时表t1确定变化数据。具体的,对比发现用户1及用户2的余额信息不变。用户3的余额数据由3000变更为4000,为变更类数据。用户4被删除,为删除类数据。新增了用户4,为新增类数据。
96.然后,为用户3创建第一变更记录及第二变更记录。其中,第一变更记录的结束时间设为当前时间点,其他项信息与当前拉链表中用户3的对应项信息一致;存入第三临时表t2。第二变更记录中,将余额数据设为4000,开始时间设为为当前时间点,其他项信息与当前拉链表中用户3的对应项信息一致;并存入第四临时表t3。为用户4创建删除记录,将结束时间设为当前时间点,其他项信息与当前拉链表中用户4的相应项信息一致;并存入第三临时表t2。为用户5创建新增记录,业务主键为用户5,余额数据为1000,开始时间为当前时间点,结束时间为最大时间;并存入第四临时表t3。
97.最后,将所述第三临时表t2及第四临时表t3插入当前拉链表;然后使用去重引擎进行无效原始记录去重,之后再进行合并即得到新拉链表。
98.实施例3
99.本实施例提供了一种基于实施例1的系统,所述系统可以称为基于clickhouse数据库的纯新增式拉链实现系统。所述系统包括:
100.预指定模块,用于引入去重引擎并设定其去重规则及分区字段。其中,所述去重规则包括:基于所有条记录的业务主键及开始时间进行查重,并基于查重结果删除创建时间与本轮创建时间相邻的记录。
101.数据对比模块,用于对比当前拉链表与新来源表以确定变化数据。其中,所述变化数据包括:变更类数据,删除类数据及新增类数据。
102.记录新增模块,用于基于各所述变化数据分别创建适用于拉链表的记录。
103.包括:
104.基于所述变更类数据创建第一变更记录及第二变更记录;所述第一变更记录的结束时间为当前时间点,其余项信息与所述当前拉链表中相应条记录的对应项信息分别一致;所述第二变更记录的开始时间为当前时间点,除变更项外的其余项信息与所述当前拉链表中相应条记录的对应项信息分别一致。
105.基于所述删除类数据创建删除记录;所述删除记录的结束时间为当前时间点,其余项信息与所述当前拉链表中相应条记录的对应项信息分别一致。
106.基于所述新增类数据创建新增记录;所述新增记录的各项信息与所述新来源表中对应信息相一致。
107.去重合并模块,用于将上述创建的记录均插入所述当前拉链表的对应分区内,并基于所述去重引擎进行去重合并以得到新拉链表。
108.该系统用于实现上述实施例1中方法的步骤,因此已经进行说明的,在此不再赘述。
109.例如,所述系统还包括:
110.第一缓存模块,用于基于当前拉链表获取当前时间点的有效数据并存入第一临时表。
111.第二缓存模块,基于新来源表获取当前时间点的全量数据并存入第二临时表。
112.缓存对比模块,用于对比所述第一临时表及所述第二临时表以确定变化数据。
113.例如,所述系统还包括:
114.第三缓存模块,用于将所述第一变更记录及所述删除记录存入第三临时表。
115.第四缓存模块,用于将所述第二变更记录及所述新增记录存入第四临时表。
116.例如,所述系统还包括:
117.强制合并模块,用于对去重后的各记录进行手动强制合并以得到新拉链表。
118.虽然本发明已以较佳实施例揭露如上,然其并非用以限定本发明。本发明所属技术领域中具有通常知识者,在不脱离本发明的精神和范围内,当可作各种的更动与润饰。因此,本发明的保护范围当视权利要求书所界定者为准。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献