一种数据修改方法、装置、设备及可读存储介质与流程

文档序号:16207640发布日期:2018-12-08 07:19阅读:216来源:国知局
一种数据修改方法、装置、设备及可读存储介质与流程

本发明涉及存储技术领域,特别是涉及一种数据修改方法、装置、设备及可读存储介质。

背景技术

纠删码(erasurecoding,ec)是一种数据保护方法,它将一定长度(stripe_width)的数据分割成k份,用k份数据通过算法计算出m份冗余数据块;并将这k+m份数据存储在不同的位置,比如磁盘、存储节点或者其它地理位置。只需要k+m份中任意的k份数据就可以计算出原数据,以达到容错的目的。纠删码与副本相比在保障数据安全的情况下,可以提高磁盘有效利用率,所以纠删码技术在分布式存储系统中得到广泛应用。

在对数据进行修改时,由于k份数据块和m块效验块分布在不同位置的存储介质上,要求这k+m份数据要么都修改成功,要么都不成功;才能保证数据的一致性。当修改原有内容时,需要将原来的内容读取并先保存下来;再将修改操作应用到读取的内容上,最后将修改后的内容落盘。如果发生异常可以根据保存内容恢复成原来的数据。由于修改写操作转变成先读所有的源数据,将修改写操作应用到读取的源数据上再完全覆盖写到不同的存储介质上。由于不管修改内容的多少,都需要从k+m个设备上读取所有的源数据,将修改操作应用到源数据上再完全覆盖写下去;所以修改写存在写放大的问题,进一步成为影响整个集群性能的瓶颈点。

综上所述,如何有效地解决数据修改时存在的写放大等问题,是目前本领域技术人员急需解决的技术问题。



技术实现要素:

本发明的目的是提供一种数据修改方法、装置、设备及可读存储介质,可解决在对数据进行修改时,存在的修改写放大问题。

为解决上述技术问题,本发明提供如下技术方案:

一种数据修改方法,包括:

接收客户端发送的目标文件的修改请求,并确定所述修改请求对应的修改内容;其中,所述目标文件为利用所述纠删码算法按照纠删条带长度将目标文件切片成k份数据块,计算出m份校验块,并存入k+m个存储设备中的文件;其中m小于等于k,m与k均为正整数;

按照所述纠删条带长度读取所述修改内容对应的源数据;

生成利用所述纠删码算法保存所述源数据的数据保存操作,并按照所述修改请求,生成利用所述纠删码算法修改所述源数据的数据修改操作;

将所述数据保存操作与所述数据修改操作封装为数据修改事务;

将所述数据修改事务发送至存储了所述目标文件的k+m个存储设备中,以完成所述修改请求对应的修改操作。

优选地,所述按照所述纠删条带长度读取所述修改内容对应的源数据,包括:

从k个存储设备上,读取所述修改内容所在纠删条带长度的源数据。

优选地,所述生成利用所述纠删码算法保存所述源数据的数据保存操作,包括:

生成利用所述纠删码算法按照所述纠删条带长度将所述源数据切片成k份数据块,计算出m份校验块,并存入k+m个存储设备中的数据保存操作。

优选地,所述按照所述修改请求,生成利用所述纠删码算法修改所述源数据的数据修改操作,包括:

生成拷贝所述源数据,并将所述修改请求对应的修改操作应用到源数据上,并利用所述纠删码算法按照所述纠删条带长度将应用了修改操作的源数据切片成k份数据块,计算出m份校验块的数据保存操作。

优选地,将所述数据保存操作与所述数据修改操作封装为数据修改事务,包括:

将所述数据保存操作与所述数据修改操作封装为先执行所述数据保存操作,后执行所述数据修改操作的数据修改事务。

优选地,在将所述数据修改事务发送至存储了所述目标文件的k+m个存储设备中,以完成所述修改请求对应的修改操作之后,还包括:

接收存储设备返回的成功修改的反馈消息;

当k+m个反馈消息均为修改成功的反馈消息时,向所述客户端发送修改成功的消息。

优选地,在所述接收存储设备返回的成功修改的反馈消息之后,还包括:

当接收到的反馈消息存在修改失败的反馈消息时,向k+m个存储设备反馈回滚信号,以便k+m个存储设备将数据回滚为修改前的源数据。

一种数据修改装置,包括:

修改内容确定模块,用于接收客户端发送的目标文件的修改请求,并确定所述修改请求对应的修改内容;其中,所述目标文件为利用所述纠删码算法按照纠删条带长度将目标文件切片成k份数据块,计算出m份校验块,并存入k+m个存储设备中的文件;其中m小于等于k,m与k均为正整数;

源数据读取模块,用于按照所述纠删条带长度读取所述修改内容对应的源数据;

操作生成模块,生成利用所述纠删码算法保存所述源数据的数据保存操作,以及按照所述修改请求,生成利用所述纠删码算法修改所述源数据的数据修改操作;

数据修改事务获取模块,用于将所述数据保存操作与所述数据修改操作封装为数据修改事务;

数据修改事务发送模块,用于将所述数据修改事务发送至存储了所述目标文件的k+m个存储设备中,以完成所述修改请求对应的修改操作。

一种数据修改设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现上述数据修改方法的步骤。

一种可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述数据修改方法的步骤。

应用本发明实施例所提供的方法,接收客户端发送的目标文件的修改请求,并确定修改请求对应的修改内容;目标文件为利用纠删码算法按照纠删条带长度将目标文件切片成k份数据块,计算出m份校验块,并存入k+m个存储设备中的文件;其中m小于等于k,m与k均为正整数。由于存储时,以纠删条带长度作为最小单位,相应地,在修改写入时,同样也可仅在修改写中以纠删条带长度作为最小单位。具体的,可按照纠删条带长度读取修改内容对应的源数据,也就是说,整个修改操作对应的操作对象仅为修改内容对应的源数据,而不是整个目标文件。然后,生成利用纠删码算法保存源数据的数据保存操作,并按照修改请求,生成利用纠删码算法修改源数据的数据修改操作;将数据保存操作与数据修改操作封装为数据修改事务;将数据修改事务发送至存储了目标文件的k+m个存储设备中,以完成修改请求对应的修改操作。可以看出,由存储设备完成修改的数据保存操作和数据修改操作的操作对象仅仅为与修改请求中请求修改的源数据,而不是修改请求对应的整个目标文件对应的源数据,因而,在进行修改写时,只需将与修改请求修改内容对应的部分源数据重新写入存储设备中即可,从而解决了修改时,修改写放大的问题,可减少存储系统中的资源占用,进一步提升存储系统的系统性能。

相应地,本发明实施例还提供了与上述数据修改方法相对应的数据修改装置、设备和可读存储介质,具有上述技术效果,在此不再赘述。

附图说明

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

图1为本发明实施例中一种数据修改方法的实施流程图;

图2为本发明实施例中一种数据修改方法的实施模块示意图;

图3为本发明实施例中一种数据修改装置的结构示意图;

图4为本发明实施例中一种数据修改设备的结构示意图。

具体实施方式

为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例一:

请参考图1,图1为本发明实施例中一种数据修改方法的流程图,该方法可应用于分布式存储系统中,该方法包括以下步骤:

s101、接收客户端发送的目标文件的修改请求,并确定修改请求对应的修改内容。

其中,目标文件为利用纠删码算法按照纠删条带长度将目标文件切片成k份数据块,计算出m份校验块,并存入k+m个存储设备中的文件;其中m小于等于k,m与k均为正整数。其中,通常m大于k,k与m的具体数值可预先确定,也可根据实际情况进行确定和调整,本发明实施例对此并不做限定。

用户可通过客户端发送目标文件的修改请求,其中目标文件可以为文档、音频、视频、图片等可被修改的文件。

接收到目标文件的修改请求之后,可根据该修改请求确定修改内容。例如,当修改请求为请求修改一个word文件中的标题名,此时,该word文件的标题名即为修改内容,而不是整个word文件为修改内容。

s102、按照纠删条带长度读取修改内容对应的源数据。

由于存储目标数据时,利用了纠删算法,以纠删条带长度作为最小存储单元进行存储。因此,在修改操作时,也可以以纠删条带长度作为最小修改单元进行修改。按照纠删条带长度读取该修改内容对应的源数据。

优选地,因为在存储目标文件时,利用纠删算法进行存储,只需要k+m份中任意的k份数据就可以计算出源数据。因此,在本实施例中,也可进行从k个存储设备上,读取修改内容所在纠删条带长度的源数据。具体的,在读取修改内容对应的源数据时,当修改内容的长度为纠删条带长度的整数倍时,可仅读取修改内容对应的源数据;当修改内容的长度非纠删条带长度的整数倍时,需按照整数倍纠删条带长度的读取源数据。例如,修改内容为41k的长度时,而纠删条带长度为10k时,此时需读取5个纠删条带长度的内容作为源数据(即长度为50k)。需要说明的是,在本发明实施例中涉及到的长度,即为数据的大小,可以以字节为长度或大小的单位。

s103、生成利用纠删码算法保存源数据的数据保存操作,并按照修改请求,生成利用纠删码算法修改源数据的数据修改操作。

由于目标文件分布存储在k+m个存储设备上,为了完成数据修改操作,需要这k+m个存储设备均完成数据操作。因此,需要让k+m个存储设备均对存储的数据进行修改。此时,可以对应生成数据保存操作,和数据修改操作。具体的,可以利用纠删码算法进行数据保存和数据修改操作。

s104、将数据保存操作与数据修改操作封装为数据修改事务。

生成数据保存操作与数据修改操作之后,将数据保存操作与数据修改操作封装为数据修改事务。具体的,如何将操作封装为事务,可参见常见的封装技术,对此不再赘述。

s105、将数据修改事务发送至存储了目标文件的k+m个存储设备中,以完成修改请求对应的修改操作。

该数据修改事务被存储设备执行时,可完成相应地修改操作。具体的,存储设备进行修改时,可以仅对修改内容进行操作,而无需在修改写时,对目标文件的所有源数据进行覆盖写入的操作。即,本发明实施例中不存在写放大的问题。

应用本发明实施例所提供的方法,接收客户端发送的目标文件的修改请求,并确定修改请求对应的修改内容;目标文件为利用纠删码算法按照纠删条带长度将目标文件切片成k份数据块,计算出m份校验块,并存入k+m个存储设备中的文件;其中m小于等于k,m与k均为正整数。由于存储时,以纠删条带长度作为最小单位,相应地,在修改写入时,同样也可仅在修改写中以纠删条带长度作为最小单位。具体的,可按照纠删条带长度读取修改内容对应的源数据,也就是说,整个修改操作对应的操作对象仅为修改内容对应的源数据,而不是整个目标文件。然后,生成利用纠删码算法保存源数据的数据保存操作,并按照修改请求,生成利用纠删码算法修改源数据的数据修改操作;将数据保存操作与数据修改操作封装为数据修改事务;将数据修改事务发送至存储了目标文件的k+m个存储设备中,以完成修改请求对应的修改操作。可以看出,由存储设备完成修改的数据保存操作和数据修改操作的操作对象仅仅为与修改请求中请求修改的源数据,而不是修改请求对应的整个目标文件对应的源数据,因而,在进行修改写时,只需将与修改请求修改内容对应的部分源数据重新写入存储设备中即可,从而解决了修改时,修改写放大的问题,可减少存储系统中的资源占用,进一步提升存储系统的系统性能。

需要说明的是,基于上述实施例一,本发明实施例还提供了相应的改进方案。在后续实施例中涉及与上述实施例一中相同步骤或相应步骤之间可相互参考,相应的有益效果也可相互参照,在下文的改进实施例中不再一一赘述。

优选地,生成修改操作时,即在执行上述实施例一种步骤s103的操作时,可以包括以下生成方式:

数据保存操作生成方式,包括:生成利用纠删码算法按照纠删条带长度将源数据切片成k份数据块,计算出m份校验块,并存入k+m个存储设备中的数据保存操作。

为了使得分布式存储系统中存储的数据保持同步,支持存储设备进行数据修改时的回滚操作。当读取出修改内容对应的源数据之后,可以生成如下的数据保存操作:

利用纠删码算法按照纠删条带长度将源数据切片成k份数据块,计算出m份校验块,并存入k+m个存储设备。

数据修改操作生成方式,包括:生成拷贝源数据,并将修改请求对应的修改操作应用到源数据上,并利用纠删码算法按照纠删条带长度将应用了修改操作的源数据切片成k份数据块,计算出m份校验块的数据保存操作。

为了使得分布式存储系统中修改后源数据与其他未经修改的源数据保持读取操作的一致性,可以生成如下的数据修改操作:

拷贝一份源数据,并将修改请求对应的修改操作应用到源数据上,并利用纠删码算法按照纠删条带长度将应用了修改操作的源数据切片成k份数据块,计算出m份校验块。具体的,在存储设备在执行数据修改操作时,会将修改后重新计算出的k+m份数据分别存储到k+m个存储设备上。

优选地,为了有效地实现存储设备修改数据时的回滚操作,在对数据保存操作和对数据修改操作进行封装时,可规定数据保存操作和对数据修改操作进行封装的执行顺序。具体为,将数据保存操作与数据修改操作封装为先执行数据保存操作,后执行数据修改操作的数据修改事务。

优选地,为了提高人机交互的体验度,提升用户体验,在将数据修改事务发送至存储了目标文件的k+m个存储设备中,以完成修改请求对应的修改操作之后,还包括:

接收存储设备返回的成功修改的反馈消息;

当k+m个反馈消息均为修改成功的反馈消息时,向客户端发送修改成功的消息。即,当接收到k+m个存储设备分别反馈的反馈消息均为修改成功的消息时,可以认为完成了修改请求对应的修改操作,此时可以向用户发送提示信息,以告知其修改成功。

当然,在当某个存储设备修改失败时,为了保障数据的一致性,此时需进行回滚操作。具体的,当接收到的反馈消息存在修改失败的反馈消息时,向k+m个存储设备反馈回滚信号,以便k+m个存储设备将数据回滚为修改前的源数据。

实施例二:

为了便于本领域技术人员理解本发明实施例所提供的技术方案,下面以将本发明实施例所提供的技术方案进行模块化后的具体应用场景为例,对本发明实施例所提供的技术方案进行详细说明。

根据纠删码数据分布以及计算的原理,针对修改写提出了新的思路:仅仅从k个设备上读取修改写内容(offset,length)所在纠删条带长度的内容,而非所有的源数据;在很大程度上减少写放大,从而提高了分布式存储系统的修改写性能。

请参考图2,在实际应用时,可分别模块为:判断模块、读取模块、保存模块、数据应用模块、处理模块。具体如下:

判断模块:分布式存储系统的服务器端收到客户端发送的操作,判断这些操作是否为对象内容的修改操作。如果为非修改操作,则走原流程(这里至其他非修改操作的流程);否则进入修改写优化处理流程。

读取模块:满足修改写优化的条件进入读取处理模块,读取模块先根据所修改的内容(offset,length)计算出所需要读取的最小长度,生成读取操作并发出。

保存模块:生成根据读取的内容按照纠删条带长度进行切片成k份数据块,计算出m份效验块的源数据保存操作。

数据应用模块:生成拷贝一份源数据,并将修改操作应用到源数据上,将合并应用后的数据重新按照纠删条带长度进行切片k份数据块并计算出m份效验块的数据修改操作。

处理模块:进入处理模块后,将数据保存操作和数据修改操作生成事务,并将事务提交给k+m个存储设备上。接受到存储设备修改完成后,再返回给客户端,表示操作完成。

具体的,操作流程为:客户端发送操作请求;判断模块判断客户端的操作是否为修改操作;非修改操作走原来的流程;读取模块根据修改影响的内容读取所需的源数据;保存模块根据读取的源数据生成保存操作;数据应用模块将修改操作应用到读取的源数据上并重新封装修改操作;处理模块封装后的操作,并应答客户端。

在针对文件修改写应用场景中,直接读取修改操作影响的源数据加以保存,再修改对象数据方法;降低了源数据读取量和写放大,从而提升分布式集群的修改写性能。

相应于上面的方法实施例,本发明实施例还提供了一种数据修改装置,下文描述的数据修改装置与上文描述的数据修改方法可相互对应参照。

参见图3所示,该装置包括以下模块:

修改内容确定模块101,用于接收客户端发送的目标文件的修改请求,并确定修改请求对应的修改内容;目标文件为利用纠删码算法按照纠删条带长度将目标文件切片成k份数据块,计算出m份校验块,并存入k+m个存储设备中的文件;其中m小于等于k,m与k均为正整数;

源数据读取模块102,用于按照纠删条带长度读取修改内容对应的源数据;

操作生成模块103,生成利用纠删码算法保存源数据的数据保存操作,以及按照修改请求,生成利用纠删码算法修改源数据的数据修改操作;

数据修改事务获取模块104,用于将数据保存操作与数据修改操作封装为数据修改事务;

数据修改事务发送模块105,用于将数据修改事务发送至存储了目标文件的k+m个存储设备中,以完成修改请求对应的修改操作。

应用本发明实施例所提供的装置,接收客户端发送的目标文件的修改请求,并确定修改请求对应的修改内容;目标文件为利用纠删码算法按照纠删条带长度将目标文件切片成k份数据块,计算出m份校验块,并存入k+m个存储设备中的文件;其中m小于等于k,m与k均为正整数。由于存储时,以纠删条带长度作为最小单位,相应地,在修改写入时,同样也可仅在修改写中以纠删条带长度作为最小单位。具体的,可按照纠删条带长度读取修改内容对应的源数据,也就是说,整个修改操作对应的操作对象仅为修改内容对应的源数据,而不是整个目标文件。然后,生成利用纠删码算法保存源数据的数据保存操作,并按照修改请求,生成利用纠删码算法修改源数据的数据修改操作;将数据保存操作与数据修改操作封装为数据修改事务;将数据修改事务发送至存储了目标文件的k+m个存储设备中,以完成修改请求对应的修改操作。可以看出,由存储设备完成修改的数据保存操作和数据修改操作的操作对象仅仅为与修改请求中请求修改的源数据,而不是修改请求对应的整个目标文件对应的源数据,因而,在进行修改写时,只需将与修改请求修改内容对应的部分源数据重新写入存储设备中即可,从而解决了修改时,修改写放大的问题,可减少存储系统中的资源占用,进一步提升存储系统的系统性能。

在本发明的一种具体实施方式中,源数据读取模块102,具体用于从k个存储设备上,读取修改内容所在纠删条带长度的源数据。

在本发明的一种具体实施方式中,操作生成模块103,具体用于生成利用纠删码算法按照纠删条带长度将源数据切片成k份数据块,计算出m份校验块,并存入k+m个存储设备中的数据保存操作。

在本发明的一种具体实施方式中,操作生成模块103,具体用于生成拷贝源数据,并将修改请求对应的修改操作应用到源数据上,并利用纠删码算法按照纠删条带长度将应用了修改操作的源数据切片成k份数据块,计算出m份校验块的数据保存操作。

在本发明的一种具体实施方式中,数据修改事务获取模块104,具体用于,将数据保存操作与数据修改操作封装为数据修改事务,包括:

将数据保存操作与数据修改操作封装为先执行数据保存操作,后执行数据修改操作的数据修改事务。

在本发明的一种具体实施方式中,还包括:

修改反馈模块,用于在将数据修改事务发送至存储了目标文件的k+m个存储设备中,以完成修改请求对应的修改操作之后,接收存储设备返回的成功修改的反馈消息;当k+m个反馈消息均为修改成功的反馈消息时,向客户端发送修改成功的消息。

在本发明的一种具体实施方式中,修改反馈模块,具体用于在接收存储设备返回的成功修改的反馈消息之后,当接收到的反馈消息存在修改失败的反馈消息时,向k+m个存储设备反馈回滚信号,以便k+m个存储设备将数据回滚为修改前的源数据。

相应于上面的方法实施例,本发明实施例还提供了一种数据修改设备,下文描述的一种数据修改设备与上文描述的一种数据修改方法可相互对应参照。

参见图4所示,该数据修改设备包括:

存储器d1,用于存储计算机程序;

处理器d2,用于执行计算机程序时实现上述方法实施例的数据修改方法的步骤。

相应于上面的方法实施例,本发明实施例还提供了一种可读存储介质,下文描述的一种可读存储介质与上文描述的一种数据修改方法可相互对应参照。

一种可读存储介质,可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述方法实施例的数据修改方法的步骤。

该可读存储介质具体可以为u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可存储程序代码的可读存储介质。

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

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的技术方案及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

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