一种数据处理方法、装置、电子设备和计算机存储介质与流程

文档序号:31872801发布日期:2022-10-21 20:04阅读:45来源:国知局
一种数据处理方法、装置、电子设备和计算机存储介质与流程

1.本技术实施例涉及数据同步技术领域,尤其涉及一种数据处理方法、装置、电子设备和计算机存储介质。


背景技术:

2.当前数据可用性在各个领域都非常重要,其中,对于分布式数据库而言,分布式数据库中所包含的数据节点之间的数据一致性尤为重要。目前通常通过各种一致性协议解决分布式系统一致性问题,其中,一致性协议可包括两阶段提交协议、三阶段提交协议、paxos协议、raft协议等。
3.以raft协议为例,通常采用通过快照点回放每个数据节点中数据的方案,实现数据节点之间的数据一致性,然而该方案通常是由raft模块根据设定时间(如一天或者一周等)进行快照操作,将某一数据节点在这一时间之前的日志进行压缩,以生成一份快照,以供系统发生故障时,根据该快照点(快照点就是产生快照对应的时间点)进行对其他数据节点进行回放数据。
4.若故障发生时距离上次执行快照操作已过去较长时间,导致一数据节点新增了较多日志时,若此时以上次快照点进行数据回放的话,容易耗费较多资源和时间。


技术实现要素:

5.本技术实施例提供一种数据处理方法、装置、电子设备和计算机存储介质,不仅能够提高快照点的准确度,还有利于减少raft模块的资源损耗。
6.第一方面,本技术实施例提供了一种数据处理方法,包括:
7.确定映射关系队列,所述映射关系队列中包含处理模块所提交的日志号与内存所提交的序列号之间的映射关系;
8.确定出所述内存表所提交的最大序列号,并从所述映射关系队列中查询出所述最大序列号所对应的日志号;
9.将所述日志号以及所述最大序列号的组合存储至所述内存表所对应的数据文件中;
10.在故障重启的情况下,遍历内存中所包含的多个数据文件,并将最大的日志号发送至所述处理模块;所述最大的日志号用于供所述处理模块将所述最大的日志号作为快照点,并根据所述快照点进行数据回放。
11.可选地,所述处理模块包括raft模块,所述确定映射关系队列,包括:
12.确定待提交的数据以及所述待提交的数据对应的日志号,所述日志号由所述raft模块根据历史所提交的数据所确定;
13.将所述待提交的数据存储至内存,并根据历史所存储的数据确定出所述待提交的数据对应的序列号;
14.建立所述日志号与所述序列号之间的映射关系,并由多个所述映射关系组成映射
关系队列。
15.可选地,所述确定出所述内存表所提交的最大序列号,包括:
16.确定所述内存表中按照时间顺序排列的,最新存储的数据所对应的序列号为最大序列号。
17.可选地,所述将所述日志号以及所述最大序列号的组合存储至所述内存表所对应的数据文件中,包括:
18.在所述内存表持久化到硬盘的情况下,将所述日志号以及所述最大序列号的组合存储至所述内存表所对应的数据文件中。
19.可选地,还包括:
20.在内存表所包含的数据超过预设阈值的情况下,将获取的剩余数据存储至另一内存表。
21.第二方面,本技术实施例提供了一种数据处理装置,包括:
22.第一确定模块,用于确定映射关系队列,所述映射关系队列中包含处理模块所提交的日志号与内存所提交的序列号之间的映射关系;
23.第二确定模块,用于确定出内存表所提交的最大序列号,并从所述映射关系队列中查询出所述最大序列号所对应的日志号;
24.存储模块,用于将所述日志号以及所述最大序列号的组合存储至所述内存表所对应的数据文件中;
25.处理模块,用于在故障重启的情况下,遍历内存中所包含的多个数据文件,并将最大的日志号发送至所述处理模块;所述最大的日志号用于供所述处理模块将所述最大的日志号作为快照点,并根据所述快照点进行数据回放。
26.可选地,所述处理模块包括raft模块,所述第一确定模块具体用于确定待提交的数据以及所述待提交的数据对应的日志号,所述日志号由所述raft模块根据历史所提交的数据所确定;将所述待提交的数据存储至内存,并根据历史所存储的数据确定出所述待提交的数据对应的序列号;建立所述日志号与所述序列号之间的映射关系,并由多个所述映射关系组成映射关系队列。
27.可选地,所述第二确定模块具体用于确定所述内存表中按照时间顺序排列的,最新存储的数据所对应的序列号为最大序列号,并从所述映射关系队列中查询出所述最大序列号所对应的日志号。
28.可选地,所述存储模块具体用于在所述内存表持久化到硬盘的情况下,将所述日志号以及所述最大序列号的组合存储至所述内存表所对应的数据文件中。
29.可选地,所述存储模块还用于在内存表所包含的数据超过预设阈值的情况下,将获取的剩余数据存储至另一内存表。
30.第三方面,本技术实施例提供了一种电子设备,包括处理组件以及存储组件;所述存储组件存储一个或多个计算机指令;所述一个或多个计算机指令用以被所述处理组件调用执行,实现如上述第一方面所述的数据处理方法。
31.第四方面,本技术实施例提供了一种计算机存储介质,存储有计算机程序,所述计算机程序被计算机执行时,实现如上述第一方面所述的数据处理方法。
32.第五方面,本技术实施例提供了一种计算机程序产品,当其在计算机的处理器上
运行时,使得计算机的处理器执行如上述第一方面所述的数据处理方法。
33.本技术实施例提供的技术方案中,通过确定映射关系队列,所述映射关系队列中包含处理模块所提交的日志号与内存所提交的序列号之间的映射关系;确定出内存表所提交的最大序列号,并从所述映射关系队列中查询出所述最大序列号所对应的日志号;将所述日志号以及所述最大序列号的组合存储至所述内存表所对应的数据文件中;在故障重启的情况下,遍历内存中所包含的多个数据文件,并将最大的日志号发送至处理模块;所述最大的日志号用于供处理模块将所述最大的日志号作为快照点,并根据所述快照点进行数据回放,不仅能够提高快照点的准确度,还有利于减少处理模块的资源损耗。
34.本技术的这些方面或其他方面在以下实施例的描述中会更加简明易懂。
附图说明
35.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
36.图1为本技术实施例提供的一种数据处理方法的流程图;
37.图2为本技术实施例提供的另一种数据处理方法的流程图;
38.图3为本技术实施例提供的一种数据处理装置的结构示意图;
39.图4为本技术实施例提供的一种电子设备的结构示意图。
具体实施方式
40.为了使本技术领域的人员更好地理解本技术方案,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述。
41.在本技术的说明书和权利要求书及上述附图中的描述的一些流程中,包含了按照特定顺序出现的多个操作,但是应该清楚了解,这些操作可以不按照其在本文中出现的顺序来执行或并行执行,操作的序号如101、102等,仅仅是用于区分开各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。
42.在对本技术实施例所提供的数据处理方法进行介绍之前,相对本技术的所涉及的相关概念以及研究背景进行简要介绍:
43.(1)相关概念
44.raft:是一种分布式系统的一致性协议,在分布式系统中,消除单点故障带来的系统可用性问题。保证在一半以下的节点故障的情况下,系统依然可以对外服务。raft分布式一致性协议使用状态复制机的模式,在不同的数据节点回放相同的日志,使这些数据节点所存储的日志最终达到一致性,其中,日志中包括连续存放的数据,回放日志是指将日志中连续存放的数据按顺序写回本地的存储引擎。
45.日志结构的合并树存储引擎(log structed merge tree存储引擎,lsm树存储引擎):是一种通过一定的策略将增量数据合并至全量数据的存储引擎,其中,全量数据是指
日志所包含的全部数据,增量数据是指一段时间内修改的数据。
46.幂等性:是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。
47.快照:是一种用于压缩日志的方式。随着系统运行时间越来越长,产生的日志将越来越长。当系统宕机或者有新节点加入,需要回放全部日志时将耗费较多的资源和时间。快照的目的则是将某个节点之前的日志压缩,这样可以大大减少日志回放的资源和时间。
48.(2)研究背景
49.研究发明,分布式数据库会将数据分布存储在多个数据节点,当任一数据节点中的数据发生变化时,需要将这一变化同步至其他数据节点,以保证数据一致性。目前解决分布式系统一致性问题的方案,通常是通过各种一致性协议解决分布式系统一致性问题,其中,一致性协议可包括两阶段提交协议、三阶段提交协议、paxos协议、raft协议等。然而采用数据同步(即同一个日志写到多个不同的存储引擎里)的方式,并不能够有效解决资源能耗的问题,因此本技术提出了一种数据回放的方案,通过确定快照点,并按照快照点将日志里的数据按顺序写回本地的存储引擎,以提高快照点的准确度,还有利于减少raft模块的资源损耗。
50.具体地,本技术主要是针对于raft协议而言,以raft协议为例,通常采用通过快照点回放每个数据节点中数据的方案,实现数据节点之间的数据一致性,然而该方案通常是由raft模块根据设定时间(如一天或者一周等)进行快照操作,将某一数据节点在这一时间之前的日志进行压缩,以生成一份快照,以供系统发生故障时,根据该快照点进行对其他数据节点进行回放数据。若故障发生时距离上次执行快照操作已过去较长时间,导致一数据节点新增了较多日志时,若此时以上次快照点进行日志回放的话,容易耗费较多资源和时间。
51.为解决上述问题,本技术实施例提供了一种数据处理方法,确定映射关系队列,所述映射关系队列中包含处理模块所提交的日志号与内存所提交的序列号之间的映射关系;确定出内存表所提交的最大序列号,并从所述映射关系队列中查询出所述最大序列号所对应的日志号;将所述日志号以及所述最大序列号的组合存储至所述内存表所对应的数据文件中;在故障重启的情况下,遍历内存中所包含的多个数据文件,并将最大的日志号发送至所述处理模块;所述最大的日志号用于供所述处理模块将所述最大的日志号作为快照点,并根据所述快照点进行数据回放,不仅能够提高快照点的准确度,还有利于减少处理模块的资源损耗。
52.需要说明的是,本技术主要运用于在程序故障重启的情况下,对数据进行回放(即将日志中所包含的数据按顺序写回本地的存储引擎)的场景。
53.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
54.图1为本技术实施例提供的一种数据处理方法的流程图,如图1所示,在该流程中,从设备角度而言,执行主体可以是一个或者多个电子设备;从程序角度而言,执行主体相应地可以是搭载于这些电子设备上的程序;
55.该方法包括:
56.101、确定映射关系队列,所述映射关系队列中包含处理模块所提交的日志号与内存所提交的序列号之间的映射关系;
57.在该步骤中,处理模块可以是由第三方提供的开源项目里的raft模块,可集成于一第三方程序上,针对于每一数据节点所产生数据变化的事件,raft模块会生成对应的日志,且每个日志对应一日志号,且日志号呈递增。
58.可选地,内存可包括本地磁盘,并通过lsm树存储引擎存储数据,当业务系统接收到数据存储业务请求时,会将这一数据存储业务请求所对应的数据存储至内存中。
59.本技术实施例中,建立映射关系队列的目的在于:当raft协议在某一时刻需要进行快照操作时,内存当前所存储的全部数据即为一份快照,或者当raft协议达到某一预设的修改数据量后,则修改的数据量即为一份快照。本技术考虑到通过raft协议进行数据回放的方案,通常是选择最近建立的快照点(在某一时刻,将某一数据节点在这一时间之前的日志进行压缩,所确定出的快照点,或者是在某一时刻,达到预设的修改数据量后,将所修改的数据进行压缩,所确定出的快照点),并根据该快照点进行数据回放。若故障发生时距离上次执行快照操作已过去较长时间,导致一数据节点新增了较多日志时,若此时以上次快照点进行数据回放的话,容易耗费较多资源和时间。因此需要确定出内存实际所需要同步的数据,该待提交的数据可以是raft模块中所存储的日志。而确定待提交的数据的方式可通过确定出待提交的数据所对应的日志号,而由于日志号是由raft模块所确定,内存拥有一定策略的序列号计算方式,因此需要建立序列号与日志号之间的映射关系,再根据这个映射关系,确定出待提交数据对应的日志号,并将这一日志号作为快照点,进行数据回放。
60.可选地,本技术实施例中,raft模块可通过拷贝技术(如copy-on-write技术)实现快照操作。
61.可选地,当新的数据节点加入或者其他场景需要使用快照时,raft协议会复制快照的数据以及回放快照点后续的日志,以获取一份完整的数据,即通过快照和raft协议中所存储的日志,复制出一份相同的数据,以满足新的数据节点加入或者其他场景需要使用快照的要求。
62.102、确定出内存表所提交的最大序列号,并从所述映射关系队列中查询出所述最大序列号所对应的日志号;
63.在该步骤中,内存表为内存中一种数据存储的结构,每个内存表可存储一定数量且连续存放的数据,如一个内存表可存储100个数据。
64.本技术实施例中,为了减少重启时所开销的时间,确定出内存表所提交的最大序列号,其中,每一数据变化的事件对应一序列号,且序列号呈递增。内存表中最大序列号即为最新更新的记录,因此可将这一最新更新的记录所对应的日志点发送至raft模块,由raft模块将该日志点作为快照点,并对内存中还未硬盘持久化的数据进行补偿,其中,硬盘持久化是指当前需要将数据存储到本地硬盘里。
65.可选地,可以选择在程序关闭时主动做一份快照,以将所有的数据存储到本地磁盘里,即提前做一份快照,以避免数据丢失的问题,从而可以重启时不需要回放日志。
66.103、将所述日志号以及所述最大序列号的组合存储至所述内存表所对应的数据
文件中;
67.本技术实施例中,内存表是内存中存储记录的结构,当内存表达到一定大小或者所包含的数据量达到预设阈值时,冻结内存表,并将内存表中所包含的数据写入数据文件中。
68.104、在故障重启的情况下,遍历内存中所包含的多个数据文件,并将最大的日志号发送至处理模块;所述最大的日志号用于供处理模块将所述最大的日志号作为快照点,并根据所述快照点进行数据回放。
69.在该步骤中,每个数据文件中包括多条记录,且每条记录包括对应的序列号,通过遍历内存中每个数据文件的每条记录,确定出最大序列号,最大序列号对应的日志号即为最大的日志号(由于序列号和日志号都是递增的)。
70.本技术实施例中,将最大的日志号发送至raft模块,由raft模块将该日志点作为快照点,并对内存中还未硬盘持久化的数据进行补偿。
71.图2为本技术实施例提供的一种数据处理方法的流程图,如图2所示,该方法包括:
72.201、确定待提交的数据以及所述待提交的数据对应的日志号,所述日志号由raft模块根据历史所提交的数据所确定。
73.例如以序列号递增为例,比如内存现在最大序列号是100,若要存储新增的数据,则生成一个新的序列号,可以是101,或者其他数值。
74.需要说明的是,本技术主要是运用于将内存中数据写入raft模块中,倘若程序崩溃导致内存中数据丢失后,则需要恢复这些数据,而这些数据即为待提交的数据。
75.具体地,当客户端向业务系统发送业务请求时,业务系统根据该请求生成一记录,由于此时内存可能还未来得及存储该记录,因此需要将该记录中所包含的数据作为待提交数据,并存储该待提交数据及其对应的日志号。
76.202、将所述待提交的数据存储至内存,并根据历史所存储的数据确定出所述待提交的数据对应的序列号;
77.203、建立所述日志号与所述序列号之间的映射关系,并由多个所述映射关系组成映射关系队列,所述映射关系队列中包含处理模块所提交的日志号与内存所提交的序列号之间的映射关系;
78.204、确定出所述内存表所提交的最大序列号,并从所述映射关系队列中查询出所述最大序列号所对应的日志号;
79.在该步骤中,内存表中可存储多个数据记录,且每个数据记录对应一序列号,多个数据记录的序列号按照存储时间由早到晚的顺序呈递增关系,因此可将该内存表中最新存储的数据其对应的序列号即为最大序列号。
80.进一步地,如果数据也具有等幂性,可以选择性地每若干个raft日志保持一次映射关系,从而可以大大减少了映射关系队列所包含的映射关系。
81.进一步地,还包括:在内存表所包含的数据超过预设阈值的情况下,将获取的剩余数据存储至另一内存表。
82.在该步骤中,内存中可包括多个内存表。预设阈值可根据需求设定,例如预设阈值可包括100,则当内存表中所包含的数据量超过100时,将获取的剩余数据存储至另一内存表。
83.205、在所述内存表持久化到硬盘的情况下,将所述日志号以及所述最大序列号的组合存储至所述内存表所对应的数据文件中;
84.本技术实施例中,正确地将raft日志号存放至lsm-tree存储引擎对应的数据文件里,也可以避免将对应的数据存放在其他位置带来的一致性问题。比如写在其他文件后,该内存表并不能正确持久化到硬盘上。
85.其中,将内存表持久化到硬盘的目的在于:将内存表存储至本地硬盘(磁盘),以避免内存表未存储至本地硬盘内,则会程序关闭并再次开启时,造成内存表丢失的问题。
86.206、在故障重启的情况下,遍历内存中所包含的多个数据文件,并将最大的日志号发送至处理模块;所述最大的日志号用于供处理模块将所述最大的日志号作为快照点,并根据所述快照点进行数据回放。
87.在该步骤中,故障重启可能会导致数据丢失的情况,因此需要对数据进行回放,以保证数据一致性。
88.本技术实施例中,在故障重启时遍历内存中的所有数据文件,可以拿到若干个raft日志号,而其中最大的raft日志号则是真正快照点。将这个日志号传给raft协议,则只需要从将快照点回放日志。
89.本技术实施例中,通过上述方案能够大大减少故障重启时的时间和资源开销,从而也可以减少一个周期内的快照的次数。
90.例如,假设该系列进行快照的时间点是每若干个条日志进行一次,对应lsm-tree存储引擎的数据量是n个内存表的数据量。这样,故障重启时回放理论期望则大约为n/2个内存表的数据量。
91.优化后的方案,最多需要回放一个内存表的记录条数,理论期望则为0.5个内存表的记录条数。如果使用每m个条记录记录一次映射关系的更小代价的方案,则理论期望则需要额外增加m/2条记录,其中m一般远小于一个内存表的记录条数。
92.优化后的方案在故障重启时的代价与最新的raft协议的快照点脱离了关系,可以不再要求系统更频繁生成快照。0.5内存表+m/2条记录的回放日志条数理论上大大少于n/2个内存表的记录条数。
93.图3为本技术实施例提供的一种数据处理装置的结构示意图,如图3所示,该装置包括:
94.第一确定模块31,用于确定映射关系队列,所述映射关系队列中包含处理模块所提交的日志号与内存所提交的序列号之间的映射关系;
95.第二确定模块32,用于确定出内存表所提交的最大序列号,并从所述映射关系队列中查询出所述最大序列号所对应的日志号;
96.存储模块33,用于将所述日志号以及所述最大序列号的组合存储至所述内存表所对应的数据文件中;
97.处理模块34,用于在故障重启的情况下,遍历内存中所包含的多个数据文件,并将最大的日志号发送至处理模块;所述最大的日志号用于供处理模块将所述最大的日志号作为快照点,并根据所述快照点进行数据回放。
98.可选地,本技术实施例中,所述处理模块可包括raft模块,所述第一确定模块31具体用于确定待提交的数据以及所述待提交的数据对应的日志号,所述日志号由raft模块根
据历史所提交的数据所确定;将所述待提交的数据存储至内存,并根据历史所存储的数据确定出所述待提交的数据对应的序列号;建立所述日志号与所述序列号之间的映射关系,并由多个所述映射关系组成映射关系队列。
99.可选地,本技术实施例中,所述第二确定模块32具体用于确定所述内存表中按照时间顺序排列的,最新存储的数据所对应的序列号为最大序列号,并从所述映射关系队列中查询出所述最大序列号所对应的日志号。
100.可选地,本技术实施例中,所述存储模块33具体用于在所述内存表持久化到硬盘的情况下,将所述日志号以及所述最大序列号的组合存储至所述内存表所对应的数据文件中。
101.可选地,本技术实施例中,所述存储模块33还用于在内存表所包含的数据超过预设阈值的情况下,将获取的剩余数据存储至另一内存表。
102.图3所述的数据处理装置可以执行图2所示实施例所述的数据处理方法,其实现原理和技术效果不再赘述。对于上述实施例中的数据处理装置其中各个模块、单元执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
103.在一个可能的设计中,图3所示实施例的数据处理装置可以实现为一电子设备,实际应用程序中,如图4中所示,该电子设备可以包括存储组件401以及处理组件402;
104.存储组件401中存储有一条或多条计算机指令,其中,一条或多条计算机指令供处理组件402调用执行,以实现图2实施例所述的数据处理方法。
105.其中,处理组件402可以包括一个或多个处理器来执行计算机指令,以完成上述的方法中的全部或部分步骤。当然处理组件也可以为一个或多个应用程序专用集成电路(asic)、数字信号处理器(dsp)、数字信号处理设备(dspd)、可编程逻辑器件(pld)、现场可编程门阵列(fpga)、刷新控制器、微刷新控制器、微处理器或其他电子元件实现,用于执行上述图2实施例所述的数据处理方法。
106.存储组件401被配置为存储各种类型的数据以支持在终端的操作。存储组件可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(sram),电可擦除可编程只读存储器(eeprom),可擦除可编程只读存储器(eprom),可编程只读存储器(prom),只读存储器(rom),磁存储器,快闪存储器,磁盘或光盘。
107.本技术实施例还提供了一种计算机可读存储介质,存储有计算机程序,所述计算机程序被计算机执行时可以实现上述图2所示实施例的数据处理方法。
108.本技术实施例还提供了一种计算机程序产品,当其在计算机的处理器上运行时,使得计算机的处理器执行上述图2所示实施例的数据处理方法。
109.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
110.以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
111.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施例可借
助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
112.最后应说明的是:以上实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的精神和范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1