一种纠删码更新方法及装置,电子设备与流程

文档序号:12489794阅读:240来源:国知局
一种纠删码更新方法及装置,电子设备与流程

本申请涉及计算机技术领域,特别是涉及一种纠删码更新方法及装置,电子设备。



背景技术:

纠删码(EC,Erasure Coding)是一种用于数据修复的编码技术。原始数据通常被切分为L字节大小的数据块,L为固定值;并使用m个原始数据块通过编码计算得到k个L字节大小校验数据块,一并存储,称为一个EC组。若m+k个数据块当中有任意k个数据块损坏或丢失,系统都可以通过解码计算恢复全部原始数据。校验数据块是通过编码系数矩阵对原始数据块进行编码得到的原始数据中某一块的一个字节的数据发生变化,关联的k个校验数据块中的相应数据也将发生变化。

现有技术中,当原始数据中某一字节的数据发生变化后,对存储的EC组中的数据的更新过程是:待更新的原始数据块所在服务器从本地磁盘读取更新前的原始数据,并根据待写入的原始数据计算出该原始数据块相关的所有k个校验数据块需要的增量更新校验数据块;然后,所述服务器将所述待写入的原始数据写入本地磁盘,再将k个增量更新校验数据块通过网络并行发送至k个存储校验数据的服务器上;每个存储校验数据的服务器从本地磁盘读取原始的校验数据,并利用接收到的增量更新数据计算出新的校验数据块,写到本地磁盘上;最后反馈更新完毕的信号。

现有方案在实施部分写操作的时候,对于原始数据块和校验数据块,都需要读取被更新区域的数据,然后再执行写操作,并且,这些读操作与将要执行的写操作均针对同一位置,在现有的存储设备(例如最常见的7200转速的机械硬盘)上执行上述读、写操作,严重降低了存储设备的访问性能。

可见,现有技术在部分更新原始数据时,至少存在由于连续读、写存储设备,导致的存储设备的访问性能低下的问题。



技术实现要素:

本申请提供一种纠删码更新方法,解决现有技术中在部分更新纠删码中的原始数据时,存在的由于连续读、写存储设备,导致存储设备的访问性能低下的问题。

第一方面,本申请实施例提供了一种纠删码更新方法,包括:

根据更新纠删码中原始数据的请求,更新原始数据变化日志;

更新所述原始数据;

当满足预设条件时,根据更新后的所述原始数据变化日志,更新所述纠删码中的校验数据;

其中,所述原始数据的变化日志包括:与待更新的校验数据对应的原始数据,最近更新的原始数据。

第二方面,本申请实施例还提供了一种纠删码更新装置,包括:

日志更新模块,用于根据更新纠删码中原始数据的请求,更新原始数据变化日志;

原始数据更新模块,用于更新所述原始数据;

校验数据更新模块,用于当满足预设条件时,根据所述日志更新模块更新后的所述原始数据变化日志,更新所述纠删码中的校验数据;

其中,所述原始数据的变化日志包括:与待更新的校验数据对应的原始数据,最近更新的原始数据。

第三方面,本申请实施例还提供了一种电子设备,包括存储器、处理器及存储在所述存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现本申请实施例中所述的纠删码更新方法。

第四方面,本申请实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本申请实施例中所述方法的步骤。

本申请实施例公开的纠删码更新方法,通过根据更新纠删码中原始数据的请求,更新所述原始数据变化日志,然后更新所述原始数据;最后当满足预设条件时,根据更新后的所述原始数据的变化日志,更新纠删码中的校验数据,解决了现有技术中在部分更新纠删码中的原始数据时,由于连续读、写存储设备,导致存储设备的访问性能低下的问题。通过分别更新原始数据和校验数据,并且统一更新校验数据,有效地减少了校验码更新时读写存储设备的次数,提高了纠删码的更新效率。

附图说明

为了更清楚地说明本申请实施例的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1是本申请一个实施例的纠删码更新方法流程图;

图2是本申请另一实施例的纠删码更新方法流程图;

图3是本申请一个实施例的纠删码更新装置结构示意图;

图4是本申请另一实施例的纠删码更新装置结构示意图;

图5是本申请实施例的纠删码更新装置具体结构示意图之一;

图6是本申请实施例的纠删码更新装置一个模块的结构示意图;

图7是本申请实施例的纠删码更新装置一个模块的另一结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

实施例一

本申请公开的一种纠删码更新方法,如图1所示,该方法包括:步骤100至步骤120。

步骤100,根据更新纠删码中原始数据的请求,更新原始数据变化日志。

具体实施时,原始数据和校验数据分块分别存储在不同的服务器中,本申请的实施例中,为了区别描述,将存储原始数据块的服务器称为第一服务器,将存储校验数据块的服务器称为第二服务器。原始数据变化日志存储在第二服务器上,用于记录纠删码中每一个原始数据块的数据变化历史。纠删码中每一个原始数据块发生写入数据的操作后,纠删码中的所有校验数据块上的变化日志都要相应更新。具体实施时,每一个第二服务器上存储一个原始数据变化日志,用于记录所有原始数据块的数据变化历史。所述原始数据变化日志包括多条写入记录,每一条写入记录对应一个原始数据块的一个子数据块的写入历史。具体实施时,所述子数据块的大小等于最小写入单元的大小,如512字节。不同存储设备的最小写入单元的大小可能不同,本申请对此不作限定。

其中,所述更新纠删码中原始数据的请求包括用于更新的原始数据。所述原始数据的变化日志至少包括:与待更新的校验数据对应的原始数据,最近更新的原始数据。更新纠删码中原始数据的请求通常包括:命令字、用于更新的原始数据、原始数据块标识、子数据块标识。当客户端有数据更新时,客户端在确定待写入数据对应的纠删码中原始数据的原始数据块标识以及存储该原始数据块的第一服务器后,向存储所述待写入数据对应的原始数据块的第一服务器发送写入请求,同时,将所述用于更新的原始数据(即待写入数据)发送至所述第一服务器。所述第一服务器收到写入请求和所述用于更新的原始数据后,向存储所述用于更新的原始数据对应的校验数据块的第二服务器发送更新原始数据变化日志的请求,同时将所述用于更新的原始数据发送至所述第二服务器。所述第二服务器将接收到的所述用于更新的原始数据追加至相应的原始数据变化日志末尾,以更新该原始数据块变化日志。具体实施时,若所述原始数据为更新对应的校验数据后首次更新,则需要创建一条写入记录,并读取该用于更新的原始数据对应的原始数据(即所述原始数据块标识中所述子数据块标识指定的子数据块中的原始数据),将读取的所述原始数据和用于更新的原始数据依次写入新创建的写入记录中。在完成原始数据变化日志更新之后,第一服务器将更新本地存储的原始数据。

所述原始数据变化日志中包括执行过数据更新的原始数据块的与待更新的校验数据对应的原始数据和按照更新时间顺序记录的更新数据。具体实施时,为了提高数据更新效率,原始数据变化日志中包括的与待更新的校验数据对应的原始数据(即生成待更新的校验数据的原始数据)和按照更新时间顺序记录的更新数据,原始数据变化日志以子数据块为单位进行记录。

步骤110,更新所述原始数据。

当所述原始数据变化日志更新成功后,所述存储原始数据的服务器利用接收到的所述用于更新的原始数据更新当前存储的原始数据块中的相应数据。

具体实施时,如果原始数据变化日志更新失败或者原始数据更新失败,会返回客户端数据写入失败,以便客户端进行重新写入。

步骤120,当满足预设条件时,根据更新后所述原始数据变化日志,更新纠删码中的校验数据。

为了提高数据的更新效率,本申请在更新原始数据块时不同时更新校验数据块,而是在满足预设条件时再更新校验数据块。例如:当原始数据变化日志的长度已经超过预设长度,或者,服务器的系统时间达到了预设时间(如:凌晨),或者,服务器进入维护状态时,或者,出现了原始数据存储异常等情况。具体实施时,根据原始数据变化日志中记录的每个原始数据块的原始数据,以及变化日志中记录的该原始数据块对应的最近更新数据,通过预设公式,计算该原始数据块中的数据对应的每个校验数据块中的数据的值,得到每个校验数据块中所有字节的最终数据。最后,更新每个第二服务器上存储的校验数据块。

本申请实施例公开的纠删码更新方法,通过根据更新纠删码中原始数据的请求,更新所述原始数据变化日志,然后更新所述原始数据;最后当满足预设条件时,根据更新后的所述原始数据的变化日志,更新纠删码中的校验数据,解决了现有技术中在部分更新纠删码中的原始数据时,由于连续读、写存储设备,导致存储设备的访问性能低下的问题。通过分别更新原始数据和校验数据,并且统一更新校验数据,有效地减少了校验码更新时读写存储设备的次数,提高了纠删码的更新效率。

实施例二

本申请公开的一种纠删码更新方法,如图2所示,该方法包括:步骤200至步骤250。

步骤200,获取更新纠删码中原始数据的请求。

具体实施时,原始数据和校验数据分块分别存储在不同的服务器中,本实例中,仍将存储原始数据块的服务器称为第一服务器,将存储校验数据块的服务器称为第二服务器。原始数据变化日志存储在第二服务器上,用于记录纠删码中每一个原始数据块的数据变化历史。具体实施时,每一个第二服务器上存储一组纠删码对应的原始数据变化日志。所述原始数据变化日志包括多条写入记录,每一条写入记录对应原始数据的一个子数据块的写入历史。所述子数据块根据写入存储设备时的最小写入单元确定。

本实施例中,以原始数据变化日志中包括执行过数据更新的原始数据块的与待更新的校验数据对应的原始数据和按照更新时间顺序记录的更新数据为例说明纠删码的更新方案,其中,数据以子数据块为单位进行记录。例如原始数据变化日志中包括多条写入记录,每条写入记录的格式为:原始数据块标识、子数据块标识、子数据块与待更新的校验数据对应的原始数据、子数据块第一次更新后的数据、子数据块第二次更新后的数据……。

更新纠删码中原始数据的请求通常包括:命令字、用于更新的原始数据、原始数据块标识、子数据块标识。

当客户端有数据更新时,客户端在确定用于更新的原始数据对应的纠删码中原始数据的原始数据块标识、子数据块标识以及存储该原始数据块的第一服务器后,向所述第一服务器发送写入请求,同时,将所述用于更新的原始数据发送至所述第一服务器。然后,所述第一服务器收到写入请求和所述用于更新的原始数据后,向所有第二服务器发送更新原始数据变化日志的请求,同时将所述用于更新的原始数据、原始数据块标识、子数据块标识发送至所述第二服务器。每个所述第二服务器将接收到的所述用于更新的原始数据追加至相应的原始数据变化日志末尾,以更新该原始数据块变化日志。

具体实施时,根据获取的更新纠删码中原始数据的请求,可以确定需要更新部分原始数据,还是需要更新全部原始数据及全部校验数据。步骤210,判断预设的原始数据变化日志中是否存在所述请求指定的子数据块的写入记录,若存在,执行步骤230,否则,执行步骤220。

具体实施时,首先会初始化一个原始数据变化日志,用于记录各原始数据块的更新过程。

所述更新纠删码中原始数据的请求包括更新的子数据块的标识。获取到更新纠删码中原始数据的请求之后,准备更新原始数据变化日志。根据更新纠删码中原始数据的请求,更新原始数据变化日志包括:如果预设的原始数据变化日志中存在所述请求指定的子数据块的写入记录,则在所述原始数据变化日志末尾追加所述子数据块的第一种写入记录,其中,所述第一种写入记录至少包含所述用于更新的原始数据;如果预设的原始数据变化日志中不存在所述请求指定的子数据块的写入记录,则在所述原始数据变化日志末尾追加所述子数据块的第二种写入记录,其中,所述第二种写入记录至少包含与待更新的校验数据对应所述子数据块的原始数据和所述用于更新的原始数据。

具体实施时,首先判断预设的原始数据变化日志中是否存在所述请求指定的子数据块的写入记录。原始数据变化日志中,每条写入记录包括:原始数据块标识、子数据块标识,因此,通过搜索原始数据块标识和子数据块标识可以确定原始数据变化日志中是否存在请求写入的原始数据块中所述子数据块标识对应的数据块的写入记录。

具体实施时,为了快速确定某一子数据块是否存在写入记录,可以创建一个位图来维护子数据块的写入记录,位图中的每一位的数值代表一个子数据块是否存在写入记录。例如,按照位图中像素点由左到右、从上到下的顺序建立位图中的像素点与子数据块的对应关系,第一个像素点的值为0时,表示第一个子数据块没有写入记录,第二个像素点的值为1时,表示第二个子数据块有写入记录。

具体实施时,还可以通过二叉树来管理原始数据变化日志。原始数据变化日志的具体存储方式和数据格式还可以采用现有技术中的其他方法,本申请不再赘述。

步骤220,在所述原始数据变化日志末尾追加所述子数据块的第二种写入记录,其中,所述第二种写入记录至少包含与待更新的校验数据对应的所述子数据块的原始数据和用于更新的原始数据。

当不存在原始数据变化日志,即所述原始数据块没有被部分更新后,或者,最近一次更新为纠删码整体更新时,需要重新创建原始数据变化日志。

以请求中包括的原始数据块标识为i,子数据块标识为i’为例,当预先创建的原始数据变化日志中不存在所述请求指定的子数据块的写入记录,即所述原始数据块i的子数据块i’未被更新过或最近一次为纠删码整体更新时,创建一条所述原始数据块i的子数据块i’的写入记录。创建所述原始数据块i的子数据块i’的写入记录时,首先,第二服务器向第一服务器返回预设命令字;所述第一服务器接收到所述预设命令字之后,发送所述原始数据块i的子数据块i’的与待更新的校验数据对应的原始数据d0(即所述第一服务器中存储的原始数据块i的子数据块i’的数据)至所述第二服务器;所述第二服务器在所述原始数据变化日志末尾增加一条写入记录,所述写入记录包括:所述原始数据块标识i、子数据块标识i’,以及依次排列的所述原始数据块i的子数据块i’的与待更新的校验数据对应的原始数据d0和所述用于更新的原始数据d1。其中,所述用于更新的原始数据d1由所述更新纠删码中原始数据的请求携带。

步骤230,在所述原始数据变化日志末尾追加所述子数据块的第一种写入记录,其中,所述第一种写入记录至少包含所述更新的原始数据。

以请求中包括的原始数据块标识为i,子数据块标识为i’为例,当预先创建的原始数据变化日志中存在所述请求指定的子数据块的写入记录,即所述原始数据块i的子数据块i’被更新过时,则在所述原始数据变化日志末尾追加一条子数据块i’的写入记录。具体实施时,在所述原始数据变化日志末尾追加所述原始数据块i的子数据块i’的写入记录,其中,写入记录至少包括:所述原始数据块标识i、子数据块标识i’和更新的原始数据,即所述用于更新的原始数据d1。其中,所述用于更新的原始数据d1由所述更新纠删码中原始数据的请求携带。

步骤240,判断是否满足预设条件,若满足,则执行步骤250,否则,跳转至步骤200。

所述预设条件至少包括以下任意一项:所述原始数据的变化日志达到预设长度、达到预设更新时间、出现原始数据错误。例如,当所述原始数据变化日志达到预设长度,如500M,或者存储变化日志的系统磁盘空间小于预设值时,根据所述变化日志对校验数据进行更新。再例如,当达到预设更新时间,如凌晨等服务器空闲时间,根据所述变化日志对校验数据进行更新。通过在满足预设条件再对校验数据进行更新,可以减少存储设备的写入次数。提高客户端写入数据的效率。

当不满足预设条件时,继续根据客户端更新纠删码中原始数据的请求更新原始数据变化日志。

步骤250,根据更新后的所述原始数据变化日志,更新纠删码中的校验数据。

所述根据更新后的所述原始数据变化日志,更新所述纠删码中的校验数据,包括:获取更新后所述原始数据变化日志中与待更新的校验数据对应的原始数据和最近更新的原始数据,以及待更新的所述纠删码中的校验数据;根据预设第一编码公式计算待写入校验数据;以所述待写入校验数据更新所述待更新的所述纠删码中的校验数据;其中,所述预设第一编码公式基于预设编码系数矩阵、所述原始数据块最近更新的原始数据和与待更新的校验数据对应的原始数据生成。

现有技术中,计算原始数据的校验数据时,根据m和k以及其他考量因素,生成编码系数矩阵A=[aij]m×k,其中,m为纠删码中原始数据块的数量,k为纠删码中校验数据块的数量,其中,0<i≤m,0<j≤k。根据公式:

(p1j p2j … pkj)T<==A·(d1j d2j … dmj)T; (公式1)

计算原始数据块中数据的校验数据,其中j=1至L,L为原始数据块和校验数据块的字节数;d1j d2j … dmj表示纠删码中原始数据块1至m的第j个字节的数据;p1j p2j … pkj表示纠删码中校验数据块1至k的第j个字节的数据。将编码运算过程(p1j p2j … pkj)T<==A·(d1j d2j … dmj)T(j=1..L)展开可得:

p1j=(a11 a12 .. a1m)·(d1j d2j … dmj)=∑a1i·dij(i=1..m);

p2j=∑a2i·dij(i=1..m);

pkj=∑aki·dij(i=1..m)。

若写入操作将(d1j d2j … dmj)中的第i个原始数据块的第j个字节的数据dij更新为dij’,那么相应的,各校验数据块中第j个字节的数据更新为:

p1j’=(a11 a12 … a1m)·(d1j d2j … dij’ … dmj)=∑a1i·dij–a1i·dij+a1i·dij’=p1j–a1i·Δdij

p2j’=p2j–a2i·Δdij

pkj’=pkj–aki·Δdij;即Δpxj=axi·Δdij,x=1..k。

将等式Δp=a·Δd应用到多次写入操作,可以得到Δp1=a·Δd1,Δp2=a·Δd2,Δp3=a·Δd3,…,Δpn=a·Δdn(n为写入次数),所以P的最新值P’为:

P’=P+Δp1+Δp2+…+Δpn=P+a·(d1-d0)+a·(d2-d1)+…+a·(dn-dn-1)

=P+a·(dn-d0)。

因此,所述第一预设编码公式可以为:P’=P+a·(dn-d0),其中,P’为待写入校验数据,其中,P为所述与待更新所述纠删码中的校验数据,a为预设编码系数矩阵,dn为最近更新的原始数据,d0为与待更新的校验数据P对应的原始数据。

具体实施时,可以遍历所述原始数据变化日志,根据写入记录中记载的原始数据块标识和子数据块标识,确定每个原始数据块的更新前的原始数据,以及最近一次更新的原始数据。在确定每个原始数据块的更新前的原始数据时,可以将具有相同原始数据块标识的写入记录中的更新前的原始数据,按照子数据块标识对应的位置组合成该原始数据块的更新前的原始数据d0。按照同样的方法,将具有相同原始数据块标识的写入记录中的最近更新的原始数据,按照子数据块标识对应的位置组合成该原始数据块的最近更新的原始数据dn。最后,读取每个当前第二服务器上校验数据块的数据P,根据公式P’=P+a·(dn-d0)计算出待写入校验数据P’,并将P’写入第二服务器,已更新P。

具体实施时,纠删码中的多个原始数据块可能只有部分原始数据块进行了更新,进行更新的原始数据块中,更新的也可能只是其中的部分子数据块,为了提高数据的更新效率,结合存储设备的写入原理,优选的,本申请的实施例中,以纠删码中原始数据块中子数据块为单位进行纠删码中校验数据更新。所述根据更新后的所述原始数据变化日志,更新所述纠删码中的校验数据的步骤,包括:遍历所述原始数据变化日志,确定每个原始数据块中存在有效写入记录的子数据块;分别根据更新后的所述原始数据变化日志对所述子数据块的校验数据进行更新,所述子数据块为存储在一个最小写入单元内的原始数据。其中,所述根据更新后的所述原始数据变化日志对所述子数据块的校验数据进行更新包括:获取所述原始数据变化日志中所述子数据块与待更新的校验数据对应的原始数据,以及,所述子数据块最近更新的原始数据;以根据第二预设编码公式计算得到的所述子数据块中最近更新的原始数据的校验数据,更新所述子数据块的待更新的校验数据;其中,所述第二预设编码公式基于预设编码系数矩阵、所述原始数据变化日志中所述子数据块与待更新的校验数据对应的原始数据和所述子数据块最近更新的原始数据生成。

具体实施时,首先初始化纠删码中原始数据块的子数据块内更新前的原始数据为空;然后遍历所述原始数据变化日志,获取存在相应的写入记录的每个子数据块的更新前的原始数据(即生成待更新的校验数据的原始数据)和最近更新的原始数据;对于成功获取到更新前的原始数据和最近更新的原始数据的子数据块,分别计算该子数据块中每个字节的待写入校验数据。以编码系数矩阵为m×k为例,每个子数据块中的一个字节的数据通过第二预设编码公式计算后将得到k个字节的校验数据,分别对应K个校验数据块中的一个字节。所述第二预设编码公式根据公式1推导得到,也可以采用现有技术中的其他编码公式,本申请对此不作限定。

具体实施时,更新完所有校验数据之后,清空所述原始数据更新日志,例如,删除所述原始数据更新日志或将所述原始数据更新日志中相应的写入记录设置为无效。

本申请实施例公开的纠删码更新方法,通过获取更新纠删码中原始数据的请求,然后当存在原始数据变化日志时,则在所述原始数据变化日志末尾追加至少包含更新后的所述原始数据的写入记录,否则在所述原始数据变化日志末尾追加至少包含与待更新的校验数据对应的所述原始数据和用于更新的所述原始数据的写入记录,并在满足预设条件时,根据更新后所述原始数据变化日志,更新纠删码中的校验数据,解决了现有技术中在部分更新纠删码中的原始数据时,由于连续读、写存储设备,导致存储设备的访问性能低下的问题。通过分别更新原始数据和校验数据,并且统一更新校验数据,有效地减少了校验码更新时读写存储设备的次数,提高了纠删码的更新效率。

通过将原始数据块按照与最小写入单元对应的子数据块进行记录,在计算原始数据块的校验码时以子数据块为单位,可以进一步提高校验码计算和写入的效率,并有利于节约计算校验码时占用的缓存空间。

在本申请的另一个实施例中,在获取到更新纠删码中原始数据的请求之后,优选的,根据获取的更新纠删码中原始数据的请求判断是否进行全量更新。即在获取更新纠删码中原始数据的请求的步骤之后,还包括:如果根据更新纠删码中原始数据的请求确定需要对所述纠删码中全部原始数据进行更新,则更新所述纠删码中全部原始数据和全部校验数据;清空原始数据变化日志。具体实施时,在维护所述原始数据变化日志的过程中,若获取到整体更新纠删码的请求,则同时对原始数据块和校验数据块进行更新,在更新完校验数据之后,清空所述原始数据变化日志。具体实施时,更新完所有校验数据之后,清空所述原始数据更新日志,例如,删除所述原始数据更新日志或将所述原始数据更新日志中相应的写入记录设置为无效,避免重复更新。

实施例三

相应地,本申请实施例公开了纠删码更新装置,如图3所示,所述装置包括:

日志更新模块300,用于根据更新纠删码中原始数据的请求,更新原始数据变化日志;

原始数据更新模块310,用于更新所述原始数据;

校验数据更新模块320,用于当满足预设条件时,根据所述日志更新模块300更新后的所述原始数据变化日志,更新所述纠删码中的校验数据;

其中,所述原始数据的变化日志包括:与待更新的校验数据对应的原始数据,最近更新的原始数据。

可选的,所述更新纠删码中原始数据的请求包括更新的子数据块的标识,参见图4,所述日志更新模块300包括:

第一日志更新单元3001,用于如果预设的原始数据变化日志中存在所述请求指定的子数据块的写入记录,则在所述原始数据变化日志末尾追加所述子数据块的第一种写入记录,其中,所述第一种写入记录至少包含用于更新的原始数据;

第二日志更新单元3002,用于如果预设的原始数据变化日志中不存在所述请求指定的子数据块的写入记录,则在所述原始数据变化日志末尾追加所述子数据块的第二种写入记录,其中,所述第二种写入记录至少包含与待更新的校验数据对应的所述子数据块的原始数据和用于更新的原始数据。

本申请实施例公开的纠删码更新装置,通过根据更新纠删码中原始数据的请求,更新所述原始数据变化日志,然后更新所述原始数据;最后当满足预设条件时,根据更新后的所述原始数据的变化日志,更新纠删码中的校验数据,解决了现有技术中在部分更新纠删码中的原始数据时,由于连续读、写存储设备,导致存储设备的访问性能低下的问题。通过分别更新原始数据和校验数据,并且统一更新校验数据,有效地减少了校验码更新时读写存储设备的次数,提高了纠删码的更新效率。

在本申请的另一实施例中,参见图5,所述装置还包括:

全部数据更新模块330,用于如果根据更新纠删码中原始数据的请求,确定需要对所述纠删码中全部原始数据进行更新,则更新所述纠删码中全部原始数据和全部校验数据;

日志管理模块340,用于清空原始数据变化日志。

具体实施时,更新完所有校验数据之后,清空所述原始数据更新日志,例如,删除所述原始数据更新日志或将所述原始数据更新日志中相应的写入记录设置为无效,避免重复更新。

具体实施时,参见图6,所述校验数据更新模块320包括:

第一数据获取单元3201,用于获取更新后所述原始数据变化日志中与待更新的校验数据对应的原始数据和最近更新的原始数据,以及所述待更新的所述纠删码中的校验数据;

第一校验数据计算单元3202,用于根据预设第一编码公式计算待写入校验数据;

第一校验数据更新单元3203,用于以所述待写入校验数据更新所述待更新的所述纠删码中的校验数据;

其中,所述预设第一编码公式基于预设编码系数矩阵、所述原始数据块最近更新的原始数据和与待更新的校验数据对应的原始数据生成。

在另一个具体实施例中,参见图7,所述校验数据更新模块320包括:

子数据块确定单元3204,用于遍历所述原始数据变化日志,确定每个原始数据块中存在有效写入记录的子数据块;

子数据块更新单元3205,用于分别根据更新后的所述原始数据变化日志对所述子数据块的校验数据进行更新,所述子数据块为存储在一个最小写入单元内的原始数据;

其中,所述子数据块更新单元3205包括:

子数据块数据获取子单元,用于获取所述原始数据变化日志中所述子数据块与待更新的校验数据对应的原始数据,以及,所述子数据块最近更新的原始数据;

子数据块校验数据更新子单元,用于以根据第二预设编码公式计算得到的所述子数据块中最近更新的原始数据的校验数据,更新所述子数据块的待更新的校验数据;其中,所述第二预设编码公式基于预设编码系数矩阵、所述原始数据变化日志中所述子数据块与待更新的校验数据对应的原始数据和所述子数据块最近更新的原始数据生成。

具体实施时,所述预设条件至少包括以下任意一项:所述原始数据的变化日志达到预设长度、达到预设更新时间、出现原始数据错误。

本申请实施例公开的纠删码更新装置,通过根据更新纠删码中原始数据的请求,更新所述原始数据变化日志,然后更新所述原始数据;最后当满足预设条件时,根据更新后的所述原始数据的变化日志,更新纠删码中的校验数据,解决了现有技术中在部分更新纠删码中的原始数据时,由于连续读、写存储设备,导致存储设备的访问性能低下的问题。通过分别更新原始数据和校验数据,并且统一更新校验数据,有效地减少了校验码更新时读写存储设备的次数,提高了纠删码的更新效率。通过将原始数据块按照与最小写入单元对应的子数据块进行记录,在计算原始数据块的校验码时以子数据块为单位,可以进一步提高校验码计算和写入的效率,并有利于节约计算校验码时占用的缓存空间。

相应的,本申请还公开了一种电子设备,包括存储器、处理器及存储在所述存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如本申请实施例一和实施例二所述的纠删码更新方法。所述电子设备可以为PC机、移动终端、个人数字助理、平板电脑等。

本申请还公开了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本申请实施例一和实施例二所述的纠删码更新方法的步骤。

本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上对本申请提供的一种纠删码更新方法、装置和电子设备进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件实现。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1