数据回放方法及装置制造方法及图纸

技术编号:36944835 阅读:46 留言:0更新日期:2023-03-22 19:06
本说明书提供一种数据回放方法及装置。该方法用于由至少一个线程执行待回放数据行对应的数据回放任务,以将各个数据回放任务分别包含的相应版本的待回放数据回放至数据链表;其中,任一线程执行包含目标待回放数据及其目标版本号的任一数据回放任务,包括:读取任一线程的索引字段中记录的当前地址;根据目标版本号和数据链表中已回放数据的已回放版本号,从当前地址处开始,按照数据链表的回放方向查找与目标版本号相邻的邻近已回放版本号,并确定邻近已回放版本号所处的邻近地址;将目标待回放数据和目标版本号写入目标地址,并至少使用所述邻近地址更新与目标待回放数据相关的指针域,以及将所述索引字段中记录的当前地址更新为目标地址。更新为目标地址。更新为目标地址。

【技术实现步骤摘要】
数据回放方法及装置


[0001]本说明书实施例属于数据库
,尤其涉及一种数据回放方法及装置。

技术介绍

[0002]随着互联网技术的发展,互联网活动产生的数据(如应用平台的运行数据、用户的个人数据等)也呈现指数级增长,上述数据可以被再利用,如用于人工智能领域的模型训练等。上述数据通常由包含主数据库和备数据库的数据库集群以数据行的形式进行维护。
[0003]随着业务的不断进行,数据行中的数据可能会被多次更新。通常情况下,每次更新操作并不会在原来的数据结构上进行原地更新,而是将数据重新拷贝一份并将更新后的数据写入其中,以保留新旧两份数据。为了区分两份数据的差异,通常会在更新成功之后为新数据分配一个版本号version。数据行中的数据在每次更新时会产生至少一份新数据,通过上述方式可以为每次更新后的数据都分配不同的版本号,以便通过版本号区分不同数据和相应的更新操作。
[0004]在数据库集群的运行过程中,备数据库需要在自身的内存中回放(或称恢复)数据行中各个版本的数据,以便其他服务对上述数据进行读写/操作。其中,为了优化针对多版本数据的查询过程,被恢复的多版本数据通常采用链表这一数据结构进行维护,并且在链表中按照版本大小进行排序。
[0005]在相关技术中,备数据库可以采用链表这一数据结构对同一数据行中各个版本的数据进行回放。对于其中任一版本的数据,往往需要从链表的起始地址处开始遍历链表中的各个已回放数据,并通过将所述任一版本与各个已回放数据的版本逐一进行比较,确定应当将该数据插入至链表中哪个位置。由于各个版本的数据都需要从链表的起始地址处遍历新版本数据的插入位置,所以针对该数据行的数据回放速度较慢。特别是在数据行的数据版本较多(如万、十万级别)的情况下,数据行的整体回放过程需要小时级别的耗时,回放速度亟待提升。

技术实现思路

[0006]本专利技术的目的在于提供一种数据回放方法及装置。
[0007]根据本说明书一个或多个实施例的第一方面,提出了一种数据回放方法,用于由至少一个线程执行待回放数据行对应的数据回放任务,以将各个数据回放任务分别包含的相应版本的待回放数据回放至数据链表;其中,任一线程执行包含目标待回放数据及其目标版本号的任一数据回放任务,包括:
[0008]读取为所述任一线程分配的索引字段中记录的当前地址,所述索引字段用于记录所述任一线程最近一次回放完成的已回放数据在所述数据链表中的存储地址;
[0009]根据所述目标版本号和所述数据链表中已回放数据的已回放版本号,从所述当前地址处开始,按照所述数据链表的回放方向查找与所述目标版本号相邻的邻近已回放版本号,并确定所述邻近已回放版本号所处的邻近地址;
[0010]将所述目标待回放数据和所述目标版本号写入目标地址,并至少使用所述邻近地址更新与所述目标待回放数据相关的指针域,以及,将所述索引字段中记录的所述当前地址更新为所述目标地址。
[0011]根据本说明书一个或多个实施例的第二方面,提出了一种数据回放装置,用于由至少一个线程执行待回放数据行对应的数据回放任务,以将各个数据回放任务分别包含的相应版本的待回放数据回放至数据链表;其中,针对任一线程执行包含目标待回放数据及其目标版本号的任一数据回放任务过程,所述装置包括:
[0012]当前地址读取单元,用于读取为所述任一线程分配的索引字段中记录的当前地址,所述索引字段用于记录所述任一线程最近一次回放完成的已回放数据在所述数据链表中的存储地址;
[0013]邻近地址查找单元,用于根据所述目标版本号和所述数据链表中已回放数据的已回放版本号,从所述当前地址处开始,按照所述数据链表的回放方向查找与所述目标版本号相邻的邻近已回放版本号,并确定所述邻近已回放版本号所处的邻近地址;
[0014]写入及更新单元,用于将所述目标待回放数据和所述目标版本号写入目标地址,并至少使用所述邻近地址更新与所述目标待回放数据相关的指针域,以及,将所述索引字段中记录的所述当前地址更新为所述目标地址。
[0015]根据本说明书一个或多个实施例的第三方面,提出了一种电子设备,包括:
[0016]处理器;
[0017]用于存储处理器可执行指令的存储器;
[0018]其中,所述处理器通过运行所述可执行指令以实现如第一方面中任一项所述的方法。
[0019]根据本说明书一个或多个实施例的第四方面,提出了一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如第一方面中任一项所述方法的步骤。
[0020]在本说明书实施例中,任一线程可以被分配有用于记录该线程最近一次回放完成的已回放数据在所述数据链表中的存储地址的索引字段。在执行包含目标待回放数据及其目标版本号的任一数据回放任务的过程中,所述任一线程先读取所述索引字段中记录的当前地址,然后根据所述目标版本号和所述数据链表中已回放数据的已回放版本号,从所述当前地址处开始,按照所述数据链表的回放方向查找与所述目标版本号相邻的邻近已回放版本号并确定相应的邻近地址;进而将所述目标待回放数据和目标版本号写入目标地址,并至少使用所述邻近地址更新与所述目标待回放数据相关的指针域,以实现对所述目标待回放数据的回放。相应的,所述任一线程还会将所述索引字段中记录的所述当前地址更新为所述目标地址。
[0021]可以理解的是,由于为任一线程分配的索引字段用于记录该线程最近一次回放完成的已回放数据在所述数据链表中的存储地址,所以在执行所述任一数据回放任务(为了回放所述目标待回放数据)时读取到的所述当前地址,即为在执行所述任一数据回放任务的前一数据回放任务时所回放的(所述目标待回放数据的)前一待回放数据在数据链表中的存储地址。因为在将目标待回放数据和目标版本号写入目标地址后会使用邻近地址更新与目标待回放数据相关的指针域,所以邻近已回放版本号即用于指示目标待回放数据在数
据链表中的插入位置。基于此,考虑到数据链表中的各个已回放数据按照版本号的相对大小顺序排列,所以相对于从数据链表的起始地址(即链表的起点)处开始查找邻近地址,从所述当前地址处开始查找显然能够减少需要比较的已回放版本号的个数,从而有助于减少所述任一待回放数据的回放耗时,提升针对待回放数据行的回放速度。
附图说明
[0022]为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0023]图1是一示例性实施例提供的一种数据回放方法的流程。
[0024]图2是一示例性实施例提供的一种数据链表与线程之间的对应关系的示意图。
[0025]图3是一示例性实施例提供的一种在单链表中插入数据的过程示意图。
[0026]图4是一示例性实施例提供的一种在单链表中插入数据前后的存储情况示意图。
[0027]本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种数据回放方法,用于由至少一个线程执行待回放数据行对应的数据回放任务,以将各个数据回放任务分别包含的相应版本的待回放数据回放至数据链表;其中,任一线程执行包含目标待回放数据及其目标版本号的任一数据回放任务,包括:读取为所述任一线程分配的索引字段中记录的当前地址,所述索引字段用于记录所述任一线程最近一次回放完成的已回放数据在所述数据链表中的存储地址;根据所述目标版本号和所述数据链表中已回放数据的已回放版本号,从所述当前地址处开始,按照所述数据链表的回放方向查找与所述目标版本号相邻的邻近已回放版本号,并确定所述邻近已回放版本号所处的邻近地址;将所述目标待回放数据和所述目标版本号写入目标地址,并至少使用所述邻近地址更新与所述目标待回放数据相关的指针域,以及,将所述索引字段中记录的所述当前地址更新为所述目标地址。2.根据权利要求1所述的方法,所述读取为所述任一线程分配的索引字段中记录的当前地址,包括:在所述任一线程被分配有索引字段且所述索引字段的取值不为空的情况下,读取所述索引字段取值作为所述当前地址。3.根据权利要求2所述的方法,还包括:在所述任一线程未被分配索引字段,或者为所述任一线程分配的所述索引字段为空的情况下,从所述数据链表中所述回放方向的起始地址处开始查找与所述目标版本号相邻的邻近已回放版本号,并确定所述邻近已回放版本号所处的邻近地址;以及,将所述目标待回放数据和所述目标版本号写入目标地址,并至少使用所述邻近地址更新与所述目标待回放数据相关的指针域。4.根据权利要求3所述的方法,还包括:在所述起始地址对应的起始版本号与所述邻近已回放版本号之间的间隔大于间隔阈值的情况下,触发为所述任一线程分配索引字段并在分配的所述索引字段中写入所述目标地址;或者,在为所述任一线程预先分配的索引字段中写入所述目标地址。5.根据权利要求1所述的方法,所述查找与所述目标版本号相邻的邻近已回放版本号,包括:在获取到针对所述待回放数据行的互斥锁的情况下,查找与所述目标版本号相邻的邻近已回放版本号;所述方法还包括:在更新与所述目标待回放数据相关的指针域完成后,释放所述互斥锁。6.根据权利要求1所述的方法,所述根据所述目标版本号和所述数据链表中已回放数据的已回放版本号,从所述当前地址处开始,按照所述数据链表的回放方向查找与所述目标版本号相邻的邻近已回放版本号,包括:从所述当前地址处开始,按照所述数据链表的回放方向依次读取各个已回放数据的已回放版本号;其中,针对读取到的任一已回放版本号,将所述任一已回放版本号及其前一已回放版本号分别与所述目标版本号进行比较;以及,在所述目标版本号处于所述任一已回放版本号和所述前一已回放版本号之间的情况下,停止读取已回放版本号,并将所述任一已回放版本号和/或所述前一已回放版本号确定为所述邻近已回放版本号。
7.根据权利要求1所述的方法,所述邻近地址包括所述回放方向上记录有前向邻近版本号的前向邻近已回放地址和记录有后向邻近版本号的后向邻近已回放地址,所述目标版本号处于所述前向邻近版本号和所述后向邻近版本号之间,其中,在所述数据链表为单链表的情况下,所述回放方向与所述单链表的查找方向相同,与所述目标待回放数据相...

【专利技术属性】
技术研发人员:姚莹莹高山岩肖金亮韩富晟
申请(专利权)人:北京奥星贝斯科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1