CN109739684B - 基于向量时钟的分布式键值数据库的副本修复方法与装置 - Google Patents
基于向量时钟的分布式键值数据库的副本修复方法与装置 Download PDFInfo
- Publication number
- CN109739684B CN109739684B CN201811384997.XA CN201811384997A CN109739684B CN 109739684 B CN109739684 B CN 109739684B CN 201811384997 A CN201811384997 A CN 201811384997A CN 109739684 B CN109739684 B CN 109739684B
- Authority
- CN
- China
- Prior art keywords
- write operation
- node
- version number
- lost
- vector clock
- 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
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供一种基于向量时钟的分布式键值数据库的副本修复方法与装置,其中所述方法包括:分别为每个节点对应分配一个向量时钟,并设置一个写操作版本变量,向量时钟的各分量表示相应节点作为写操作的协调者节点的写操作,写操作版本变量记录写操作版本号;在每次进行写操作时,更新执行写操作的节点对应的写操作版本号,并基于向量时钟和写操作版本号,记录不同节点间的丢失写操作序列;基于更新的写操作版本号和丢失写操作序列,读取其余副本所在节点写操作的最新数据,以供待修复副本所在节点根据最新数据,修复待修复副本。本发明实施例能够有效降低修复过程的繁琐程度,提高修复效率。
Description
技术领域
本发明实施例涉及计算机数据管理技术领域,更具体地,涉及一种基于向量时钟的分布式键值数据库的副本修复方法与装置。
背景技术
在分布式键值数据库中,为了提高系统的性能以及可用性,将数据以多副本的形式进行存储已成为一种共识。多副本技术是指将一份数据复制多份,并将各数据副本分别存放在分布式计算机存储系统的不同节点上。当某个(或某些)节点宕机时,会导致相应数据副本无法访问。在此情况下,只要有一份数据副本可以正常访问,分布式键值数据库就可以正常使用,以此提高系统的可用性。现在流行的分布式计算机存储系统大多采用了多副本技术,如HDFS,Cassandra,MongoDB,Hbase,Dynamo等。
在分布式键值数据库中,为了满足对读写速率的要求,通常采用弱一致性,即在写操作完成前,不保证数据的所有副本都被更新。此外,由于通讯故障或节点宕机等,会不可避免的造成某些副本的值为旧值。为保证用户读到的数据不过于陈旧,通常采用副本修复机制。
目前,传统的副本修复机制通常基于MerkleTree,这种方法需要逐层计算数据的hash值,在数据量较大的情况下,创建MerkleTree效率过低。当修复某段数据时,各个副本节点计算此段数据的MerkleTree,并发送至协调者节点。协调者节点对MerkleTree进行比较时,需要从根节点开始比较hash值,某一节点的hash值相同时,停止比较。否则,进一步比较孩子节点的hash值,直到找出hash值不同的最小的数据范围。最后将数据的最新版本广播,更新所有旧版本。此过程较为繁琐,耗时长,修复过程慢。
发明内容
为了克服上述问题或者至少部分地解决上述问题,本发明实施例提供一种基于向量时钟的分布式键值数据库的副本修复方法与装置,用以有效降低修复过程的繁琐程度,提高修复效率。
第一方面,本发明实施例提供一种基于向量时钟的分布式键值数据库的副本修复方法,所述分布式键值数据库包括多个节点,所述方法包括:
分别为每个所述节点对应分配一个向量时钟,并设置一个写操作版本变量,所述向量时钟的各分量表示相应节点作为写操作的协调者节点,所述写操作版本变量记录写操作版本号;
在每次进行写操作时,更新执行写操作的节点对应的写操作版本号,并基于所述向量时钟和所述写操作版本号,记录不同节点间的丢失写操作序列;
基于更新的写操作版本号和所述丢失写操作序列,读取其余副本所在节点写操作的最新数据,以供待修复副本所在节点根据所述最新数据,修复所述待修复副本。
第二方面,本发明实施例提供一种基于向量时钟的分布式键值数据库的副本修复装置,所述分布式键值数据库包括多个节点,所述装置包括:
向量时钟分配模块,用于分别为每个所述节点对应分配一个向量时钟,并设置一个写操作版本变量,所述向量时钟的各分量表示相应节点作为写操作的协调者节点的写操作,所述写操作版本变量记录写操作版本号;
写操作记录模块,用于在每次进行写操作时,更新执行写操作的节点对应的写操作版本号,并基于所述向量时钟和所述写操作版本号,记录不同节点间的丢失写操作序列;
修复写入模块,用于基于更新的写操作版本号和所述丢失写操作序列,读取其余副本所在节点写操作的最新数据,以供待修复副本所在节点根据所述最新数据,修复所述待修复副本。
第三方面,本发明实施例提供一种电子设备,包括:至少一个存储器、至少一个处理器、通信接口和总线;所述存储器、所述处理器和所述通信接口通过所述总线完成相互间的通信,所述通信接口用于所述电子设备与分布式键值数据库之间的信息传输;所述存储器中存储有可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现如上第一方面所述的基于向量时钟的分布式键值数据库的副本修复方法。
第四方面,本发明实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如上第一方面所述的基于向量时钟的分布式键值数据库的副本修复方法。
本发明实施例提供的基于向量时钟的分布式键值数据库的副本修复方法与装置,通过为每个节点分配一个向量时钟,写操作传播时附带对应的版本号,当每次接收到远端写入请求时,根据版本号判断此节点距上次写入丢失了哪些写操作,将其记录在丢失队列中。在进行副本修复时,获取针对某段数据的所有丢失队列,并将丢失队列传输至对应节点,对应节点根据丢失队列中的信息获取最新数据域,并将数据传回本节点,本节点将最新数据写入,完成修复,能够有效降低修复过程的繁琐程度,提高修复效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明一实施例提供的基于向量时钟的分布式键值数据库的副本修复方法的流程示意图;
图2为根据本发明实施例提供的基于向量时钟的分布式键值数据库的副本修复方法中分布式键值数据库的一致性哈希环的示意图;
图3为本发明另一实施例提供的基于向量时钟的分布式键值数据库的副本修复方法的流程示意图;
图4为本发明实施例提供的基于向量时钟的分布式键值数据库的副本修复装置的结构示意图;
图5为本发明实施例提供的电子设备的实体结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明实施例的一部分实施例,而不是全部的实施例。基于本发明实施例中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明实施例保护的范围。
分布式键值数据库通常有两种架构,即P2P对等架构和中心架构。对于这两种架构,在访问请求来临时,负责此次写操作的调度管理的称为协调者节点。在分布式键值数据库中,一致性哈希是一种普遍的数据分区策略,数据库中维护一个首尾相连的哈希环,每个节点都会映射到哈希环上的一点,各个节点间为不同的数据段,当写入某个键的数据时,会根据哈希函数确定其哈希值属于哪个数据段,并根据此数据段确定由哪个节点作为协调者节点,在副本数为n的情况下,通常一个节点负责n个数据段的写入,同样,一个数据段由n个节点负责写入。
在分布式键值数据库中,通常包括以下模块:1)写前日志:在写操作执行前会先将日志追加到磁盘中的日志文件,避免每写入一条数据就需要一次数据持久化,同时便于系统崩溃后恢复数据。2)内存缓存区:系统接收到写操作后,会先将数据写入内存中,待内存中数据达到一定规模再写入磁盘,以此提高系统写入速度。3)持久化文件:内存缓冲区的数据每次刷磁盘后,会形成固定格式的持久化文件。
在分布式键值数据库中,作如下定义,将一个key的值写为value,写入时间为time,记作write(key,time)=value,time作为数据版本。读取key的值为value,同时返回数据版本,记做read(key)=(value,time)。读取时只会读取时间戳最新的数据返回,故多次写入同一个key只会保留最新时刻数据。此外,协调者节点执行的写操作为本地写操作,非协调者节点接收到的写操作称为远端写操作。
分布式键值数据库中,不同节点无法保证系统时钟完全相同,相比于时钟准确与否,系统更关心不同操作间的顺序。本发明实施例提出一种基于向量时钟的简单而有效的方案。在一个副本数为n的分布式键值系统中,每个节点的向量时钟由一个n维向量构成,其中维度i对应于节点i的写操作版本,即逻辑时钟。当发送写操作传播时也会传播向量时钟进行版本比对,来判断数据新旧度,从而修复数据库中副本。本发明实施例只对写操作和副本修复操作进行少量修改,不改变系统其它操作处理流程,易于实现。以下将具体通过多个实施例对本发明实施例进行展开说明和介绍。
图1为本发明一实施例提供的基于向量时钟的分布式键值数据库的副本修复方法的流程示意图,包括:
S101,分别为每个节点对应分配一个向量时钟,并设置一个写操作版本变量,向量时钟的各分量表示相应节点作为写操作的协调者节点的写操作,写操作版本变量记录写操作版本号。
可以理解为,如前所述,在分布式键值数据库的一致性哈希环中,对于副本数为n的情形,通常一个节点负责n个数据段的写入,同样,一个数据段由n个节点负责写入。因此根据这个规则,为一致性哈希环的每个节点分别分配一个向量时钟,由各节点来对其对应的向量时钟进行维护。向量时钟的各分量表示相应节点作为写操作的协调者节点时的写操作。同时,会设置一个记录每次写操作的版本号即写操作版本号的写操作版本变量,该变量的取值即是对应写操作的写操作版本号。
例如,如图2所示,为根据本发明实施例提供的基于向量时钟的分布式键值数据库的副本修复方法中分布式键值数据库的一致性哈希环的示意图。图中分布式键值数据库的节点数为6,分别用A~F标记,数据段数为6个,分别用r1~r6标记,系统中各数据均以n=3个数据副本存储,每个节点维护一个向量时钟。对于节点A,其负责的数据段为r6、r5和r4。A节点的向量时钟共有n个维度,记为VC=[VC_A,VC_B,VC_C],向量时钟每一维分量X表示相应节点X(X为A、B或C)作为写操作的协调者节点。
S102,在每次进行写操作时,更新执行写操作的节点对应的写操作版本号,并基于向量时钟和写操作版本号,记录不同节点间的丢失写操作序列。
根据以上描述,写操作版本变量可以记录节点的写操作版本号。对于分布式键值数据库中的任一个节点,利用该节点的写操作版本变量,在每次进行写操作时,会对该写操作版本变量的写操作版本号进行记录更新。在获取该写操作版本号更新的基础上,该写操作相关的副本节点可以根据写操作版本号和自身向量时钟,检测丢失的写操作序列,并进行记录。
S103,基于更新的写操作版本号和丢失写操作序列,读取其余副本所在节点写操作的最新数据,以供待修复副本所在节点根据最新数据,修复待修复副本。
可以理解为,对于同一副本所存储在的各个节点,若其中任一节点接收到副本修复请求需要对该节点内副本进行修复,则该节点即为待修复副本所在节点。如前所述,每个节点在进行写操作时,会对当前写操作版本号和丢失写操作序列进行记录。则,对于待修复副本所在节点,其可以根据接收的修复请求,查询其向量时钟对应的丢失写操作序列,并根据丢失写操作序列找到对所存储副本进行过写操作的协调者节点。协调者节点根据丢失写操作序列和操作版本号,可以读取写操作的最新数据,并形成最新数据域返回给待修复副本所在节点。待修复副本所在节点根据该最新数据域,将最新数据域中的数据写入本节点,完成修复。
本发明实施例提供的基于向量时钟的分布式键值数据库的副本修复方法,通过为每个节点分配一个向量时钟,写操作传播时附带对应的版本号,当每次接收到远端写入请求时,根据版本号判断此节点距上次写入丢失了哪些写操作,将其记录在丢失队列中。在进行副本修复时,获取针对某段数据的丢失队列,并将丢失队列传输至对应节点,对应节点根据丢失队列中的信息获取最新数据域,并将数据传回本节点,本节点将最新数据写入,完成修复,能够有效降低修复过程的繁琐程度,提高修复效率。
其中,根据上述各实施例可选的,若写操作为本地写操作,则更新执行写操作的节点对应的写操作版本号的步骤具体包括:对于执行本地写操作的节点,将该节点的向量时钟的对应分量加1,并赋值给写操作版本号,并基于本地写操作的数据,增加一次本地写操作;将赋值的写操作版本号和写操作,发送至本地写操作的数据的副本所在的其余节点。
根据上述各实施例,为便于理解,记分布式键值数据库的节点数为N,分布式键值数据库的一致性哈希环共有N个数据段,每个数据段由一个节点主负责。系统中数据的副本数为n,每个节点维护一个向量时钟,记为VC。该向量时钟每一维分量VC_X表示相应节点X作为写操作的协调者节点。
则,在分布式键值数据库中的节点N接收到写操作请求时,判断其是否为本地写操作,若是,则节点N负责客户端的写操作write(key,time)=value。将节点N的向量时钟中的VC_N分量加1,并赋给写操作版本号wid,增加一次本地写操作write(wid,time)=key。之后,将wid、N随写操作发送至key的其他副本所在节点。
其中,根据上述各实施例可选的,若写操作为远端写操作,则基于向量时钟和写操作版本号,记录不同节点间的丢失写操作序列的步骤具体包括:对于执行远端写操作的节点,接收的远端写操作附带对应的写操作版本号,在进行远端写操作时,根据写操作版本号,确定该节点距上次写入丢失的写操作,并将丢失的写操作记录在丢失写操作序列中。
根据上述各实施例,本发明实施例为每个节点分配一个向量时钟,向量时钟的各个分量表示某节点的写操作编号,在进行本地写操作时,节点对每次写操作增加一条快速写入操作。该快速写入操作会记录本次写操作对应的版本号,并记录不同节点间的丢失写操作序列,也称为丢失队列。
写操作在不同节点间传播时,附带对应的写操作版本号。当节点每次接收到远端写入请求时,首先根据写操作附带的写操作版本号,判断此节点距上次写入丢失了哪些写操作,并将其记录在丢失队列也即丢失写操作序列中,之后再进行通常的远端写操作。
其中,根据上述各实施例可选的,根据写操作版本号,确定该节点距上次写入丢失的写操作,并将丢失的写操作记录在丢失写操作序列中的步骤具体包括:
假设执行远端写操作的节点为节点N,发送远端写操作的节点为节点M,写操作版本号为wid,则
节点N接收节点M发送的远端写操作、写操作版本号wid,并比较wid与N对应的向量时钟中VC_M分量的大小,若wid>VC_M+1,则将VC_M+1,VC_M+2,…,wid-1添加到M的丢失写操作序列L_M中;根据wid,更新VC_M。
在上述各实施例所做设定的基础上,分布式键值数据库的节点数为N,分布式键值数据库的一致性哈希环共有N个数据段,系统中数据的副本数为n,每个节点维护一个向量时钟,记为VC。对于执行远端写操作的节点M,在协调者节点N执行完本地写操作,并对写操作版本号wid进行更新后,可以获取该远端写操作附带的写操作版本号wid。
之后,节点M根据接收的写操作版本号wid,并基于写操作版本号wid,按照上述记录流程,将节点M相对于节点N丢失的写操作添加到丢失写操作序列L_N中,并更新自身向量时钟中有关节点N的写操作取值。
其中,根据上述各实施例可选的,基于更新的写操作版本号和丢失写操作序列,读取其余副本所在节点写操作的最新数据的步骤具体包括:
对于待修复副本所在节点,对该节点的向量时钟中的每个分量VC_K,判断丢失写操作序列L_K是否为空,若不为空,将L_K发送至节点K;
控制节点K对L_K中的每个写操作版本号进行读操作,获取每个写操作版本号对应的写操作的数据,若判断获知该写操作的数据未被处理,则读取该写操作的数据的值,并添加至最新数据域;
控制节点K将最新数据域发送至待修复副本所在节点,以使待修复副本所在节点将最新数据域的数据写入本节点中,完成待修复副本的修复。
可以理解的是,在基于上述各实施例设定的基础上,在节点N接收到数据修复操作请求时,对其向量时钟VC中的每个分量VC_K,按上述处理流程进行处理,以实现副本修复。具体而言,可以包括:
判断L_K是否为空,如果不为空,将L_K发送至节点K;
节点K接收到丢失队列L_K后,创建处理集合R(初始为空),对丢失队列L_K中的每个wid,read(wid)=key,忽略数据版本,判断key是否属于R,如果key不属于R,读取key的值read(key)=(value,time),将(key,time)=value添加至最新数据域D中,并将key添加至R;
节点K将R清空,并将最新数据域D发送至节点N;
节点N接收到最新数据D后,将D中的每个(key,time)=value写入本节点中,完成本节点副本的修复。
进一步的,在上述各实施例的基础上,在每次进行写操作时,本发明实施例的方法还包括:将每次写操作的版本号及数据对应的key记录在写前日志中;相应的,基于更新的写操作版本号和丢失写操作序列,读取其余副本所在节点写操作的最新数据的步骤具体包括:基于更新的写操作版本号,查询写前日志,获取最新数据。
具体而言,本方法实施例基于向量时钟,在每次写操作本地执行阶段,将本次写操作版本号及数据的key记录在写前日志中。当进行副本修复时,首先获取针对某段数据的所有丢失队列,并将丢失队列传输至对应节点,对应节点根据写前日志中的信息以及丢失队列中的信息获取最新数据,并将该最新数据传回本节点,本节点将最新数据写入,完成修复。
综上而言,本发明实施例提供的基于向量时钟的分布式键值数据库的副本修复方法,其思路是:将每次写操作的版本号及数据的key记录在写前日志中;写操作传播时附带对应的版本号,当每次接收到写入请求时首先判断距上次写入请求丢失了哪些写入操作,将其记录在丢失队列中;当进行副本修复时,首先获取针对某段数据的所有丢失队列,并根据丢失队列读取到最新数据进行更新。
与传统的基于MerkleTree的数据修复方法相比,具有以下优势:
(1)将向量时钟应用在副本修复机制中,可以快速找到某段数据缺失了哪些写操作,从而获得最新数据进行更新,提升了数据修复的效率。且仅在数据正常写入流程中增加了少量用于恢复的数据结构,不影响数据正常写入。同时避免了构建MerkleTree的时间消耗。
(2)不需要用户进行额外配置,可在现有的分布式键值数据库中直接应用,在后台进行快速的数据修复,在不影响用户正常使用的前提下,为用户提供更新的数据。
(3)在用户手动执行数据修复时,可快速完成,避免用户等待时间过长。
(4)具有很强的适用性,既可用在P2P对等架构的分布式键值数据库上,又可以用在中心架构的键值数据库上。
为进一步说明本发明实施例的技术方案,本发明实施例根据上述各实施例提供如下具体实施例的处理流程,但不对本发明实施例的保护范围进行限制。
记分布式键值数据库的节点数为N,一致性哈希环共有N个数据段,系统中数据的副本数为n,每个节点维护一个向量时钟,记为VC。该向量时钟每一维分量VC_X表示相应节点X作为写操作的协调者节点,初始分量都是0。
图3为本发明另一实施例提供的基于向量时钟的分布式键值数据库的副本修复方法的流程示意图,具体包括以下步骤:
(1)节点N接收操作请求,首先判断是否为本地写操作,若是,则执行步骤(2),否则,判断是否为来自其他节点的远程写操作,若是,则执行步骤(3),否则,判断是否为副本修复操作,若是,执行步骤(4),否则进行正常处理流程。
(2)节点N负责客户端的写操作write(key,time)=value。
(2-1)将VC中的VC_N分量加1,并赋给wid,增加一次本地写操作write(wid,time)=key。
(2-2)将wid随写操作发送至key的其他副本所在节点。
(2-3)执行正常本地写操作,返回步骤(1)。
(3)节点N接受到节点M发来的写操作和wid后,比较wid和VC中VC_M分量的大小,如果wid>VC_M+1,则将VC_M+1,VC_M+2,…,wid-1添加到N对于M的丢失列表L_M中,否则,不进行额外处理。
(3-1)将VC_M更新为wid。
(3-2)执行正常远端写操作,返回步骤(1)。
(4)节点N接收到数据修复操作,对VC中的每个分量VC_K。执行以下步骤
(4-1)判断L_K是否为空,如果不为空,将L_K发送至节点K。否则结束此分量的操作。
(4-2)节点K接收到丢失队列L_K后,创建处理集合R,初始为空。对其中的每个wid,read(wid)=key,忽略数据版本,判断key是否属于R,如果key∈R,跳过此wid。否则读取key的值read(key)=(value,time),将(key,time)=value添加至最新数据域D中,并将key添加至R。
(4-3)节点K将R清空,并将最新数据域D发送至节点N。
(4-4)节点N接收到最新数据D后,将D中的每个(key,time)=value写入本节点中。
(4-5)返回步骤(1)。
为更清楚的进行说明,进行具体举例,如图2所示,分布式键值数据库的节点数为6,分别用A~F标记,数据段数为6个,分别用r1~r6标记,系统中各数据均以n=3个数据副本存储。每个节点维护一个向量时钟,对于节点A,其负责的数据段为r6、r5和r4。A节点的向量时钟共有n=3个维度,记为VC=[VC_A,VC_B,VC_C],各维度初始分量都是0。具体修复流程如下:
(1)节点A接收到操作请求,首先判断是否为本地写操作,若是,则执行步骤(2),否则,判断是否为来自其他节点的远程写操作,若是,则执行步骤(3),否则,判断是否为副本修复操作,若是,执行步骤(4);
(2)假设写操作的数据key=k所在数据段为r1,为节点A主负责的数据段,则节点A根据操作请求,执行本地写操作;
(2-1)将VC中的VC_A分量加1,并赋给版本号wid,并增加一次本地写操作write(wid,t)=v;
VC_A的初始值为0,更新后为VC_A=1,赋值后wid=VC_A=1,增加一次本地写操作,write(1,t)=v;
(2-2)节点A根据向量时钟VC,将wid=1发送至数据k的其他副本所在节点F和E;
(2-3)在步骤(2-2)的基础上,执行正常的本地写操作,并返回步骤(1);
(3)节点A根据操作请求,执行远端写操作;
(3-1)节点A接收来自节点B的写操作以及附带的版本号wid=3,比较wid和VC中VC_B=0分量的大小,由于wid=3>0+1=1,将VC_B+1=1、VC_B+2=2添加到A对于B的丢失列表L_B中,L_B={1,2};
(3-2)节点A将VC_B由0更新为wid=3;
(3-3)在步骤(3-2)的基础上,执行正常的远端写操作,并返回步骤(1);
(4)节点A根据操作请求,执行副本数据修复操作;
(4-1)对于VC中的每个分量VC_K,节点A判断节点K的丢失序列L_K是否为空,若不为空,则将L_K发送至节点K;
在步骤(3)远端写操作的基础上,节点A的VC各分量对应的丢失队列只有L_B不为空,将丢失队列L_B={1,2}发送至节点B;
(4-2)节点B接收到A发送的丢失队列L_B={1,2}后,创建处理集合R(初始为空),用于记录已被处理的数据,对丢失队列中的每个wid,read(1)=k1,read(2)=k2,判断key=k1、k2是否属于R,若key∈R,跳过对应的wid,经判断k1、k2均未被处理,read(k1)=(v1,t1),read(k2)=(v2,t2),将(k1,t1)=v1和(k2,t2)=v2添加至最新数据域D中,并将k1和k2添加至R中;
(4-3)节点B清空R,并将D发送回节点A;
(4-4)节点A接受到B发送的D={(k1,t1)=v1,(k2,t2)=v2},在本地执行两次写操作write(k1,t1)=v1,write(k2,t2)=v2;
(4-5)返回步骤(1)。
作为本发明实施例的另一个方面,本发明实施例根据上述各实施例提供一种基于向量时钟的分布式键值数据库的副本修复装置,该装置用于在上述各实施例中实现对基于向量时钟的分布式键值数据库的副本修复。因此,在上述各实施例的基于向量时钟的分布式键值数据库的副本修复方法中的描述和定义,可以用于本发明实施例中各个执行模块的理解,具体可参考上述实施例,此处不在赘述。
根据本发明实施例的一个实施例,基于向量时钟的分布式键值数据库的副本修复装置的结构如图4所示,为本发明实施例提供的基于向量时钟的分布式键值数据库的副本修复装置的结构示意图,该装置可以用于实现上述各方法实施例中基于向量时钟的分布式键值数据库的副本修复,该装置包括:向量时钟分配模块401、写操作记录模块402和修复写入模块403。其中:
向量时钟分配模块401用于分别为每个节点对应分配一个向量时钟,并设置一个写操作版本变量,向量时钟的各分量表示相应节点作为写操作的协调者节点的写操作,写操作版本变量记录写操作版本号;写操作记录模块402用于在每次进行写操作时,更新执行写操作的节点对应的写操作版本号,并基于向量时钟和写操作版本号,记录不同节点间的丢失写操作序列;修复写入模块403用于基于更新的写操作版本号和丢失写操作序列,读取其余副本所在节点写操作的最新数据,以供待修复副本所在节点根据最新数据,修复待修复副本。
具体而言,在分布式键值数据库的一致性哈希环中,对于副本数为n的情形,通常一个节点负责n个数据段的写入,同样,一个数据段由n个节点负责写入。因此根据这个规则,向量时钟分配模块401为一致性哈希环的每个节点分别分配一个向量时钟,由各节点来对其对应的向量时钟进行维护。向量时钟的各分量表示相应节点作为写操作的协调者节点时的写操作。同时,向量时钟分配模块401会设置一个记录每次写操作的版本号即写操作版本号的写操作版本变量,该变量的取值即是对应写操作的写操作版本号。
之后,对于分布式键值数据库中的任一个节点,写操作记录模块402利用该节点的写操作版本变量,在每次进行写操作时,会对该写操作版本变量的写操作版本号进行记录更新。并且,在获取该写操作版本号更新的基础上,写操作记录模块402可以根据被进行写操作的数据段相关的其它节点可以根据对该数据段的写操作版本号和自身向量时钟,检测丢失的写操作序列,并进行记录。
再之后,对于待修复副本所在节点,其可以根据接收的修复请求,修复写入模块403查询其向量时钟对应的丢失写操作序列,并根据丢失写操作序列找到对所存储副本进行过写操作的节点,即其余副本所在节点。根据其余副本所在节点的丢失写操作序列和操作版本号,修复写入模块403可以读取写操作的最新数据,并形成最新数据域返回给待修复副本所在节点。待修复副本所在节点根据该最新数据域,修复写入模块403将最新数据域中的数据写入本节点,完成修复。
本发明实施例提供的基于向量时钟的分布式键值数据库的副本修复装置,通过设置相应的执行模块,为每个节点分配一个向量时钟,写操作传播时附带对应的版本号,当每次接收到远端写入请求时,根据版本号判断此节点距上次写入丢失了哪些写操作,将其记录在丢失队列中。在进行副本修复时,获取针对某段数据的所有丢失队列,并将丢失队列传输至对应节点,对应节点根据丢失队列中的信息获取最新数据域,并将数据传回本节点,本节点将最新数据写入,完成修复,能够有效降低修复过程的繁琐程度,提高修复效率。
可以理解的是,本发明实施例中可以通过硬件处理器(hardware processor)来实现上述各实施例的装置中的各相关程序模块。并且,本发明实施例的基于向量时钟的分布式键值数据库的副本修复装置利用上述各程序模块,能够实现上述各方法实施例的基于向量时钟的分布式键值数据库的副本修复流程,在用于实现上述各方法实施例中基于向量时钟的分布式键值数据库的副本修复时,本发明实施例的装置产生的有益效果与对应的上述各方法实施例相同,可以参考上述各方法实施例,此处不再赘述。
作为本发明实施例的又一个方面,本实施例根据上述各实施例提供一种电子设备,参考图5,为本发明实施例提供的电子设备的实体结构示意图,包括:至少一个存储器501、至少一个处理器502、通信接口503和总线504。
其中,存储器501、处理器502和通信接口503通过总线504完成相互间的通信,通信接口503用于该电子设备与分布式键值数据库之间的信息传输;存储器501中存储有可在处理器502上运行的计算机程序,处理器502执行该计算机程序时,实现如上述各实施例所述的基于向量时钟的分布式键值数据库的副本修复方法。
可以理解为,该电子设备中至少包含存储器501、处理器502、通信接口503和总线504,且存储器501、处理器502和通信接口503通过总线504形成相互间的通信连接,并可完成相互间的通信,如处理器502从存储器501中读取基于向量时钟的分布式键值数据库的副本修复方法的程序指令等。另外,通信接口503还可以实现该电子设备与分布式键值数据库之间的通信连接,并可完成相互间信息传输,如通过通信接口503实现对基于向量时钟的分布式键值数据库的副本修复等。
电子设备运行时,处理器502调用存储器501中的程序指令,以执行上述各方法实施例所提供的方法,例如包括:分别为每个节点对应分配一个向量时钟,并设置一个写操作版本变量,向量时钟的各分量表示相应节点作为写操作的协调者节点的写操作,写操作版本变量记录写操作版本号;在每次进行写操作时,更新执行写操作的节点对应的写操作版本号,并基于向量时钟和写操作版本号,记录不同节点间的丢失写操作序列;基于更新的写操作版本号和丢失写操作序列,读取其余副本所在节点写操作的最新数据,以供待修复副本所在节点根据最新数据,修复待修复副本等。
上述的存储器501中的程序指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。或者,实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本发明实施例还根据上述各实施例提供一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质存储计算机指令,该计算机指令使计算机执行如上述各实施例所述的基于向量时钟的分布式键值数据库的副本修复方法,例如包括:分别为每个节点对应分配一个向量时钟,并设置一个写操作版本变量,向量时钟的各分量表示相应节点作为写操作的协调者节点的写操作,写操作版本变量记录写操作版本号;在每次进行写操作时,更新执行写操作的节点对应的写操作版本号,并基于向量时钟和写操作版本号,记录不同节点间的丢失写操作序列;基于更新的写操作版本号和丢失写操作序列,读取其余副本所在节点写操作的最新数据,以供待修复副本所在节点根据最新数据,修复待修复副本等。
本发明实施例提供的电子设备和非暂态计算机可读存储介质,通过执行上述各实施例所述的基于向量时钟的分布式键值数据库的副本修复方法,为每个节点分配一个向量时钟,写操作传播时附带对应的版本号,当每次接收到远端写入请求时,根据版本号判断此节点距上次写入丢失了哪些写操作,将其记录在丢失队列中。在进行副本修复时,获取针对某段数据的所有丢失队列,并将丢失队列传输至对应节点,对应节点根据丢失队列中的信息获取最新数据域,并将数据传回本节点,本节点将最新数据写入,完成修复,能够有效降低修复过程的繁琐程度,提高修复效率。
可以理解的是,以上所描述的装置、电子设备及存储介质的实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,既可以位于一个地方,或者也可以分布到不同网络单元上。可以根据实际需要选择其中的部分或全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上实施方式的描述,本领域的技术人员可以清楚地了解,各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如U盘、移动硬盘、ROM、RAM、磁碟或者光盘等,包括若干指令,用以使得一台计算机设备(如个人计算机,服务器,或者网络设备等)执行上述各方法实施例或者方法实施例的某些部分所述的方法。
另外,本领域内的技术人员应当理解的是,在本发明实施例的申请文件中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本发明实施例的说明书中,说明了大量具体细节。然而应当理解的是,本发明实施例的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。类似地,应当理解,为了精简本发明实施例公开并帮助理解各个发明方面中的一个或多个,在上面对本发明实施例的示例性实施例的描述中,本发明实施例的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。
然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明实施例要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明实施例的单独实施例。
最后应说明的是:以上实施例仅用以说明本发明实施例的技术方案,而非对其限制;尽管参照前述实施例对本发明实施例进行了详细的说明,本领域的技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明实施例各实施例技术方案的精神和范围。
Claims (9)
1.一种基于向量时钟的分布式键值数据库的副本修复方法,所述分布式键值数据库包括多个节点,其特征在于,所述方法包括:
分别为每个所述节点对应分配一个向量时钟,并设置一个写操作版本变量,所述向量时钟的各分量表示相应节点作为写操作的协调者节点,所述写操作版本变量记录写操作版本号;
在每次进行写操作时,更新执行写操作的节点对应的写操作版本号,并基于所述向量时钟和所述写操作版本号,记录不同节点间的丢失写操作序列;
基于更新的写操作版本号和所述丢失写操作序列,读取其余副本所在节点写操作的最新数据,以供待修复副本所在节点根据所述最新数据,修复所述待修复副本;
其中,所述基于更新的写操作版本号和所述丢失写操作序列,读取其余副本所在节点写操作的最新数据的步骤具体包括:
控制所述待修复副本所在节点根据接收的修复请求,查询该节点的向量时钟对应的丢失写操作序列,并基于所述丢失写操作序列获取对副本进行过写操作的协调者节点,以供所述协调者节点根据所述丢失写操作序列和所述更新的写操作版本号读取所述最新数据,并形成最新数据域反馈给所述待修复副本所在节点。
2.根据权利要求1所述的方法,其特征在于,若所述写操作为本地写操作,则所述更新执行写操作的节点对应的写操作版本号的步骤具体包括:
对于执行所述本地写操作的节点,将该节点的向量时钟的对应分量加1,并赋值给所述写操作版本号,并基于所述本地写操作的数据,增加一次本地写操作;
将赋值的写操作版本号发送至所述本地写操作的数据的副本所在的其余节点。
3.根据权利要求1所述的方法,其特征在于,若所述写操作为远端写操作,则所述基于所述向量时钟和所述写操作版本号,记录不同节点间的丢失写操作序列的步骤具体包括:
对于执行所述远端写操作的节点,接收的所述远端写操作附带对应的写操作版本号,在进行远端写操作时,根据所述写操作版本号,确定该节点距上次写入丢失的写操作,并将丢失的写操作记录在所述丢失写操作序列中。
4.根据权利要求3所述的方法,其特征在于,所述根据所述写操作版本号,确定该节点距上次写入丢失的写操作,并将丢失的写操作记录在所述丢失写操作序列中的步骤具体包括:
假设执行所述远端写操作的节点为节点N,发送所述远端写操作的节点为节点M,所述写操作版本号为wid,则
节点N接收节点M发送的所述远端写操作、所述写操作版本号wid,并比较wid与N对应的向量时钟中VC_M分量的大小,若wid>VC_M+1,则将VC_M+1,VC_M+2,…,wid-1添加到N对于M的丢失写操作序列L_M中;
根据wid,更新VC_M。
5.根据权利要求4所述的方法,其特征在于,所述基于更新的写操作版本号和所述丢失写操作序列,读取其余副本所在节点写操作的最新数据的步骤具体包括:
对于所述待修复副本所在节点,对该节点的向量时钟中的每个分量VC_K,判断丢失写操作序列L_K是否为空,若不为空,将L_K发送至节点K;
控制节点K对L_K中的每个写操作版本号进行读操作,获取每个写操作版本号对应的写操作的数据,若判断获知该写操作的数据未被处理,则读取该写操作的数据的值,并添加至最新数据域;
控制节点K将所述最新数据域发送至所述待修复副本所在节点,以使所述待修复副本所在节点将所述最新数据域的数据写入本节点中,完成所述待修复副本的修复。
6.根据权利要求2所述的方法,其特征在于,在每次进行写操作时,还包括:将每次写操作的版本号及数据的key记录在写前日志中;
相应的,所述基于更新的写操作版本号和所述丢失写操作序列,读取其余副本所在节点写操作的最新数据的步骤具体包括:基于所述更新的写操作版本号,查询所述写前日志,获取所述最新数据。
7.一种基于向量时钟的分布式键值数据库的副本修复装置,所述分布式键值数据库包括多个节点,其特征在于,所述装置包括:
向量时钟分配模块,用于分别为每个所述节点对应分配一向量时钟,并设置一个写操作版本变量,所述向量时钟的各分量表示相应节点作为写操作的协调者节点,所述写操作版本变量记录写操作版本号;
写操作记录模块,用于在每次进行写操作时,更新执行写操作的节点对应的写操作版本号,并基于所述向量时钟和所述写操作版本号,记录不同节点间的丢失写操作序列;
修复写入模块,用于基于更新的写操作版本号和所述丢失写操作序列,读取其余副本所在节点写操作的最新数据,以供待修复副本所在节点根据所述最新数据,修复所述待修复副本;
其中,所述修复写入模块具体用于:
控制所述待修复副本所在节点根据接收的修复请求,查询该节点的向量时钟对应的丢失写操作序列,并基于所述丢失写操作序列获取对副本进行过写操作的协调者节点,以供所述协调者节点根据所述丢失写操作序列和所述更新的写操作版本号读取所述最新数据,并形成最新数据域反馈给所述待修复副本所在节点。
8.一种电子设备,其特征在于,包括:至少一个存储器、至少一个处理器、通信接口和总线;
所述存储器、所述处理器和所述通信接口通过所述总线完成相互间的通信,所述通信接口还用于所述电子设备与分布式键值数据库之间的信息传输;
所述存储器中存储有可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现如权利要求1至6中任一所述的方法。
9.一种非暂态计算机可读存储介质,其特征在于,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如权利要求1至6中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811384997.XA CN109739684B (zh) | 2018-11-20 | 2018-11-20 | 基于向量时钟的分布式键值数据库的副本修复方法与装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811384997.XA CN109739684B (zh) | 2018-11-20 | 2018-11-20 | 基于向量时钟的分布式键值数据库的副本修复方法与装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109739684A CN109739684A (zh) | 2019-05-10 |
CN109739684B true CN109739684B (zh) | 2020-03-13 |
Family
ID=66356966
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811384997.XA Active CN109739684B (zh) | 2018-11-20 | 2018-11-20 | 基于向量时钟的分布式键值数据库的副本修复方法与装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109739684B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112199427A (zh) * | 2020-09-24 | 2021-01-08 | 中国建设银行股份有限公司 | 一种数据处理方法和系统 |
CN112182005A (zh) * | 2020-10-10 | 2021-01-05 | 中国银联股份有限公司 | 一种流水号生成方法及装置 |
CN113722052B (zh) * | 2021-08-23 | 2024-02-20 | 华中科技大学 | 一种基于数据双版本的非易失内存更新方法 |
CN116627775B (zh) * | 2023-07-24 | 2023-09-29 | 北京大学 | 有状态的服务器无感知函数的写优化方法和装置 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103294675B (zh) * | 2012-02-23 | 2018-08-03 | 上海盛大网络发展有限公司 | 一种分布式存储系统中的数据更新方法及装置 |
CN102693312B (zh) * | 2012-05-28 | 2014-05-28 | 清华大学 | 一种键值库数据存储中柔性事务管理方法 |
CN103220336B (zh) * | 2013-03-21 | 2016-01-27 | 中国科学院计算技术研究所 | 一种文件同步中向量时钟的实现方法及系统 |
CN103268318B (zh) * | 2013-04-16 | 2016-04-13 | 华中科技大学 | 一种强一致性的分布式键值数据库系统及其读写方法 |
CN104281506B (zh) * | 2014-07-10 | 2017-02-15 | 中国科学院计算技术研究所 | 一种文件系统的数据维护方法及系统 |
CN107291710B (zh) * | 2016-03-30 | 2020-07-03 | 杭州海康威视数字技术股份有限公司 | 一种用于分布式数据库系统的更新数据的方法及装置 |
-
2018
- 2018-11-20 CN CN201811384997.XA patent/CN109739684B/zh active Active
Non-Patent Citations (2)
Title |
---|
Cassandra的数据一致性分析与优化;马凯君;《中国优秀硕士学位论文全文数据库 信息科技辑》;20180215(第02期);I138-1246 * |
分布式系统中一些主要的副本更新策略;bonelee;《https://www.cnblogs.com/bonelee/p/6247776.html》;20170104;第1-2页 * |
Also Published As
Publication number | Publication date |
---|---|
CN109739684A (zh) | 2019-05-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109739684B (zh) | 基于向量时钟的分布式键值数据库的副本修复方法与装置 | |
US10896102B2 (en) | Implementing secure communication in a distributed computing system | |
US20200012568A1 (en) | Scalable log-based continuous data protection for distributed databases | |
US10853182B1 (en) | Scalable log-based secondary indexes for non-relational databases | |
US20190213085A1 (en) | Implementing Fault Domain And Latency Requirements In A Virtualized Distributed Storage System | |
US20190220266A1 (en) | Upgrading Bundled Applications In A Distributed Computing System | |
US11099937B2 (en) | Implementing clone snapshots in a distributed storage system | |
US11442961B2 (en) | Active transaction list synchronization method and apparatus | |
US9952783B2 (en) | Data processing method and apparatus, and shared storage device | |
WO2015110062A1 (zh) | 一种分布式数据存储方法、装置和系统 | |
US9952940B2 (en) | Method of operating a shared nothing cluster system | |
JP6492123B2 (ja) | 分散キャッシングおよびキャッシュ分析 | |
CN106326239A (zh) | 分布式文件系统及其文件元信息管理方法 | |
CN115599747B (zh) | 一种分布式存储系统的元数据同步方法、系统及设备 | |
US20120297010A1 (en) | Distributed Caching and Cache Analysis | |
WO2023197404A1 (zh) | 一种基于分布式数据库的对象存储方法及装置 | |
CN107153680B (zh) | 一种分布式内存数据库在线扩展节点的方法及系统 | |
US10732840B2 (en) | Efficient space accounting mechanisms for tracking unshared pages between a snapshot volume and its parent volume | |
WO2012042724A1 (en) | Systems and methods for managing a virtual tape library domain | |
CN107493309B (zh) | 一种分布式系统中的文件写入方法及装置 | |
US8886914B2 (en) | Multiplex restore using next relative addressing | |
CN116540938A (zh) | 数据读取方法、装置、分布式存储系统、设备和存储介质 | |
GB2585543A (en) | Data migration in a hierarchical storage management system | |
CN109376001A (zh) | 一种资源分配的方法及设备 | |
CN103780426A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |