CN113297318B - 数据处理方法、装置、电子设备及存储介质 - Google Patents
数据处理方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN113297318B CN113297318B CN202010664421.XA CN202010664421A CN113297318B CN 113297318 B CN113297318 B CN 113297318B CN 202010664421 A CN202010664421 A CN 202010664421A CN 113297318 B CN113297318 B CN 113297318B
- Authority
- CN
- China
- Prior art keywords
- data
- sub
- repair
- range
- task
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 15
- 238000000034 method Methods 0.000 claims abstract description 80
- 230000008569 process Effects 0.000 claims abstract description 34
- 230000008439 repair process Effects 0.000 claims description 329
- 238000012545 processing Methods 0.000 claims description 66
- 238000013500 data storage Methods 0.000 claims description 12
- 230000001172 regenerating effect Effects 0.000 claims description 3
- 238000011084 recovery Methods 0.000 claims 1
- 239000002699 waste material Substances 0.000 abstract description 7
- 230000007547 defect Effects 0.000 abstract description 5
- 238000010586 diagram Methods 0.000 description 12
- 230000005540 biological transmission Effects 0.000 description 10
- 230000006870 function Effects 0.000 description 9
- 238000004364 calculation method Methods 0.000 description 7
- 238000004891 communication Methods 0.000 description 6
- 238000004590 computer program Methods 0.000 description 6
- 230000000052 comparative effect Effects 0.000 description 4
- 230000011218 segmentation Effects 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 230000003203 everyday effect Effects 0.000 description 2
- 239000013589 supplement Substances 0.000 description 2
- 230000005856 abnormality Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000008263 repair mechanism Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
- G06F16/278—Data partitioning, e.g. horizontal or vertical partitioning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/215—Improving data quality; Data cleansing, e.g. de-duplication, removing invalid entries or correcting typographical errors
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Quality & Reliability (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开实施例公开了一种数据处理方法、装置、电子设备及存储介质,所述方法包括:确定当前节点上的主数据范围;所述主数据范围内的主数据对应有存储在其他节点上的多个副本数据;将所述主数据范围切分成多个第一子数据范围;分别针对每个所述第一子数据范围进行数据修复,以便将所述第一子数据范围内的子数据与所述副本数据中对应的副本子数据中不一致的数据修复一致。该技术方案能够克服在数据修复过程中,针对在多个节点上存储有多个副本的数据进行多次修复而造成资源浪费的缺陷。
Description
技术领域
本公开涉及计算机技术领域,具体涉及一种数据处理方法、装置、电子设备及存储介质。
背景技术
分布式***为了保证数据可靠性,通常会把一份数据分别存在多个节点上,并且需要保持多个节点上的数据一致。但是一些分布式***由于各种原因会存在各个数据副本不一致的情况,例如Cassandra数据库中用户采用one、two、quorum等多种不同的级别向多个数据副本进行写数据时,会造成其中一些副本数据不全。常见的分布式***也会有自己的数据修复功能,例如Cassandra数据库的hint&read-reapair修复机制,但是这种修复机制会造成***的资源开销较大,运维成本较高。
发明内容
本公开实施例提供一种数据处理方法、装置、电子设备及计算机可读存储介质。
第一方面,本公开实施例中提供了一种数据处理方法,其中,包括:
确定当前节点上的主数据范围;所述主数据范围内的主数据对应有存储在其他节点上的多个副本数据;
将所述主数据范围切分成多个第一子数据范围;
分别针对每个所述第一子数据范围进行数据修复,以便将所述第一子数据范围内的子数据与所述副本数据中对应的副本子数据中不一致的数据修复一致。
进一步地,别针对每个所述第一子数据范围进行数据修复,以便将所述第一子数据范围内的子数据与所述副本数据中对应的副本子数据中不一致的数据修复一致,包括:
生成每个所述第一子数据范围对应的第一数据修复任务,所述修复任务用于将所述第一子数据范围内的子数据与所述副本数据中对应的副本子数据中不一致的数据修复一致;
为所述第一数据修复任务赋予优先级后提交至任务队列,以便按照所述优先级从所述任务队列中执行所述第一数据修复任务。
进一步地,所述方法还包括:
给所述第一子数据范围内被修复过的数据赋予修复标识;
在所述第一子数据范围内的所有数据均被赋予了修复标识后,标识所述第一子数据范围为修复完成状态。
进一步地,所述方法还包括:
基于修复开始失败的第一条数据至修复开始成功的第一条数据确定第二子数据范围;
生成所述第二子数据范围对应的第二数据修复任务;
为所述第二数据修复任务赋予优先级后提交至所述任务队列。
进一步地,所述方法还包括:
在当前节点宕机恢复之后,针对修复状态为未完成的所述第一子数据范围重新生成所述第一数据修复任务,以及将重新生成的所述第一数据修复任务提交到所述任务队列。
进一步地,分别针对每个所述第一子数据范围进行数据修复,以便将所述第一子数据范围内的子数据与所述副本数据中对应的副本子数据中不一致的数据修复一致,包括:
判断当前的所述第一子数据范围是否属于当前节点的主数据范围;
在当前的所述第一子数据范围属于当前节点的主数据范围时,对当前的所述第一子数据范围进行数据修复。
进一步地,所述方法还包括:
在所述当前节点的所有所述第一子数据范围均为修复完成状态后,启动下一轮数据修复过程。
进一步地,所述方法还包括:
在每一轮数据修复过程开始后,根据所述主数据范围内的数据量以及删除数据的预设过期时间确定所述当前节点的修复周期;
根据所述修复周期确定数据修复速度,以便在所述预设过期时间内根据所述数据修复速度完成对所述主数据范围内所有数据的一轮修复。
第二方面,本发明实施例中提供了一种数据存储***,其中,包括:
多个节点;所述节点包括存储设备和处理设备;其中,
所述存储设备用于存储主数据和/或副本数据,且对应于同一数据的所述主数据和所述副本数据存储在不同节点的所述存储设备上;
所述处理设备用于对所述存储设备上的数据进行修复,在数据修复过程中,所述处理设备通过将所述存储设备上的所述主数据所在的主数据范围切分成多个第一子数据范围,并分别针对每个所述第一子数据范围进行数据修复,以便将所述第一子数据范围内的子数据与所述副本数据中对应的副本子数据中不一致的数据修复一致。
进一步地,所述处理设备在针对每个所述第一子数据范围进行数据修复时,生成每个所述第一子数据范围对应的第一数据修复任务;
所述处理设备还为所述第一数据修复任务赋予优先级后提交至任务队列;
所述处理设备还按照所述优先级从所述任务队列中执行所述第一数据修复任务,以便由所述修复任务将所述第一子数据范围内的子数据与所述副本数据中对应的副本子数据中不一致的数据修复一致。
进一步地,所述处理设备给所述第一子数据范围内被修复过的数据赋予修复标识,并在所述第一子数据范围内的所有数据均被赋予了修复标识后,标识所述第一子数据范围为修复完成状态。
进一步地,所述处理设备在数据修复过程中,还基于修复开始失败的第一条数据至修复开始成功的第一条数据确定第二子数据范围,生成所述第二子数据范围对应的第二数据修复任务,并为所述第二数据修复任务赋予优先级后提交至所述任务队列。
进一步地,在所述处理设备所在的所述节点宕机恢复之后,所述处理设备针对修复状态为未完成的所述第一子数据范围重新生成所述第一数据修复任务,并将重新生成的所述第一数据修复任务提交到所述任务队列。
进一步地,所述处理设备开始对所述第一子数据范围进行数据修复时,判断当前的所述第一子数据范围是否属于当前节点的主数据范围,并在当前的所述第一子数据范围属于当前节点的主数据范围时,对当前的所述第一子数据范围进行数据修复。
进一步地,所述处理设备在所述存储设备上的所有所述第一子数据范围均为修复完成状态后,启动下一轮数据修复过程。
进一步地,所述处理设备在每一轮数据修复过程开始后,根据所述主数据范围内的数据量以及删除数据的预设过期时间确定修复周期,并根据所述修复周期确定数据修复速度;所述处理设备在所述预设过期时间内根据所述数据修复速度完成对所述主数据范围内所有数据的一轮修复。
进一步地,所述处理设备从所述存储设备获取所述第一子数据范围内的子数据,以及从所述副本数据所在的节点获取所述第一子数据范围内的子数据所对应的所述副本子数据;
所述处理设备将所述子数据与所述副本子数据进行两两比较,并根据所述比较结果修复不一致的数据。
第三方面,本发明实施例中提供了一种数据处理装置,其中,包括:
第一确定模块,被配置为确定当前节点上的主数据范围;所述主数据范围内的主数据对应有存储在其他节点上的多个副本数据;
切分模块,被配置为将所述主数据范围切分成多个第一子数据范围;
修复模块,被配置为分别针对每个所述第一子数据范围进行数据修复,以便将所述第一子数据范围内的子数据与所述副本数据中对应的副本子数据中不一致的数据修复一致。
所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的模块。
在一个可能的设计中,上述装置的结构中包括存储器和处理器,所述存储器用于存储一条或多条支持上述装置执行上述对应方法的计算机指令,所述处理器被配置为用于执行所述存储器中存储的计算机指令。上述装置还可以包括通信接口,用于上述装置与其他设备或通信网络通信。
第四方面,本公开实施例提供了一种电子设备,包括存储器和处理器;其中,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行以实现上述任一方面所述的方法。
第五方面,本公开实施例提供了一种计算机可读存储介质,用于存储上述任一装置所用的计算机指令,其包含用于执行上述任一方面所述方法所涉及的计算机指令。
本公开实施例提供的技术方案可以包括以下有益效果:
本公开实施例在分布式***的修复过程中,每个节点自动轮询自身存储的主数据范围内的数据并进行修复,并且通过将主数据范围切分成更小粒度的第一子数据范围之后,针对第一子数据范围进行数据修复。通过这种方式不但克服了已有技术在数据修复过程中,针对在多个节点上存储有多个副本的数据进行多次修复而造成资源浪费的缺陷,同时还通过将主数据范围切分成更小粒度的第一子数据范围,能够实现断点续传以及通过控制单次修复执行的进度,使得一个节点上的数据修复可以被控制在一个较长的时间范围内,避免出现资源消耗瞬时增大的情况。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
结合附图,通过以下非限制性实施方式的详细描述,本公开的其它特征、目的和优点将变得更加明显。
图1示出根据本公开一实施方式的数据处理方法的流程图。
图2示出根据本公开一实施方式的第一子数据范围数据修复过程示意图。
图3示出根据本公开一实施方式的数据存储***的结构框图。
图4示出根据本公开一实施方式的数据存储***中数据一致性修复架构示意图。
图5示出根据本公开一实施方式的数据处理装置的结构框图。
图6是适于用来实现根据本公开一实施方式的数据处理方法的电子设备的结构示意图。
具体实施方式
下文中,将参考附图详细描述本公开的示例性实施方式,以使本领域技术人员可容易地实现它们。此外,为了清楚起见,在附图中省略了与描述示例性实施方式无关的部分。
在本公开中,应理解,诸如“包括”或“具有”等的术语旨在指示本说明书中所公开的特征、数字、步骤、行为、部件、部分或其组合的存在,并且不欲排除一个或多个其他特征、数字、步骤、行为、部件、部分或其组合存在或被添加的可能性。
另外还需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本公开。
下面通过具体实施例详细介绍本公开实施例的细节。
图1示出根据本公开一实施方式的数据处理方法的流程图。如图1所示,该数据处理方法包括以下步骤:
在步骤S101中,确定当前节点上的主数据范围;所述主数据范围内的主数据对应有存储在其他节点上的多个副本数据;
在步骤S102中,将所述主数据范围切分成多个第一子数据范围;
在步骤S103中,分别针对每个所述第一子数据范围进行数据修复,以便将所述第一子数据范围内的子数据与所述副本数据中对应的副本子数据中不一致的数据修复一致。
本公开的发明人发现,Datastax集群***采用Cassandra数据库存储数据,该集群***中的每个节点均会在适当的时机修复所存储的所有数据(包括主数据和副本数据),而每一轮修复之前会把修复的数据切分成很多细小的数据段(segment),切分完成以后按照自己定义的策略进行数据段内的数据修复,修复的过程主要是复用Cassandra的读修复逻辑,数据段内的每一条数据均会触发读操作,并且在读到的数据发现异常(例如与其他节点上对应的数据不一致)则会进行异步修复;整个过程中每个节点均会修复该节点所负责的所有范围的数据,包括主范围内的主数据以及作为副本存储的副本范围内的副本数据,因此如果一个集群中某个数据表存储在三个节点上,则该三个节点中的每个节点均会对该数据表进行修复,总共修复三次,因此Datastax集群***中采取的上述数据修复方案会造成重复的计算、IO操作等,最终会导致修复速度降低。
本公开的发明人还发现,Scylladb***采用的数据修复方案会在本节点和对应的副本节点上分别设置一个相同大小的缓存池,每次主副节点会从范围内的最小数据开始读数据并将读出的数据填满缓存池,之后计算两个缓存池对应的哈希值,并通过比较两个哈希值来确定第一步所要修复的数据范围,如果哈希值不一样那么会在填满缓存池的数据里面按照最小集合确定要修复的数据范围,然后批量进行主数据和副本数据的修复操作;但是这种方案需要多次进行哈希计算(包括确定数据范围的时候计算一次,修复数据的时候也需要计算一次),比较耗资源;此外这种方案每次对比的粒度是缓存池大小,如果缓存池中只有一条数据不一样,则最终也会计算整个缓存池大小的数据,造成大量的冗余计算。
本实施例中,数据集群包括多个节点,每个节点上存储有分布式***中的数据,并且分布式***中的同一块数据可以包括多个副本,分别存储在多个节点上,例如3个节点上,其中一个节点存储该块数据的主数据,而其他节点存储该块数据的副本数据。为了保证分布式***的数据不丢失,需要保证主数据和副本数据的一致性。而为了保证主数据和副本数据的一致性,本公开实施例中由每个节点自动对所负责的主数据进行修复处理(如果该节点上还存储有其他节点上的副本数据的话,则该节点不对该副本数据进行修复,而由其他节点来修复即可)。需要说明的是,同一个节点上可以存储多块不同的数据,并且该多块不同的数据可以是主数据也可以是副本数据,也就是说同一个节点上既可以存储主数据也可以存储副本数据。
因此,本公开实施例的修复数据过程中,每个节点针对本节点上存储的主数据进行修复,而本节点上存储的副本数据则由存储该副本数据对应的主数据的节点来修复。通过这种方式,可以避免多个节点对同一块数据进行多次修复,能够节省***资源。
本实施例中,每个节点在一轮修复开始后,确定当前节点上存储的主数据范围,也即当前节点上存储的主数据的范围,例如主数据的第一条记录到最后一条记录之间的范围。当然可以理解的是,当前节点上存储多块数据的主数据时,则该主数据范围可以包括多个。需要说明的是,主数据范围内的主数据在其他节点上存储有多个副本数据,数据修复的目的是通过修复该主数据范围内的主数据和其他节点上存储的多个副本数据,使得该主数据和副本数据保持一致。
当前节点在确定了主数据范围之后,可以将主数据范围切分成多个第一子数据范围,第一子数据范围内的子数据大小可以是预先定义好的,例如第一子数据范围内的子数据大小默认为200M,当然在需要的情况下还可以预先修改成其他大小,具体根据实际情况而定,在此不做限制。例如,在切分过程中,可以从主数据范围的最小一条数据记录开始进行切分,每隔N条数据切分为一个第一子数据范围。在当前节点上有多块主数据时,针对每个主数据均采用上述方法进行切分。
在切分得到多个第一子数据范围之后,可以针对每个第一子数据范围进行数据修复。在针对第一子数据范围的修复过程中,例如可以从第一个第一子数据范围开始,读取主数据中当前第一子数据范围内的数据以及其他节点上存储的副本数据中对应当前第一子数据范围的数据进行比较,如果不一致则可以确定是主数据中当前第一子数据范围内的数据有误还是副本数据中当前第一子数据范围内的数据有误。例如,当前节点上存储有主数据,而其他两个节点上分别存储有副本数据的情况下,可以从当前节点和其他两个节点上读取到当前第一子数据范围内的三个数据,通过两两比较一致性来确定哪个节点上的数据有误,并针对有误的数据进行修复。在一些实施例中,在比较数据一致性时可以以一个关键词key记录为粒度进行比较,通过这种修复方式不会造成只存在个别key有差异时,批量数据被误修复的情况。
在当前节点上的所有第一子数据范围内的数据均被修复完成之后,当前节点可以启动下一轮的轮询修复,重复上述修复过程。本公开实施例中,可以在一轮修复开始时,通过流控以及当前节点上主数据范围内的数据量,计算一轮修复所需要的时间,并通过控制流控速度保证在预设时间范围内完成一轮修复,该预设时间范围与分布式文件***的存储策略相关。例如,Cassandra在删除一条数据的时候,会执行一个***操作,新***的一条数据被称为tombstone(墓碑),墓碑和普通记录最大的差别在于:它拥有一个过期时间(expiration date/time)。当过期时间到达的时候,tombstone数据在Cassandra执行Compaction操作的时候会被真正的从磁盘上删除;因此,本公开实施例中,在采用Cassandra存储数据时,该预设时间范围可以设置为tombstone的过期时间(默认为10天)。
本公开实施例在分布式***的修复过程中,每个节点自动轮询自身存储的主数据范围内的数据并进行修复,并且通过将主数据范围切分成更小粒度的第一子数据范围之后,针对第一子数据范围进行数据修复。通过这种方式不但克服了已有技术在数据修复过程中,针对在多个节点上存储有多个副本的数据进行多次修复而造成资源浪费的缺陷,同时还通过将主数据范围切分成更小粒度的第一子数据范围,能够实现断点续传以及通过控制单次修复执行的进度,使得一个节点上的数据修复可以被控制在一个较长的时间范围内,避免出现资源消耗瞬时增大的情况。
在本实施例的一个可选实现方式中,步骤S103,即分别针对每个所述第一子数据范围进行数据修复,以便将所述第一子数据范围内的子数据与所述副本数据中对应的副本子数据中不一致的数据修复一致的步骤,进一步包括以下步骤:
生成每个所述第一子数据范围对应的第一数据修复任务,所述修复任务用于将所述第一子数据范围内的子数据与所述副本数据中对应的副本子数据中不一致的数据修复一致;
为所述第一数据修复任务赋予优先级后放入任务队列,以便按照所述优先级从所述任务队列中执行所述第一数据修复任务。
该可选的实现方式中,针对每个第一子数据范围可以启动一第一数据修复任务,并且还可以按照预先设定的因素针对每个第一子数据范围设置优先级,并且可以按照该设置的优先级调用执行该些第一数据修复任务,例如可以优先调用执行优先级较高的第一数据修复任务。在一些实施例中,给第一子数据范围对应的第一数据修复任务赋予的优先级可以表示该第一子数据范围的数据修复紧急程度,需要紧急修复的第一子数据范围可以赋予较高的优先级,而不需要紧急修复的可以赋予较低的优先级。例如,可以将主数据范围内靠前的第一子数据范围赋予较高的优先级,而靠后的第一子数据范围赋予较低的优先级。通过这种方式,可以按照紧急程度先修复较紧急的第一子数据范围,后修复其他第一子数据范围。
在本实施例的一个可选实现方式中,该方法进一步还包括以下步骤:
给所述第一子数据范围内被修复过的数据赋予修复标识;
在所述第一子数据范围内的所有数据均被赋予了修复标识后,标识所述第一子数据范围为修复完成状态。
该可选的实现方式中,第一数据修复任务可以针对第一子数据范围内的数据以较细粒度进行对比修复,例如以一个关键词key记录为粒度进行数据的对比修复时,可以通过比较第一子数据范围内的当前key对应的数据记录与副本数据中该key对应的记录是否两两一致进行修复,在当前key对应的数据与副本数据中对应的数据一致时,可以给该key对应的数据赋予修复标识,表示该数据已被修复,而在当前key对应的数据与副本数据中对应的数据不一致时,可以将当前key与副本数据中不一致的数据进行修复,并且在修复完成之后给当前key对应的数据赋予修复标识。通过这种方式,在第一子数据范围内的所有数据均被赋予了修复标识之后,可以确定该第一子数据范围内的数据被修复完成,因此可以将该第一子数据范围的修复状态标识为修复完成状态,否则可以将该第一子数据范围的数据标识为修复未完成状态。
在本实施例的一个可选实现方式中,该方法进一步还包括以下步骤:
针对所述副本数据中对应的数据,基于修复开始失败的第一条数据至修复开始成功的第一条数据确定第二子数据范围;
生成所述第二子数据范围对应的第二数据修复任务;
为所述第二数据修复任务赋予优先级后提交至所述任务队列。
该可选的实现方式中,在数据修复过程中,如果副本数据所在的节点发生宕机,则从该副本数据所在节点宕机开始,数据均会发生修复失败的情况,此时可以每条数据执行多次修复例如3次修复均失败后,则记录该条数据修复失败,并且继续修复后续的数据;而在该副本数据所在的节点恢复后,则后续的数据则可以修复成功,因此可以从该开始失败的第一条数据到修复开始成功的第一条数据确定第二子数据范围,并且该第二子数据范围内的数据由于副本数据所在的节点宕机而导致均未修复成功,因此可以针对将该第二子数据范围内的数据生成第二数据修复任务,并且将该第二数据修复任务赋予优先级之后提交到任务队列中,以便通过调用任务队列中的任务而实现对该第二子数据范围内的数据的重新修复。该第二子数据范围为第一子数据范围所包括的一个子数据范围。在该第二子数据范围对应的第二数据修复任务执行完成,并且该第二子数据范围内的所有数据修复成功之后,才认为该第一子数据范围处于修复完成状态。
在本实施例的一个可选实现方式中,该方法进一步还包括以下步骤:
在当前节点宕机恢复之后,针对修复状态为未完成的所述第一子数据范围重新生成所述第一数据修复任务,以及将重新生成的所述第一数据修复任务提交到所述任务队列。
该可选的实现方式中,存储主数据的当前节点发生宕机并且恢复后,可以从***记录的信息中查询得到当前处于修复完成状态的第一子数据范围和处于未修复完成状态的第一子数据范围,针对处于未修复完成状态的第一子数据范围可以重新生成对应的第一数据修复任务,并将重新生成的第一数据修复任务赋予优先级之后提交到执行任务中,继续执行对第一子数据范围内数据的修复工作。通过该实施方式,可以实现断点续传的功能,并且断点续传的粒度为一个子数据范围。在一些实施例中,一个子数据范围的大小可以设置为200M,因此通过这种方式的断点续传粒度较细,能够提升数据修复效率。
图2示出根据本公开一实施方式的第一子数据范围数据修复过程示意图。如图2所示,针对每个第一子数据范围启动对应的第一数据修复任务之后,放入任务队列中,执行引擎按照优先级调用任务队列中的任务,并且每次调用时从***中的子范围记录表获取当前子数据范围的修复状态,如果是修复完成状态,则可以不执行该修复任务,如果是修复未完成状态则开始对该第一子数据范围对应的子数据和副本子数据进行修复,在修复成功之后将子范围记录表中的修复状态标记为修复完成状态,而修复失败之后则将子范围记录表中的修复状态标记为修复未完成状态,同时再启动一个新的修复任务之后,放入任务队列中,以便下次继续执行该修复任务。
在本实施例的一个可选实现方式中,步骤S103,即分别针对每个所述第一子数据范围进行数据修复,以便将所述第一子数据范围内的子数据与所述副本数据中对应的副本子数据中不一致的数据修复一致的步骤,进一步包括以下步骤:
判断当前的所述第一子数据范围是否属于当前节点的主数据范围;
在当前的所述第一子数据范围属于当前节点的主数据范围时,对当前的所述第一子数据范围进行数据修复。
该可选的实现方式中,针对每个第一子数据范围内的数据进行修复前,可以先判断当前的第一子数据范围是否依然属于当前节点的主数据范围。这是因为,在有新的节点加入到集群之后,可能会存在原集群中某节点进行修复的主数据范围和新增节点需要修复的主数据范围重叠的情况,比如原来节点A负责的主数据范围为1-5,而新增节点B分担了3-5的主数据范围,那么因为节点A在本轮修复过程中依然会修复主数据范围1-5,而B在加入并状态变成正常以后会修复主数据范围3-5,那么就会存在重叠修复3-5这一数据范围的情况。这种不会影响正确性,但是会造成重复修数据。为了解决这个问题,本公开实施例以第一子数据范围为粒度,在每一轮开始一个新的第一子数据范围的数据修复过程时,先判断下该第一子数据范围是否依然属于当前节点的主数据范围即可。通过这种方式,解决了在新节点加入后造成的数据重复修复而导致资源浪费的问题。
在本实施例的一个可选实现方式中,该方法进一步还包括以下步骤:
在所述当前节点的所有所述第一子数据范围均为修复完成状态后,启动下一轮数据修复过程。
该可选的实现方式中,每个节点的数据修复过程可以为一个循环的流程,在一轮数据修复过程结束之后开启下一轮数据修复过程,每轮数据修复过程结束的要素是该当前节点上主数据范围内的所有子数据范围均处于修复完成状态。通过这种方式,集群中的每个节点可以自动轮询修复自身存储的主数据范围内的主数据以及其他节点上该主数据范围内的主数据对应的在其他节点上存储副本数据,最终使得集群中所有节点上的所有数据均能够不断地被修复,以便能够始终保持集群中主数据与副本数据之间的一致性。
在本实施例的一个可选实现方式中,该方法进一步还包括以下步骤:
在每一轮数据修复过程开始后,根据所述主数据范围内的数据量以及删除数据的预设过期时间确定所述当前节点的修复周期;
根据所述修复周期确定数据修复速度,以便在所述预设过期时间内根据所述数据修复速度完成对所述主数据范围内所有数据的一轮修复。
该可选的实现方式中,删除数据的预设过期时间为删除的数据在分布式***中所保留的时间,可以基于所采用的分布式***的不同而不同,例如,Cassandra***中的预设过期时间可以为gc_grace_seconds时间,Cassandra***在删除一条数据的时候,会执行一个***操作,新***的一条数据被称为tombstone(墓碑),墓碑和普通记录最大的差别在于:它拥有一个过期时间gc_grace_seconds。当该过期时间到达的时候,tombstone数据将被彻底删除。因此,在应用层面被删除的数据被***彻底删除前所保留的时间为删除数据的预设过期时间,在该预设过期时间之前完成一轮数据修复则不会最终造成主副数据不一致的情况。
本公开实施例根据主数据范围内的数据量以及该预设过期时间确定数据修复速度,以便根据该数据修复速度对当前节点中主数据范围内的数据进行修复,使得一轮修复流程完成的时间被控制在预设过期时间内。在一些实施例中,该数据修复速度可以是流控速度。通过流控速度可以控制每天修复的数据量,在每天修复的数据量完成之后,可以暂停当前的修复过程,并在第二天继续进行修复。例如,单个节点的主数据范围内的数据量为N兆,而预设过去时间为M天,则每天允许修复的数据量是N/M兆。流控速度可以认为是N/M兆/天。通过这种方式,本公开实施例将一次巨量的修复任务(例如哈希计算对比,主副数据中差距数据的补齐等)进行打平,在分布式***可允许的时间范围内进行修复,降低了数据修复对客户带来的影响。
在本实施例的一个可选实现方式中,所述步骤S103,即分别针对每个所述第一子数据范围进行数据修复,以便将所述第一子数据范围内的子数据与所述副本数据中对应的副本子数据中不一致的数据修复一致的步骤,进一步包括以下步骤:
从所述当前节点获取所述第一子数据范围内的子数据,以及从所述副本数据所在的其他节点获取所述第一子数据范围内的子数据所对应的所述副本子数据;
将所述子数据与所述副本子数据进行两两比较;
根据所述比较结果修复不一致的数据。
该可选的实现方式中,针对第一子数据范围内的子数据进行修复时,先将第一子数据范围内的子数据以及其他节点上对应的副本子数据读取到一块存储区域,进而再进行两两比较,例如针对子数1存在两个副本数据2和3的情况下,进行两两比较修复的过程包括:
1、比较子数据1和副本子数据2,以便补齐不一致的数据,比如子数据1中当前读取出的key对应的记录是{1,2,3},而副本子数据2中读取出key对应的是{1,2},则可以将key为{3}记录为副本子数据2所缺少的数据;
2、比较副本子数据2和副本子数据3,以便补齐不一致的数据,比如副本子数据2中当前读取出的key对应的记录是{1,2},而副本子数据3中读取出key对应的是{1},则可以将key为{2}记录为副本子数据3所缺少的数据;
3、比较子数据1和副本子数据3,以便补齐不一致的数据;比如子数据1中当前读取出的key对应的记录是{1,2,3},而副本子数据3中读取出key对应的是{1},则可以将key为{2,3}记录为副本子数据3所缺少的数据;
最终,可以确定副本子数据2中key的记录缺少{3},副本子数据3中key的记录缺少{2,3},因此可以将key为{3}这条记录推送到副本子数据2所在的节点,使得该节点将副本子数据2中key的记录修复为{1,2,3},而可以将key为{2,3}这条记录推送到副本子数据3所在的节点,使得该节点将副本子数据3中key的记录修复为{1,2,3}。
图3示出根据本公开一实施方式的数据存储***的结构框图。如图3所示,该数据存储***包括:多个节点301~30N;所述节点包括存储设备3011~30N1和处理设备3012~30N2;其中,
所述存储设备3011~30N1用于存储主数据和/或副本数据,且对应于同一数据的所述主数据和所述副本数据存储在不同节点的所述存储设备上;
所述处理设备3012~30N2用于对所述存储设备上的数据进行修复,在数据修复过程中,所述处理设备3012~30N2通过将所述存储设备3011~30N1上的所述主数据所在的主数据范围切分成多个第一子数据范围,并分别针对每个所述第一子数据范围进行数据修复,以便将所述第一子数据范围内的子数据与所述副本数据中对应的副本子数据中不一致的数据修复一致。
本实施例中,该数据存储***可以是分布式***,多个节点301~30N可以组成集群,每个节点301~30N至少包括存储设备和处理设备。每个节点301~30N可以轮询修复存储设备上存储的主数据以及对应存储在其他节点上的该主数据的副本数据。每个节点在完成一轮修复之后,自动开启下一轮修复,通过不断轮询的方式使得该数据存储***中的主副本数据能始持一致。
处理设备用于执行本节点存储设备上存储的主数据的修复流程。具体修复细节可以参加上述图1及相关实施例中的描述,在此不再赘述。
本实施例中的数据存储***中,每个节点自动轮询自身存储的主数据范围内的数据并进行修复,并且通过将主数据范围切分成更小粒度的第一子数据范围之后,针对第一子数据范围进行数据修复。通过这种方式不但克服了已有存储***在数据修复过程中,针对在多个节点上存储有多个副本的数据进行多次修复而造成资源浪费的缺陷,同时还通过将主数据范围切分成更小粒度的第一子数据范围,能够实现断点续传以及通过控制单次修复执行的进度,使得一个节点上的数据修复可以被控制在一个较长的时间范围内,避免出现资源消耗瞬时增大的情况。
在本实施例的一个可选实现方式中,所述处理设备在针对每个所述第一子数据范围进行数据修复时,生成每个所述第一子数据范围对应的第一数据修复任务;
所述处理设备还为所述第一数据修复任务赋予优先级后提交至任务队列;
所述处理设备还按照所述优先级从所述任务队列中执行所述第一数据修复任务,以便由所述修复任务将所述第一子数据范围内的子数据与所述副本数据中对应的副本子数据中不一致的数据修复一致。
该可选的实现方式中,处理设备针对每个第一子数据范围启动第一数据修复任务,并且将第一数据修复任务赋予优先级之后放入任务队列中,处理设备还通过启动任务调度流程,从任务队列中按照优先级调用执行每个第一数据修复任务,具体细节可以参见上述数据处理方法中的描述,在此不再赘述。
在本实施例的一个可选实现方式中,所述处理设备给所述第一子数据范围内被修复过的数据赋予修复标识,并在所述第一子数据范围内的所有数据均被赋予修复标识后,标识所述第一子数据范围为修复完成状态。
在本实施例的一个可选实现方式中,所述处理设备在数据修复过程中,还基于修复开始失败的第一条数据至修复开始成功的第一条数据确定第二子数据范围,生成所述第二子数据范围对应的第二数据修复任务,并为所述第二数据修复任务赋予优先级后提交至所述任务队列。
在本实施例的一个可选实现方式中,在所述处理设备所在的所述节点宕机恢复之后,所述处理设备针对修复状态为未完成的所述第一子数据范围重新生成所述第一数据修复任务,并将重新生成的所述第一数据修复任务提交到所述任务队列。
在本实施例的一个可选实现方式中,所述处理设备开始对所述第一子数据范围进行数据修复时,判断当前的所述第一子数据范围是否属于当前节点的主数据范围,并在当前的所述第一子数据范围属于当前节点的主数据范围时,对当前的所述第一子数据范围进行数据修复。
在本实施例的一个可选实现方式中,所述处理设备在所述存储设备上的所有所述第一子数据范围均为修复完成状态后,启动下一轮数据修复过程。
在本实施例的一个可选实现方式中,所述处理设备在每一轮数据修复过程开始后,根据所述主数据范围内的数据量以及删除数据的预设过期时间确定修复周期,并根据所述修复周期确定数据修复速度;所述处理设备在所述预设过期时间内根据所述数据修复速度完成对所述主数据范围内所有数据的一轮修复。
在本实施例的一个可选实现方式中,所述处理设备从所述存储设备获取所述第一子数据范围内的子数据,以及从所述副本数据所在的节点获取所述第一子数据范围内的子数据所对应的所述副本子数据;
所述处理设备将所述子数据与所述副本子数据进行两两比较,并根据所述比较结果修复不一致的数据。
上述可选实现方式中的具体细节可以参见上述对数据处理方法中的相应描述,在此不再赘述。
图4示出根据本公开一实施方式的数据存储***中数据一致性修复架构示意图。如图4所示,数据存储***400包括多个节点,每个节点均存储有分布式***中的数据,该数据可以是主数据也可以是副本数据。假设节点A上存储有主数据1和副本数据10,该主数据1和副本数据10不具有对应关系,主数据1对应的副本数据存储在节点B和C上,节点B和C上分别存储了主数据1对应的副本数据2和副本数据3。副本数据10对应的主数据20存储在除节点A之外的其他节点上,例如存储节点D上。可以理解的是,节点A、B、C、D上除了上述主数据1、副本数据10、主数据20、副本数据2和副本数据3之外,还可以存储其他数据,并且可以是主数据也可以是副本数据,在此仅为了举例说明本公开实施例的数据修复过程,实际情况并不限于此。
节点A启动一轮数据修复过程后,将主数据1所在的主数据范围切分成多个第一子数据范围1~n,针对多个第一子数据范围1~n启动n个第一数据修复任务1~n,分别用于对多个第一子数据范围1~n内的子数据进行修复。首先,为n个第一数据修复任务1~n赋予优先级,例如按照子数据存储地址从小到大的顺序为第一数据修复任务1~n按照从大到小赋予优先级,也即存储在前面的子数据对应的第一数据修复任务的优先级大于存储在后面的子数据对应的第一数据修复任务的优先级。因此,可以得到优先级排列顺序为第一数据修复任务1>第一数据修复任务2>……>第一数据修复任务n。将上述第一数据修复任务1~n提交到任务队列1中,执行引擎可以从优先级从大到小的顺序执行第一数据修复任务1~n。以第一数据修复任务1的执行过程为例,从节点A获取该第一数据修复任务1对应的第一子数据范围1内的子数据1,从节点B和C分别获取副本数据2和副本数据3中与子数据1对应的副本子数据2和副本子数据3,两两比较子数据1、副本子数据2和副本子数据3,假如子数据1与副本子数据2比较不一致,且子数据1中的数据少于副本子数据2中的数据,则可以使用副本子数据2中的数据修复子数据1,也即将子数据1中缺少的数据补齐,假如副本子数据3与子数据1比较不一致,且副本子数据3中的数据比子数据1少,则可以将副本子数据3)中缺少的数据发送至节点C,请求节点C补齐副本子数据3中缺少的数据。第一数据修复任务1执行完成,并且对应的子数据均修复成功,则可以将第一数据修复任务1对应的第一子数据范围1的状态标记为修复完成状态。通过上述方式,依次完成任务队列中的所有第一数据修复人去1~n。
在节点A的主数据1对应的第一子数据范围1~n的所有状态均被标记为修复完成状态之后,可以认为主数据1修复成功,可以继续修复下一主数据(如果有的话),如果节点A上所有的主数据均被修复完成,则节点A可以启动下一轮的数据修复过程,并重复上述步骤。
节点D启动一轮数据修复过程后,可以通过上述同样的流程对主数据20进行修复,假设切分后得到第一子数据范围1~m,对应启动m个第一数据修复任务1~m,该修复过程中节点A上的副本数据10也得以修复。
以上仅为举例说明,分布式***200中数据修复不限于上述流程中列举出的内容,所有节点均可以采用上述方式进行数据修复,并且每个节点上的每个主数据均可以采用上述流程进行修复。
下述为本公开装置实施例,可以用于执行本公开方法实施例。
图5示出根据本公开一实施方式的数据处理装置的结构框图。如图5所示,该装置可以通过软件、硬件或者两者的结合实现成为电子设备的部分或者全部。该数据处理装置包括:
第一确定模块501,被配置为确定当前节点上的主数据范围;所述主数据范围内的主数据对应有存储在其他节点上的多个副本数据;
切分模块502,被配置为将所述主数据范围切分成多个第一子数据范围;
修复模块503,被配置为分别针对每个所述第一子数据范围进行数据修复,以便将所述第一子数据范围内的子数据与所述副本数据中对应的副本子数据中不一致的数据修复一致。
本实施例中,数据集群包括多个节点,每个节点上存储有分布式文***中的数据,并且分布式***中的同一块数据可以包括多个副本,分别存储在多个节点上,例如3个节点上,其中一个节点存储该块数据的主数据,而其他节点存储该块数据的副本数据。为了保证分布式***的数据不丢失,需要保证主数据和副本数据的一致性。而为了保证主数据和副本数据的一致性,本公开实施例中由每个节点自动对所负责的主数据进行修复处理(如果该节点上还存储有其他节点上的副本数据的话,则该节点不对该副本数据进行修复,而由其他节点来修复即可)。需要说明的是,同一个节点上可以存储多块不同的数据,并且该多块不同的数据可以是主数据也可以是副本数据,也就是说同一个节点上既可以存储主数据也可以存储副本数据。
因此,本公开实施例的修复数据过程中,每个节点针对本节点上存储的主数据进行修复,而本节点上存储的副本数据则由存储该副本数据对应的主数据的节点来修复。通过这种方式,可以避免多个节点对同一块数据进行多次修复,能够节省***资源。
本实施例中,每个节点在一轮修复开始后,确定当前节点上存储的主数据范围,也即当前节点上存储的主数据的范围,例如主数据的第一条记录到最后一条记录之间的范围。当然可以理解的是,当前节点上存储多块数据的主数据时,则该主数据范围可以包括多个。需要说明的是,主数据范围内的主数据在其他节点上存储有多个副本数据,数据修复的目的是通过修复该主数据范围内的主数据和其他节点上存储的多个副本数据,使得该主数据和副本数据保持一致。
当前节点在确定了主数据范围之后,可以将主数据范围切分成多个第一子数据范围,第一子数据范围内的子数据大小可以是预先定义好的,例如第一子数据范围内的子数据大小默认为200M,当然在需要的情况下还可以预先修改成其他大小,具体根据实际情况而定,在此不做限制。例如,在切分过程中,可以从主数据范围的最小一条数据记录开始进行切分,每隔N条数据切分为一个第一子数据范围。在当前节点上有多块主数据时,针对每个主数据均采用上述方法进行切分。
在切分得到多个第一子数据范围之后,可以针对每个第一子数据范围进行数据修复。在针对第一子数据范围的修复过程中,例如可以从第一个第一子数据范围开始,读取主数据中当前第一子数据范围内的数据以及其他节点上存储的副本数据中对应当前第一子数据范围的数据进行比较,如果不一致则可以确定是主数据中当前第一子数据范围内的数据有误还是副本数据中当前第一子数据范围内的数据有误。例如,当前节点上存储有主数据,而其他两个节点上分别存储有副本数据的情况下,可以从当前节点和其他两个节点上读取到当前第一子数据范围内的三个数据,通过两两比较一致性来确定哪个节点上的数据有误,并针对有误的数据进行修复。在一些实施例中,在比较数据一致性时可以以一个关键词key的记录为粒度进行比较,通过这种修复方式不会造成只存在个别key有差异时,批量数据被误修复的情况。
在当前节点上的所有第一子数据范围内的数据均被修复完成之后,当前节点可以启动下一轮的轮询修复,重复上述修复过程。本公开实施例中,可以在一轮修复开始时,通过流控以及当前节点上主数据范围内的数据量,计算一轮修复所需要的时间,并通过控制流控速度保证在预设时间范围内完成一轮修复,该预设时间范围与分布式文件***的存储策略相关。例如,Cassandra在删除一条数据的时候,会执行一个***操作,新***的一条数据被称为tombstone(墓碑),墓碑和普通记录最大的差别在于:它拥有一个过期时间(expiration date/time)。当过期时间到达的时候,tombstone数据在Cassandra执行Compaction操作的时候会被真正的从磁盘上删除;因此,本公开实施例中,在采用Cassandra存储数据时,该预设时间范围可以设置为tombstone的过期时间(默认为10天)。
本公开实施例在分布式***的修复过程中,每个节点自动轮询自身存储的主数据范围内的数据并进行修复,并且通过将主数据范围切分成更小粒度的第一子数据范围之后,针对第一子数据范围进行数据修复。通过这种方式不但克服了已有技术在数据修复过程中,针对在多个节点上存储有多个副本的数据进行多次修复而造成资源浪费的缺陷,同时还通过将主数据范围切分成更小粒度的第一子数据范围,能够实现断点续传以及单次修复执行的进度,使得一个节点上的数据修复可以被控制在一个较长的时间范围内,避免出现资源消耗瞬时增大的情况。
在本实施例的一个可选实现方式中,所述修复模块503,包括:
第一生成子模块,被配置为生成每个所述第一子数据范围对应的第一数据修复任务,所述修复任务用于将所述第一子数据范围内的子数据与所述副本数据中对应的副本子数据中不一致的数据修复一致;
提交子模块,被配置为为所述第一数据修复任务赋予优先级后提交至任务队列,以便按照所述优先级从所述任务队列中执行所述第一数据修复任务。
该可选的实现方式中,针对每个第一子数据范围可以启动一第一数据修复任务,并且还可以按照预先设定的因素针对每个第一子数据范围设置优先级,并且可以按照该设置的优先级调用执行该些第一数据修复任务,例如可以优先调用执行优先级较高的第一数据修复任务。在一些实施例中,给第一子数据范围对应的第一数据修复任务赋予的优先级可以表示该第一子数据范围的数据修复紧急程度,需要紧急修复的第一子数据范围可以赋予较高的优先级,而不需要紧急修复的可以赋予较低的优先级。例如,可以将主数据范围内靠前的第一子数据范围赋予较高的优先级,而靠后的第一子数据范围赋予较低的优先级。通过这种方式,可以按照紧急程度先修复较紧急的第一子数据范围,后修复其他第一子数据范围。
在本实施例的一个可选实现方式中,该装置还包括:
赋予模块,被配置为给所述第一子数据范围内被修复过的数据赋予修复标识;
标识模块,被配置为在所述第一子数据范围内的所有数据均被赋予了修复标识后,标识所述第一子数据范围为修复完成状态。
该可选的实现方式中,第一数据修复任务可以针对第一子数据范围内的数据以较细粒度进行对比修复,例如以一个关键词key记录为粒度进行数据的对比修复时,可以通过比较第一子数据范围内的当前key对应的数据记录与副本数据中该key对应的记录是否两两一致进行修复,在当前key对应的数据与副本数据中对应的数据一致时,可以给该key对应的数据赋予修复标识,表示该条数据已被修复,而在当前key对应的数据与副本数据中对应的数据不一致时,可以将当前key与副本数据中不一致的数据进行修复,并且在修复完成之后给当前key对应的数据赋予修复标识。通过这种方式,在第一子数据范围内的所有数据均被赋予了修复标识之后,可以确定该第一子数据范围内的数据被修复完成,因此可以将该第一子数据范围的修复状态标识为修复完成状态,否则可以将该第一子数据范围的数据标识为修复未完成状态。
在本实施例的一个可选实现方式中,该装置还包括:
第二确定模块,被配置为基于修复开始失败的第一条数据至修复开始成功的第一条数据确定第二子数据范围;
第一生成模块,被配置为生成所述第二子数据范围对应的第二数据修复任务;
提交模块,被配置为为所述第二数据修复任务赋予优先级后提交至所述任务队列。
该可选的实现方式中,在数据修复过程中,如果副本数据所在的节点发生宕机,则从该副本数据所在节点宕机开始,数据均会发生修复失败的情况,此时可以每条数据执行多次修复例如3次修复均失败后,则记录该条数据修复失败,并且继续修复后续的数据;而在该副本数据所在的节点恢复后,则后续的数据则可以修复成功,因此可以从该开始失败的第一条数据到修复开始成功的第一条数据确定第二子数据范围,并且该第二子数据范围内的数据由于副本数据所在的节点宕机而导致均未修复成功,因此可以针对将该第二子数据范围内的数据生成第二数据修复任务,并且将该第二数据修复任务赋予优先级之后提交到任务队列中,以便通过调用任务队列中的任务而实现对该第二子数据范围内的数据的重新修复。该第二子数据范围为第一子数据范围所包括的一个子数据范围。在该第二子数据范围对应的第二数据修复任务执行完成,并且该第二子数据范围内的所有数据修复成功之后,才认为该第一子数据范围处于修复完成状态。
在本实施例的一个可选实现方式中,该装置还包括:
第二生成模块,被配置为在当前节点宕机恢复之后,针对修复状态为未完成的所述第一子数据范围重新生成所述第一数据修复任务,以及将重新生成的所述第一数据修复任务提交到所述任务队列。
该可选的实现方式中,存储主数据的当前节点发生宕机并且恢复后,可以从***记录的信息中查询得到当前处于修复完成状态的第一子数据范围和处于未修复完成状态的第一子数据范围,针对处于未修复完成状态的第一子数据范围可以重新生成对应的第一数据修复任务,并将重新生成的第一数据修复任务赋予优先级之后提交到执行任务中,继续执行对第一子数据范围内数据的修复工作。通过该实施方式,可以实现断点续传的功能,并且断点续传的粒度为一个子数据范围。在一些实施例中,一个子数据范围的大小可以设置为200M,因此通过这种方式的断点续传粒度较细,能够提升数据修复效率。
在本实施例的一个可选实现方式中,所述修复模块503,包括:
判断子模块,被配置为判断当前的所述第一子数据范围是否属于当前节点的主数据范围;
第一修复子模块,被配置为在当前的所述第一子数据范围属于当前节点的主数据范围时,对当前的所述第一子数据范围进行数据修复。
该可选的实现方式中,针对每个第一子数据范围内的数据进行修复前,可以先判断当前的第一子数据范围是否依然属于当前节点的主数据范围。这是因为,在有新的节点加入到集群之后,可能会存在原集群中某节点进行修复的主数据范围和新增节点需要修复的主数据范围重叠的情况,比如原来节点A负责的主数据范围为1-5,而新增节点B分担了3-5的主数据范围,那么因为节点A在本轮修复过程中依然会修复主数据范围1-5,而B在加入并状态变成正常以后会修复主数据范围3-5,那么就会存在重叠修复3-5这一数据范围的情况。这种不会影响正确性,但是会造成重复修数据。为了解决这个问题,本公开实施例以第一子数据范围为粒度,在每一轮开始一个新的第一子数据范围的数据修复过程时,先判断下该第一子数据范围是否依然属于当前节点的主数据范围即可。通过这种方式,解决了在新节点加入后造成的数据重复修复而导致资源浪费的问题。
在本实施例的一个可选实现方式中,该装置还包括:
启动模块,被配置为在所述当前节点的所有所述第一子数据范围均为修复完成状态后,启动下一轮数据修复过程。
该可选的实现方式中,每个节点的数据修复过程可以为一个无限循环的流程,在一轮数据修复过程结束之后开启下一轮数据修复过程,每轮数据修复过程结束的要素是该当前节点上主数据范围内的所有子数据范围均处于修复完成状态。通过这种方式,集群中的每个节点可以自动轮询修复自身存储的主数据范围内的主数据以及其他节点上该主数据范围内的主数据对应的在其他节点上存储副本数据,最终使得集群中所有节点上的所有数据均能够不断地被修复,以便能够始终保持集群中主数据与副本数据之间的一致性。
在本实施例的一个可选实现方式中,该装置还包括:
第三确定模块,被配置为在每一轮数据修复过程开始后,根据所述主数据范围内的数据量以及删除数据的预设过期时间确定所述当前节点的修复周期;
第四确定模块,被配置为根据所述修复周期确定数据修复速度,以便在所述预设过期时间内根据所述数据修复速度完成对所述主数据范围内所有数据的一轮修复。
该可选的实现方式中,删除数据的预设过期时间为删除的数据在分布式***中所保留的时间,可以基于所采用的分布式***的不同而不同,例如,Cassandra***中的预设过期时间可以为gc_grace_seconds时间,Cassandra***在删除一条数据的时候,会执行一个***操作,新***的一条数据被称为tombstone(墓碑),墓碑和普通记录最大的差别在于:它拥有一个过期时间gc_grace_seconds。当该过期时间到达的时候,tombstone数据将被彻底删除。因此,在应用层面被删除的数据被***彻底删除前所保留的时间为删除数据的预设过期时间,在该预设过期时间之前完成一轮数据修复则不会最终造成主副数据不一致的情况。
本公开实施例根据主数据范围内的数据量以及该预设过期时间确定数据修复速度,以便根据该数据修复速度对当前节点中主数据范围内的数据进行修复,使得一轮修复流程完成的时间被控制在预设过期时间内。通过这种方式,本公开实施例将一次巨量的修复任务(例如哈希计算对比,主副数据中差距数据的补齐等)进行打平,在分布式***可允许的时间范围内进行修复,降低了数据修复对客户带来的影响。
在本实施例的一个可选实现方式中,所述修复模块503,包括:
获取子模块,被配置为从所述当前节点获取所述第一子数据范围内的子数据,以及从所述副本数据所在的其他节点获取所述第一子数据范围内的子数据所对应的所述副本子数据;
比较子模块,被配置为将所述子数据与所述副本子数据进行两两比较;
第二修复子模块,被配置为根据所述比较结果修复不一致的数据。
该可选的实现方式中,针对第一子数据范围内的子数据进行修复时,先将第一子数据范围内的子数据以及其他节点上对应的副本子数据读取到一块存储区域,进而再进行两两比较,例如针对子数1存在两个副本数据2和3的情况下,进行两两比较修复的过程包括:
1、比较子数据1和副本子数据2,以便补齐不一致的数据,比如子数据1中当前读取出的key对应的记录是{1,2,3},而副本子数据2中读取出key对应的是{1,2},则可以将key为{3}记录为副本子数据2所缺少的数据;
2、比较副本子数据2和副本子数据3,以便补齐不一致的数据,比如副本子数据2中当前读取出的key对应的记录是{1,2},而副本子数据3中读取出key对应的是{1},则可以将key为{2}记录为副本子数据3所缺少的数据;
3、比较子数据1和副本子数据3,以便补齐不一致的数据;比如子数据1中当前读取出的key对应的记录是{1,2,3},而副本子数据3中读取出key对应的是{1},则可以将key为{2,3}记录为副本子数据3所缺少的数据;
最终,可以确定副本子数据2中key的记录缺少{3},副本子数据3中key的记录缺少{2,3},因此可以将key为{3}这条记录推送到副本子数据2所在的节点,使得该节点将副本子数据2中key的记录修复为{1,2,3},而可以将key为{2,3}这条记录推送到副本子数据3所在的节点,使得该节点将副本子数据3中key的记录修复为{1,2,3}。
图6是适于用来实现根据本公开一实施方式的数据处理方法的电子设备的结构示意图。
如图6所示,电子设备600包括处理单元601,其可实现为CPU、GPU、FPGA、NPU等处理单元。处理单元601可以根据存储在只读存储器(ROM)602中的程序或者从存储部分608加载到随机访问存储器(RAM)603中的程序而执行本公开上述任一方法的实施方式中的各种处理。在RAM603中,还存储有电子设备600操作所需的各种程序和数据。处理单元601、ROM602以及RAM603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
以下部件连接至I/O接口605:包括键盘、鼠标等的输入部分606;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至I/O接口605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装入存储部分608。
特别地,根据本公开的实施方式,上文参考本公开实施方式中的任一方法可以被实现为计算机软件程序。例如,本公开的实施方式包括一种计算机程序产品,其包括有形地包含在及其可读介质上的计算机程序,所述计算机程序包含用于执行本公开实施方式中任一方法的程序代码。在这样的实施方式中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。
附图中的流程图和框图,图示了按照本公开各种实施方式的***、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,路程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施方式中所涉及到的单元或模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元或模块也可以设置在处理器中,这些单元或模块的名称在某种情况下并不构成对该单元或模块本身的限定。
作为另一方面,本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施方式中所述装置中所包含的计算机可读存储介质;也可以是单独存在,未装配入设备中的计算机可读存储介质。计算机可读存储介质存储有一个或者一个以上程序,所述程序被一个或者一个以上的处理器用来执行描述于本公开的方法。
以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
Claims (21)
1.一种数据处理方法,其中,所述数据处理方法由当前节点执行,包括:
确定当前节点上的主数据范围;所述主数据范围内的主数据对应有存储在其他节点上的多个副本数据;
将所述主数据范围切分成多个第一子数据范围;
分别针对每个所述第一子数据范围进行数据修复,以便修复所述第一子数据范围内的子数据以及所述其他节点上的多个所述副本数据中对应的副本子数据,使得所述第一子数据范围内的子数据与所述副本子数据保持一致。
2.根据权利要求1所述的方法,分别针对每个所述第一子数据范围进行数据修复,以便将所述第一子数据范围内的子数据与所述副本数据中对应的副本子数据中不一致的数据修复一致,包括:
生成每个所述第一子数据范围对应的第一数据修复任务,所述修复任务用于将所述第一子数据范围内的子数据与所述副本数据中对应的副本子数据中不一致的数据修复一致;
为所述第一数据修复任务赋予优先级后提交至任务队列,以便按照所述优先级从所述任务队列中执行所述第一数据修复任务。
3.根据权利要求1或2所述的方法,所述方法还包括:
给所述第一子数据范围内被修复过的数据赋予修复标识;
在所述第一子数据范围内的所有数据均被赋予了修复标识后,标识所述第一子数据范围为修复完成状态。
4.根据权利要求2所述的方法,所述方法还包括:
基于修复开始失败的第一条数据至修复开始成功的第一条数据确定第二子数据范围;
生成所述第二子数据范围对应的第二数据修复任务;
为所述第二数据修复任务赋予优先级后提交至所述任务队列。
5.根据权利要求2、4任一项所述的方法,所述方法还包括:
在当前节点宕机恢复之后,针对修复状态为未完成的所述第一子数据范围重新生成所述第一数据修复任务,以及将重新生成的所述第一数据修复任务提交到所述任务队列。
6.根据权利要求1-2、4任一项所述的方法,分别针对每个所述第一子数据范围进行数据修复,以便将所述第一子数据范围内的子数据与所述副本数据中对应的副本子数据中不一致的数据修复一致,包括:
判断当前的所述第一子数据范围是否属于当前节点的主数据范围;
在当前的所述第一子数据范围属于当前节点的主数据范围时,对当前的所述第一子数据范围进行数据修复。
7.根据权利要求1-2、4任一项所述的方法,所述方法还包括:
在所述当前节点的所有所述第一子数据范围均为修复完成状态后,启动下一轮数据修复过程。
8.根据权利要求1-2、4任一项所述的方法,所述方法还包括:
在每一轮数据修复过程开始后,根据所述主数据范围内的数据量以及删除数据的预设过期时间确定所述当前节点的修复周期;
根据所述修复周期确定数据修复速度,以便在所述预设过期时间内根据所述数据修复速度完成对所述主数据范围内所有数据的一轮修复。
9.根据权利要求1-2、4任一项所述的方法,分别针对每个所述第一子数据范围进行数据修复,以便将所述第一子数据范围内的子数据与所述副本数据中对应的副本子数据中不一致的数据修复一致,包括:
从所述当前节点获取所述第一子数据范围内的子数据,以及从所述副本数据所在的其他节点获取所述第一子数据范围内的子数据所对应的所述副本子数据;
将所述子数据与所述副本子数据进行两两比较;
根据所述比较结果修复不一致的数据。
10.一种数据存储***,包括:多个节点;所述节点包括存储设备和处理设备;其中,
所述存储设备用于存储主数据和/或副本数据,且对应于同一数据的所述主数据和所述副本数据存储在不同节点的所述存储设备上;
所述处理设备用于对所述存储设备上的数据进行修复,在数据修复过程中,所述处理设备确定当前节点上的主数据范围,通过将所述存储设备上的所述主数据所在的主数据范围切分成多个第一子数据范围,并分别针对每个所述第一子数据范围进行数据修复,以便修复所述第一子数据范围内的子数据以及其他节点上的多个所述副本数据中对应的副本子数据,使得所述第一子数据范围内的子数据与所述副本子数据保持一致。
11.根据权利要求10所述的***,所述处理设备在针对每个所述第一子数据范围进行数据修复时,生成每个所述第一子数据范围对应的第一数据修复任务;
所述处理设备还为所述第一数据修复任务赋予优先级后提交至任务队列;
所述处理设备还按照所述优先级从所述任务队列中执行所述第一数据修复任务,以便由所述修复任务将所述第一子数据范围内的子数据与所述副本数据中对应的副本子数据中不一致的数据修复一致。
12.根据权利要求10或11所述的***,所述处理设备给所述第一子数据范围内被修复过的数据赋予修复标识,并在所述第一子数据范围内的所有数据均被赋予了修复标识后,标识所述第一子数据范围为修复完成状态。
13.根据权利要求11所述的***,所述处理设备在数据修复过程中,还基于修复开始失败的第一条数据至修复开始成功的第一条数据确定第二子数据范围,生成所述第二子数据范围对应的第二数据修复任务,并为所述第二数据修复任务赋予优先级后提交至所述任务队列。
14.根据权利要求11、13任一项所述的***,在所述处理设备所在的所述节点宕机恢复之后,所述处理设备针对修复状态为未完成的所述第一子数据范围重新生成所述第一数据修复任务,并将重新生成的所述第一数据修复任务提交到所述任务队列。
15.根据权利要求10-11、13任一项所述的***,所述处理设备开始对所述第一子数据范围进行数据修复时,判断当前的所述第一子数据范围是否属于当前节点的主数据范围,并在当前的所述第一子数据范围属于当前节点的主数据范围时,对当前的所述第一子数据范围进行数据修复。
16.根据权利要求10-11、13任一项所述的***,所述处理设备在所述存储设备上的所有所述第一子数据范围均为修复完成状态后,启动下一轮数据修复过程。
17.根据权利要求10-11、13任一项所述的***,所述处理设备在每一轮数据修复过程开始后,根据所述主数据范围内的数据量以及删除数据的预设过期时间确定修复周期,并根据所述修复周期确定数据修复速度;所述处理设备在所述预设过期时间内根据所述数据修复速度完成对所述主数据范围内所有数据的一轮修复。
18.根据权利要求10-11、13任一项所述的***,所述处理设备从所述存储设备获取所述第一子数据范围内的子数据,以及从所述副本数据所在的节点获取所述第一子数据范围内的子数据所对应的所述副本子数据;
所述处理设备将所述子数据与所述副本子数据进行两两比较,并根据所述比较结果修复不一致的数据。
19.一种数据处理装置,其中,所述数据处理装置由当前节点执行,包括:
第一确定模块,被配置为确定当前节点上的主数据范围;所述主数据范围内的主数据对应有存储在其他节点上的多个副本数据;
切分模块,被配置为将所述主数据范围切分成多个第一子数据范围;
修复模块,被配置为分别针对每个所述第一子数据范围进行数据修复,以修复所述第一子数据范围内的子数据以及所述其他节点上的多个所述副本数据中对应的副本子数据,使得所述第一子数据范围内的子数据与所述副本子数据保持一致。
20.一种电子设备,其中,包括存储器和处理器;其中,
所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行以实现权利要求1-9任一项所述的方法。
21.一种计算机可读存储介质,其上存储有计算机指令,其中,该计算机指令被处理器执行时实现权利要求1-9任一项所述的方法。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010664421.XA CN113297318B (zh) | 2020-07-10 | 2020-07-10 | 数据处理方法、装置、电子设备及存储介质 |
PCT/CN2021/105201 WO2022007888A1 (zh) | 2020-07-10 | 2021-07-08 | 数据处理方法、装置、电子设备及存储介质 |
US18/095,522 US20230161754A1 (en) | 2020-07-10 | 2023-01-10 | Data processing method and apparatus, electronic device, and storage medium |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010664421.XA CN113297318B (zh) | 2020-07-10 | 2020-07-10 | 数据处理方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113297318A CN113297318A (zh) | 2021-08-24 |
CN113297318B true CN113297318B (zh) | 2023-05-02 |
Family
ID=77318132
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010664421.XA Active CN113297318B (zh) | 2020-07-10 | 2020-07-10 | 数据处理方法、装置、电子设备及存储介质 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20230161754A1 (zh) |
CN (1) | CN113297318B (zh) |
WO (1) | WO2022007888A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116860186B (zh) * | 2023-09-05 | 2023-11-10 | 上海凯翔信息科技有限公司 | 一种分布式集群的数据清理*** |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103544081A (zh) * | 2013-10-23 | 2014-01-29 | 曙光信息产业(北京)有限公司 | 双元数据服务器的管理方法和装置 |
CN104283906A (zh) * | 2013-07-02 | 2015-01-14 | 华为技术有限公司 | 分布式存储***、集群节点及其区间管理方法 |
CN105550230A (zh) * | 2015-12-07 | 2016-05-04 | 北京奇虎科技有限公司 | 分布式存储***节点故障的侦测方法和装置 |
CN106951559A (zh) * | 2017-03-31 | 2017-07-14 | 联想(北京)有限公司 | 分布式文件***中数据恢复方法及电子设备 |
CN107220006A (zh) * | 2017-06-01 | 2017-09-29 | 深圳市云舒网络技术有限公司 | 一种基于tcmu虚拟磁盘的多数据副本一致性保证方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7941404B2 (en) * | 2006-03-08 | 2011-05-10 | International Business Machines Corporation | Coordinated federated backup of a distributed application environment |
CN103744745B (zh) * | 2013-12-13 | 2018-05-29 | 北京奇虎科技有限公司 | 一种数据存储的检测方法、设备及分布式存储*** |
CN108845892A (zh) * | 2018-04-19 | 2018-11-20 | 北京百度网讯科技有限公司 | 分布式数据库的数据处理方法、装置、设备和计算机存储介质 |
US10824600B2 (en) * | 2018-11-12 | 2020-11-03 | DataStax | System and method for maintaining data consistency across replicas in a cluster of nodes using incremental validation |
-
2020
- 2020-07-10 CN CN202010664421.XA patent/CN113297318B/zh active Active
-
2021
- 2021-07-08 WO PCT/CN2021/105201 patent/WO2022007888A1/zh active Application Filing
-
2023
- 2023-01-10 US US18/095,522 patent/US20230161754A1/en active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104283906A (zh) * | 2013-07-02 | 2015-01-14 | 华为技术有限公司 | 分布式存储***、集群节点及其区间管理方法 |
CN103544081A (zh) * | 2013-10-23 | 2014-01-29 | 曙光信息产业(北京)有限公司 | 双元数据服务器的管理方法和装置 |
CN105550230A (zh) * | 2015-12-07 | 2016-05-04 | 北京奇虎科技有限公司 | 分布式存储***节点故障的侦测方法和装置 |
CN106951559A (zh) * | 2017-03-31 | 2017-07-14 | 联想(北京)有限公司 | 分布式文件***中数据恢复方法及电子设备 |
CN107220006A (zh) * | 2017-06-01 | 2017-09-29 | 深圳市云舒网络技术有限公司 | 一种基于tcmu虚拟磁盘的多数据副本一致性保证方法 |
Also Published As
Publication number | Publication date |
---|---|
CN113297318A (zh) | 2021-08-24 |
US20230161754A1 (en) | 2023-05-25 |
WO2022007888A1 (zh) | 2022-01-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8560889B2 (en) | Adding scalability and fault tolerance to generic finite state machine frameworks for use in automated incident management of cloud computing infrastructures | |
US8381015B2 (en) | Fault tolerance for map/reduce computing | |
CN105635252B (zh) | 一种Hadoop分布式文件***HDFS纠删码冗余备份方法 | |
CN113569987A (zh) | 模型训练方法和装置 | |
CN110018926B (zh) | 故障恢复方法、装置、电子设备及计算机可读存储介质 | |
WO2020232951A1 (zh) | 一种任务执行方法及装置 | |
CN113064744A (zh) | 任务处理方法、装置、计算机可读介质及电子设备 | |
CN113297318B (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN107943617B (zh) | 数据的修复方法、装置及服务器集群 | |
CN104484167A (zh) | 任务处理方法及装置 | |
EP3147789B1 (en) | Method for re-establishing standby database, and apparatus thereof | |
US10365848B2 (en) | Space reservation for distributed storage systems | |
CN115220876A (zh) | 虚拟资源创建方法、装置、程序产品、介质及电子设备 | |
CN114554593A (zh) | 数据处理方法及装置 | |
US11522966B2 (en) | Methods, devices and systems for non-disruptive upgrades to a replicated state machine in a distributed computing environment | |
CN113658351A (zh) | 一种产品生产的方法、装置、电子设备及存储介质 | |
CN107783826B (zh) | 一种虚拟机迁移方法、装置及*** | |
CN111880947A (zh) | 一种数据传输方法及装置 | |
CN116069765A (zh) | 数据迁移方法、装置、电子设备及存储介质 | |
CN110086660B (zh) | 一种数据处理方法及装置 | |
CN107122489B (zh) | 一种数据对比方法及装置 | |
JP2018538632A (ja) | ノードの再起動後にデータを処理する方法及びデバイス | |
CN114385761B (zh) | 一种基于共识***的共识数据存储、获取方法及装置 | |
CN115858052A (zh) | 一种基于有限状态机的任务执行方法及装置 | |
CN118041775A (zh) | 云资源的处理方法及装置、电子设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40059147 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |