数据处理方法、装置、电子设备及存储介质与流程

文档序号:25517712发布日期:2021-06-18 20:03阅读:91来源:国知局
数据处理方法、装置、电子设备及存储介质与流程

本发明涉及数据存储领域,尤其涉及一种数据处理方法、装置、电子设备及存储介质。



背景技术:

随着分布式存储系统规模的不断扩大,系统可靠性的问题逐渐受到人们的重视,为了防止磁盘数据丢失,提升系统可靠性,分布式存储系统多采用数据冗余技术进行数据存储。

现有分布式存储系统的存储方式为:先将数据以多副本的方式写入分布式存储系统的多个存储节点中,待存储一定时间后,再通过纠删码(erasurecoding,下简称ec)技术将副本分成多份数据分布在多个存储节点中。

由此可见,利用上述存储方式进行数据存储需要占用较多的存储空间,空间利用率低。



技术实现要素:

为了解决现有分布式存储系统的存储方式空间利用率低的技术问题,本发明提供了一种数据处理方法、装置、电子设备及存储介质。

第一方面,本发明实施例提供了一种数据处理方法,应用于客户端,所述方法包括:

对待存储的原始数据进行纠删码编码,得到对应的数据块;

向分布式存储系统的元数据服务器发送数据上传请求;

接收所述元数据服务器基于所述数据上传请求发送的目标存储节点的存储位置信息;

基于接收到的所述存储位置信息将所述数据块存储至所述目标存储节点。

作为一种可能的实现方式,所述方法还包括:

接收所述目标存储节点发送的第一指示消息,所述第一指示消息用于指示所述数据块是否成功写入所述目标存储节点;

若每一所述第一指示消息均指示所述数据块成功写入所述目标存储节点,则确定所述原始数据成功存储至所述分布式存储系统;

若任意所述第一指示消息指示所述数据块未成功写入所述目标存储节点,则确定所述原始数据未成功存储至所述分布式存储系统。

作为一种可能的实现方式,所述若任意所述第一指示消息指示所述数据块未成功写入所述目标存储节点,则确定所述原始数据未成功存储至所述分布式存储系统,包括:

若任意所述第一指示消息指示所述数据块未成功写入所述目标存储节点,则确定所述任意第一指示消息的数量;

若所述数量不满足设定条件,则确定所述原始数据未成功存储至所述分布式存储系统。

作为一种可能的实现方式,所述方法还包括:

若所述数量满足设定条件,则确定所述原始数据成功存储至所述分布式存储系统,以及控制所述元数据服务器根据成功写入所述目标存储节点的数据块对未成功写入所述目标存储节点的数据块进行恢复。

第二方面,本发明实施例还提供了另一种数据处理方法,应用于客户端,所述方法包括:

当接收到数据读取请求时,确定待读取的目标数据在分布式存储系统中对应的存储位置信息;

向与所述存储位置信息对应的存储节点发送数据下载请求,以使所述存储节点向所述客户端发送存储的数据块;

基于接收到的所述数据块得到所述目标数据。

作为一种可能的实现方式,所述确定待读取的目标数据在分布式存储系统中对应的存储位置信息,包括:

获取所述数据读取请求中携带的目标数据的标识信息;

查找本地缓存中是否有与所述标识信息相匹配的存储位置信息;

若是,则从本地缓存中获取与所述标识信息相匹配的存储位置信息;

若否,则向所述元数据服务器发送存储位置信息获取请求,以使所述元数据服务器确定与所述标识信息相匹配的存储节点,并向所述客户端发送与标识信息相匹配的所述存储节点的存储位置信息,以及将接收到的所述存储位置信息与所述标识信息对应存储至本地缓存中。

作为一种可能的实现方式,所述数据块包括原始数据块和校验块;

所述与所述存储位置信息对应的存储节点包括用于存储所述原始数据块的第一存储节点和用于存储所述校验块的第二存储节点;

所述向与所述存储位置信息对应的存储节点发送数据下载请求,以使所述存储节点向所述客户端发送存储的数据块,包括:

向所述第一存储节点发送原始数据下载请求,以使所述第一存储节点向所述客户端发送存储的原始数据块;

若未接收到任意第一存储节点发送的原始数据块,则向所述第二存储节点发送校验数据下载请求,以使所述第二存储节点向所述客户端发送存储的校验块。

作为一种可能的实现方式,基于接收到的所述数据块得到所述目标数据,包括:

若接收到每一第一存储节点发送的原始数据块,则将所述原始数据块作为所述目标数据;

若接收到每一第二存储节点发送的校验块,则对所述校验块进行纠删码解码,得到对应的原始数据块,将得到的原始数据块作为所述目标数据。

作为一种可能的实现方式,所述向所述存储节点发送数据下载请求,以使所述存储节点向所述客户端发送存储的数据块,包括:

向所有所述存储节点发送数据下载请求,以使所述存储节点向所述客户端发送存储的数据块;

基于接收到的所述数据块得到所述目标数据,包括:

若未接收到任意所述存储节点发送的数据块,则确定所述任意存储节点的数量;

若所述数量满足预设条件,则根据接收到的数据块确定所述目标数据。

第三方面,本发明实施例还提供了一种数据处理装置,应用于客户端,所述装置包括:

编码模块,用于对待存储的原始数据进行纠删码编码,得到对应的数据块;

存储位置信息获取模块,用于向分布式存储系统的元数据服务器发送数据上传请求;

接收模块,用于接收所述元数据服务器基于所述数据上传请求发送的目标存储节点的存储位置信息;

存储模块,用于基于接收到的所述存储位置信息将所述数据块存储至所述目标存储节点。

第四方面,本发明实施例还提供了一种数据处理装置,应用于客户端,所述装置包括:

位置信息确定模块,用于当接收到数据读取请求时,确定待读取的目标数据在所述分布式存储系统中对应的存储位置信息;

请求发送模块,用于向与所述存储位置信息对应的存储节点发送数据下载请求,以使所述存储节点向所述客户端发送存储的数据块;

数据块接收模块,用于基于接收到的所述数据块得到所述目标数据。

第五方面,本发明实施例还提供了一种电子设备,包括:处理器和存储器,所述处理器用于执行所述存储器中存储的数据处理程序,以实现第一方面所述的数据处理方法。

第六方面,本发明实施例还提供了一种存储介质,所述存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现第一方面所述的数据处理方法。

本发明实施例提供的上述技术方案与现有技术相比具有如下优点:

本发明实施例提供的一种数据处理方法,客户端对待存储至分布式存储系统的原始数据进行纠删码编码,得到对应的数据块,向分布式存储系统的元数据服务器发送数据上传请求,以得到用于存储数据块的目标存储节点的存储位置信息,基于存储位置信息将数据块存储至目标存储节点。本方案在客户端中对待存储至分布式存储系统的数据进行纠删码处理,得到数据块,直接将数据块存储至分布式存储系统中,相比于现有的分布式存储系统先进行多副本存储,再进行纠删码处理,本方案数据存储所占用的空间更少,提高了存储系统的空间利用率降低了存储成本。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。

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

图1为本发明实施例提供的一种应用场景示意图;

图2为本发明实施例提供的一种数据处理方法的流程图;

图3为本发明实施例提供的另一种数据处理方法的流程图;

图4为本发明实施例提供的又一种数据处理方法的流程图;

图5为本发明实施例提供的一种数据处理装置的框图;

图6为本发明实施例提供的另一种数据处理装置的框图;

图7为本发明实施例提供的一种电子设备的示意图。

具体实施方式

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

为便于对本发明实施例的理解,下面首先对本发明涉及的应用场景进行示例性说明。

参见图1,为本发明实施例示出的一种应用场景示意图。

如图1所示,应用场景中包括:客户端101和分布式存储系统102,其中,客户端101与分布式存储系统102通信连接。

客户端101可以是支持具有显示屏的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机、台式计算机等,图1中仅以智能手机为例。

分布式存储系统102中包括元数据服务器1021和存储节点1022~1023,需要说明的是,图1中仅以两个存储节点为例,在实际应用中,分布式存储系统102可包括多个存储节点,本发明对此不做限制。

其中,存储节点1022~1023可用于存储数据。

元数据服务器1021用于维护分布式存储系统102中各block的位置信息,block为分布式存储系统的最小读写单位,每个block有多个副本,而block的多个副本可以分布在分布式存储系统的多个存储节点中,block的位置信息即用于指示该block的副本所在的存储节点。在应用中,分布式存储系统可以划分为多个故障域,为了降低一个故障域产生问题对数据的影响,优选的可以将同一个block的不同副本放置在不同的故障域。

进一步的,元数据服务器1021还用于维护对象标识符(例如objectid),对象标识符为具有全局唯一性的全局id,对象标识符用于对分布式存储系统102中存储的数据进行标识。

目前,客户端101向分布式存储系统102中存入数据的过程包括:客户端101首先在分布式存储系统102中确定存储节点,然后将待存储的原始数据上传至该存储节点。存储节点接收到待存储的数据后,将以多副本的形式进行存储,待存储一定时间后,再通过ec技术将副本分成多份数据分布在多个存储节点中。

以三副本和8+4的ec为例,上述数据存储方式主要存在以下技术问题:

(1)空间利用率低,原因在于:在利用ec技术对副本进行处理之前数据一直处于三副本状态,在通过ec任务技术异步的将三副本分成多份数据分布在多个存储节点中的过程中,数据则处于4.5副本状态,如此导致数据占用过多的存储空间,空间利用率低。

(2)资源浪费,原因在于:在进行ec之后,三副本的索引继续保留,即分布式存储系统对外暴露的仍是三副本的索引信息,同时在三副本中记录ec副本的索引信息。后续在进行数据读取时,元数据服务器先根据对外暴露的三副本的索引信息将读请求发送至存储有三副本的存储节点,然后在根据三副本中记录的ec副本的索引信息,将读请求转发至对应存储有ec副本的存储节点,由此可见,整个数据读取的过程中存在多次请求的转发,造成了流量放大。

(3)系统维护成本高,原因在于:对于一份数据既需要维护三副本的索引信息又需要维护三副本中记录的ec副本的索引信息,任意一份索引信息丢失后会导致数据的不可访问,从而增大了系统的维护成本。

为了解决现有的数据存储方式存在的上述技术问题,本发明提出了一种数据处理方法。下面结合附图以具体实施例对本发明提供的数据处理方法做进一步的解释说明,实施例并不构成对本发明的限定。

参见图2,为本发明一示例性实施例提供的一种数据处理方法的实施例流程图。作为一个实施例,该方法应用于与分布式存储系统通信连接的客户端,比如图1所示例的客户端101上。如图2所示,该方法可以包括以下步骤:

s21.对待存储的原始数据进行纠删码编码,得到对应的数据块。

作为一个可选的实现方式,客户端可接收外部输入的数据,将接收到的数据作为上述待存储的原始数据。

作为另一个可选的实现方式,客户端可基于用户的选择操作,将本地存储的数据作为上述待存储的原始数据。

由步骤s21的描述可见,本发明实施例中,由客户端对待存储的原始数据进行纠删码编码。

在实践中,客户端可通过预设的纠删码编码策略对原始数据进行纠删码编码,得到原始数据块和校验块(为描述方便,以下将原始数据块和校验块统称为数据块)。上述纠删码编码策略中包含原始数据块数量k、编码策略和校验块数量m,其中k和m的值可由用户根据实际需求设定。

基于此,在本步骤s21中,对原始数据进行纠删码编码的过程包括:对原始数据进行切分,得到k个原始数据块,对k个原始数据块按照编码策略进行编码,得到m个校验块,将k个原始数据块与m个校验块统称为数据块,数据块的数量就是原始数据块数量和校验块数量的总和,具体的,数据块的数量n可以通过下式计算:n=k+m。

可选的,纠删码编码策略中还包括数据对齐策略。基于此,在对原始数据进行切分之前,可先根据数据对齐策略对原始数据进行对齐处理,然后再对对齐处理后的原始数据进行切分和编码。其中数据对齐策略为与分布式存储系统对应的对齐策略,通过对原始数据进行对齐处理,可使得原始数据符合分布式存储系统的数据要求,进而能够提高数据存储效率。

s22.向分布式存储系统的元数据服务器发送数据上传请求。

作为一个实施例,在应用中,客户端在启动时加载分布式存储系统的元数据服务器信息,元数据服务器信息中至少包括元数据服务器的标识信息,比如元数据服务器的ip、位置信息等,如此客户端可根据元数据服务器信息将数据上传请求发送到对应的元数据服务器。这里所说的客户端启动是广义的,可包括客户端重启,也可包括客户端发布上线时的启动。

进一步的,由于不同的数据块需要存储至不同的存储节点,也即目标存储节点的数量与数据块的数量一致,因此,作为一个实施例,上述数据上传请求中还可包含数据块的数量,如此元数据服务器接收到数据上传请求后,通过对数据上传请求进行解析得到数据块数量,根据数据块数量在分布式存储系统中确定出相应数量的用于存储数据块的目标存储节点,并将目标存储节点的存储位置信息发送至客户端。

s23.接收元数据服务器基于数据上传请求发送的目标存储节点的存储位置信息。

s24.基于接收到的存储位置信息将数据块存储至目标存储节点。

作为一个实施例,客户端接收到元数据服务器返回的目标存储节点的存储位置信息后,分别生成各数据块对应的写入请求,写入请求中至少携带有对应的数据块,将写入请求分别发送至对应的目标存储节点。目标存储节点接收到写入请求后,对接收的写入请求进行解析,获取到其中携带的数据块,并对数据块进行存储,从而实现将数据块存储至分布式存储系统。

本发明实施例提供的技术方案,通过客户端对待存储至分布式存储系统的原始数据进行纠删码编码,得到对应的数据块,向分布式存储系统的元数据服务器发送数据上传请求,以得到用于存储数据块的目标存储节点的存储位置信息,基于存储位置信息将数据块存储至目标存储节点,实现了直接将纠删码数据存储至分布式存储系统中,这相较于现有的存储方式中先进行三副本存储,再进行纠删码处理,本方案数据存储所占用的空间较少,空间利用率高。进一步的,本发明实施例在客户端中对数据进行纠删码编码,将纠删码编码得到的数据块发送至分布式存储系统中,而分布式存储系统直接对数据块进行存储即可实现对原始数据的冗余,无需对数据进行多副本存储,因此也就无需维护多副本的索引信息,降低了维护成本,而且后续也不会出现读请求多次转发的问题,避免了由于读请求转发导致的流量放大。

参见图3,为本发明一示例性实施例提供的另一种数据处理方法的实现流程图。如图3所示,该方法可以包括以下步骤:

s31.客户端接收数据写入请求,所述数据写入请求中携带有待存储的原始数据。

作为一个可选的实现方式,上述数据写入请求可以是外部设备向客户端发送的。

作为另一个可选的实现方式,上述数据写入请求可以是客户端本地触发生成的。具体的,客户端可提供一个数据输入界面,用户则可在该界面中输入待存储的原始数据,并在输入完成后,点击数据输入界面中的发送按钮。客户端检测到发送按钮被触发时,则生成上述数据写入请求。

s32.客户端对待存储的原始数据进行纠删码编码,得到对应的数据块。

作为一个实施例,利用预设的纠删码编码策略对原始数据进行纠删码编码,纠删码编码策略中包含数据对齐策略、原始数据块数量k、编码策略和校验块数据m,其中k和m的值根据实际需求设定。基于此,执行对原始数据进行纠删码编码的过程包括:根据纠删码编码策略中的数据对齐策略对原始数据进行对齐处理,将对齐处理后的原始数据切分为k个原始数据块,利用编码策略对k个原始数据块进行编码得到m个校验块,将k个数据块与m个校验块统称为数据块。

s33.客户端生成数据上传请求,并将数据上传请求发送至分布式存储系统的元数据服务器。

作为一个实施例,数据上传请求中至少携带有数据块数量和原始数据的标识信息。

作为一个实施例,在客户端启动时,加载分布式存储系统的元数据服务器信息,元数据服务器信息至少包含元数据服务器的标识信息,比如ip、位置信息等,客户端根据元数据服务器信息将数据上传请求发送至对应的元数据服务器。

s34.元数据服务器基于数据上传请求在分布式存储系统中确定出用于存储数据块的目标存储节点的存储位置信息和与数据上传请求对应的对象标识符,并将上述存储位置信息和对象标识符发送至客户端。

作为一个实施例,元数据服务器接收到数据上传请求后,确定分布式存储系统中的一个可写block(数据块,为分布式存储系统中读/写的最小单位)作为目标block,因为不同的数据块要存储至不同的存储节点,因此元数据服务器可以根据该目标block的位置信息,从保存有该目标block副本的多个存储节点中,确定出与数据块数量相同的多个存储节点作为目标存储节点,用于分别对各数据块进行存储。进一步的,在确定出目标存储节点后,获取目标存储节点的位置信息并将位置信息发送至客户端,以便后续客户端可以基于位置信息将数据块写入对应的目标存储节点中。

进一步的,元数据服务器根据数据上传请求,确定与该数据上传请求对应的对象标识符,并将该对象标识符发送至客户端,该对象标识符作为此次数据上传请求所要上传的数据在分布式存储系统中对应的唯一标识。

s35.客户端基于接收到的存储位置信息生成各数据块对应的写入请求,并将写入请求发送至对应的目标存储节点。

作为一个实施例,针对每个数据块生成各自对应的写入请求,写入请求中至少携带有对应的数据块和对象标识符。

进一步的,客户端根据接收到的存储位置信息将写入请求发送至对应的目标存储节点。

s36.目标存储节点根据写入请求执行写入操作,并向客户端返回第一指示消息。

作为一个实施例,目标存储节点接收到写入请求后,对写入请求进行解析,得到写入请求中携带的数据块和对象标识符,对数据块和对象标识符执行写入操作。

进一步的,若数据块成功写入该目标存储节点,则该目标存储节点可向客户端返回指示数据块写入成功的第一指示信息,若数据块没有成功写入该目标存储节点,则该目标存储节点可向客户端返回指示数据块写入失败的第一指示信息。

作为一个可选的实现方式,为了加快写入速度,可以采用非易失性内存或者log的机制,写入请求成功发送至异步地将纠删码数块写入到目标存储节点。

s37.客户端接收目标存储节点发送的第一指示消息,若每一所述第一指示消息均指示数据块成功写入目标存储节点,则执行步骤s38,否则,执行步骤s39。

s38.客户端确定原始数据成功存储至所述分布式存储系统。

作为一个实施例,若每个目标存储节点发送的第一指示消息均指示数据块成功写入,则确定所有的数据块均成功写入到对应的目标存储节点,此时确定数据块写入成功。

此外,客户端通知元数据服务器,以便元数据服务器对目标block和对象标识符进行更新,具体的,将目标block更新为不可写block,并将对象标识符更新为不可用,下次进行数据写入时需要生成新的对象标识符。

s39.客户端确定任意第一指示消息的数量,若该数量不满足设定条件,则执行步骤s310,否则执行步骤s312。

在实践中,根据纠删码的特性,当丢失或不可用的数据块的数量不大于校验块的数量时,仍可以通过剩余的数据块对原始数据块进行恢复,但是若丢失或不可用的数据块的数量大于校验块的数量时,则原始数据就无法恢复,因此,若并非所有第一指示消息均指示数据块成功写入目标存储节点,即存在任意第一指示消息指示数据块未成功写入所述目标存储节点时,并非直接确定原始数据写入失败,而是继续确定任意第一指示消息的数量,以根据数量确定原始数据是否可恢复。

具体的,设定条件为任意第一指示消息的数量不大于第一阈值,若任意第一指示消息的数量满足设定条件,则意味着原始数据可恢复,若不满足,则意味着原始数据不可恢复,此时确定原始数据写入失败。需要说明的是,第一阈值小于等于数据块中校验块的数量。

进一步的,在确定原始数据写入失败后,通知元数据服务器原始数据写入失败,并且返回用户。在原始数据写入失败后对象标识符可以在下一次写入时被重新使用,在一下次写入时,对于写失败的位置直接通过对象标识符的复用将垃圾数据(即之前写失败残留的数据)直接覆盖。

s310.客户端向元数据服务器发送数据恢复请求。

s311.元数据服务器接收到数据恢复请求后,根据成功写入目标存储节点的数据块对未成功写入目标存储节点的数据块进行恢复。

作为一个实施例,元数据服务器可以根据成功写入的数据块对原始数据进行恢复,然后在基于与客户端中相同的纠删码编码策略对原始数据进行纠删码编码,进而将编码后得到的与未成功写入的数据块对应的数据块写入到对应的目标存储节点中,进而实现对未成功写入目标存储节点的数据块的恢复。

s312.客户端确定原始数据未成功写入分布式存储系统。

作为一个实施例,若原始数据未成功存储至分布式存储系统,则客户端通知元数据服务器数据写入失败,若元数据服务器接收到标识数据写入失败的通知,则不对对象标识符进行更新,在下次接收到数据写入请求时继续使用该对象标识符。

参见图4,为本发明一示例性实施例提供的另一种数据处理方法的实现流程图。该实施例在上述图所示实施例的基础上,描述如何从分布式存储系统中读取数据,如图4所示,该方法可以包括以下步骤:

s41.当接收到数据读取请求时,确定待读取的目标数据在分布式存储系统中对应的存储位置信息。

作为一个实施例,根据图2和图3所示的流程可知,在将数据存储至分布式存储系统中时,可通过元数据服务器获取分布式存储系统中与该数据对应的存储位置信息,为了便于后续在进行数据读取时,减少与元数据服务器的交互,将获取的与该数据对应的存储位置信息和该数据的标识信息对应存储到客户端的本地缓存中。

基于此,在步骤s41确定目标数据在分布式存储系统中对应的存储位置信息的过程包括:对获取的数据读取请求进行解析,获取其中携带的目标数据的标识信息,之后,先查找本地缓存中是否有与所述标识信息相匹配的存储位置信息,若是,则从本地缓存中获取与所述标识信息相匹配的存储位置信息,将获取到的存储位置信息确定为目标数据在分布式存储系统中对应的存储位置信息;若否,则再向元数据服务器发送存储位置信息获取请求,以使所述元数据服务器确定与所述标识信息相匹配的存储节点,并向客户端发送与所述标识信息相匹配的存储节点的存储位置信息,此时客户端接收到的存储位置信息即为目标数据在分布式存储系统中对应的存储位置信息。

进一步的,客户端还可以将接收到的存储位置信息与目标数据的标识信息对应保存至本地缓存中,如此可便于下次直接从本地缓存中获取到。

s42.向与存储位置信息对应的存储节点发送数据下载请求,以使该存储节点向客户端发送存储的数据块。

首先说明,为了描述方便,将用于存储原始数据块的存储节点称为第一存储节点,将用于存储校验块的存储节点称为第二存储节点。

作为一个实施例,可先从第一存储节点中获取目标数据对应的原始数据块,若无法获取全部的原始数据块,再从第二存储节点中获取目标数据对应的校验块,以便根据校验块对目标数据进行恢复;若能够获取到全部的原始数据块,则无需再获取校验块,如此可提高数据读取效率。

具体的,先向第一存储节点发送原始数据下载请求,以使第一存储节点向客户端发送与目标数据对应的原始数据块,若未接收到任意第一存储节点发送的原始数据块,则向第二存储节点发送校验数据下载请求,以使第二存储节点向所述客户端发送与目标数据对应的校验块。

作为另一个实施例,可以同时向与目标数据对应的所有存储节点均发送数据下载请求,以使所述存储节点向客户端发送存储的数据块。通过此种方式只需与元数据服务器进行一次交互,减少了交互次数。

s43.确定接收到的数据块的数量是否小于第二阈值,若不小于,则执行s44,若小于,则执行s45。

由于当获取到的数据块的数量不小于对应的原始数据块的数量时,则能够根据获取到的数据块恢复出原始数据,因此上述第二阈值不小于目标数据对应的原始数据块的数量,基于此,优选的,可以将上述第二阈值设置为目标数据对应的原始数据块的数量。

s44.基于接收到的数据块得到目标数据。

作为一个实施例,若接收到的数据块包含全部的原始数据块,则对原始数据块进行组合拼接即可得到目标数据,若接收到的数据块中没有包含全部的原始数据块,则对其中包含的校验块按照与对目标数据进行存储时,使用与纠删码编码策略对应的纠删码解码策略对校验块进行解码,进而得到对应的原始数据块,再将原始数据块进行组合拼接即可得到对应的目标数据。

可选的,在接收到数据读取请求后,或客户端启动后,客户端可以开启cache(高速缓冲存储器),在目标数据读取成功后,通过cache在客户端缓存一份,从而加速热点数据的读取效率。

s45.确定目标数据读取失败。

若接收到的数据块的数量小于第二阈值,则意味着根据接收到的数据块可能无法恢复出目标数据,因此可确定目标数据读取失败。

本发明实施例提供的技术方案,在接收到数据读取请求后,可以直接从本地缓存中获取与待读取的目标数据对应的存储位置信息,与现有的需要通过元数据服务器获取存储位置信息相比,减少了与元数据服务器的交互,提升了数据读取效率。

本发明另一个实施例中,还提供了一种数据处理装置,该装置应用于客户端,如图5所示,该装置可以包括:编码模块501、存储位置信息确定模块502、接收模块503和存储模块504。

编码模块501,用于对待存储的原始数据进行纠删码编码,得到对应的数据块。

存储位置信息确定模块502,用于向分布式存储系统的元数据服务器发送数据上传请求。

接收模块503,用于接收元数据服务器基于数据上传请求发送的目标存储节点的存储位置信息。

存储模块504,用于基于接收到的存储位置信息将数据块存储至目标存储节点。

作为一个实施例,上述装置还可以包括存储结果确定模块(图5中未示出),具体用于:

指示消息接收单元,用于接收目标存储节点发送的第一指示消息,该第一指示消息用于指示数据块是否成功写入目标存储节点;

第一确定单元,用于若每一第一指示消息均指示数据块成功写入目标存储节点,则确定原始数据成功存储至分布式存储系统;

第二确定单元,用于若任意第一指示消息指示数据块未成功写入目标存储节点,则确定原始数据未成功存储至分布式存储系统。

作为一个实施例,第二确定单元具体用于:

若任意第一指示消息指示数据块未成功写入目标存储节点,则确定任意第一指示消息的数量;

若上述数量不满足设定条件,则确定原始数据未成功存储至分布式存储系统。

作为一个实施例,若上述数量满足设定条件,则确定原始数据成功存储至分布式存储系统,以及控制元数据服务器根据成功写入目标存储节点的数据块对未成功写入目标存储节点的数据块进行恢复。

本发明另一个实施例中,还提供了一种数据处理装置,该装置应用于客户端,如图6所示,该装置可以包括:位置信息确定模块601、请求发送模块602和数据块处理模块603。

位置信息确定模块601,用于当接收到数据读取请求时,确定待读取的目标数据在分布式存储系统中对应的存储位置信息;

请求发送模块602,用于向与存储位置信息对应的存储节点发送数据下载请求,以使存储节点向所述客户端发送存储的数据块;

数据块处理模块603,用于基于接收到的数据块得到目标数据。

作为一个实施例,位置信息确定模块601包括:

第一获取单元,用于获取数据读取请求中携带的目标数据的标识信息;

查找单元,用于查找本地缓存中是否有与上述标识信息相匹配的存储位置信息;

第二获取单元,用于若本地缓存中有与上述标识信息相匹配的存储位置信息,则从本地缓存中获取与上述标识信息相匹配的存储位置信息;

发送单元,用于若本地缓存中没有与上述标识信息相匹配的存储位置信息,向元数据服务器发送存储位置信息获取请求,以使元数据服务器确定与标识信息相匹配的存储节点并向客户端发送与上述标识信息相匹配的存储节点的存储位置信息,以及将接收到的所述存储位置信息与所述标识信息对应存储至本地缓存中。

作为一个实施例,所述数据块包括原始数据块和校验块;

所述与所述存储位置信息对应的存储节点包括用于存储所述原始数据块的第一存储节点和用于存储所述校验块的第二存储节点,基于此,请求发送模块602可以包括:

第一发送单元,用于向所述第一存储节点发送原始数据下载请求,以使所述第一存储节点向所述客户端发送存储的原始数据块;若未接收到任意第一存储节点发送的原始数据块,则向所述第二存储节点发送校验数据下载请求,以使所述第二存储节点向所述客户端发送存储的校验块。

作为一个实施例,数据块处理模块603包括:

第一处理单元,用于若接收到每一第一存储节点发送的原始数据块,则将所述原始数据块作为所述目标数据,若接收到每一第二存储节点发送的校验块,则对所述校验块进行纠删码解码,得到对应的原始数据块,将得到的原始数据块作为所述目标数据。

作为一个实施例,请求发送模块602包括:

第二发送单元,用于向所有存储节点发送数据下载请求,以使存储节点向客户端发送存储的数据块;

数据块处理模块603包括:

第二处理单元,用于若未接收到任意所述存储节点发送的数据块,则确定所述任意存储节点的数量,若所述数量满足预设条件,则根据接收到的数据块确定所述目标数据。

在本发明另一实施例中,还提供了一种电子设备,如图7所示,包括处理器701、通信接口702、存储器703和通信总线704,其中,处理器701,通信接口702,存储器703通过通信总线704完成相互间的通信;

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

处理器701,用于执行存储器703上所存放的程序时,实现如下步骤:

对待存储的原始数据进行纠删码编码,得到对应的数据块,向分布式存储系统的元数据服务器发送数据上传请求,接收元数据服务器基于数据上传请求发送的目标存储节点的存储位置信息,基于接收到的存储位置信息将数据块存储至目标存储节点。

和/或

当接收到数据读取请求时,确定待读取的目标数据在分布式存储系统中对应的存储位置信息,向与存储位置信息对应的存储节点发送数据下载请求,以使存储节点向所述客户端发送存储的数据块,基于接收到的数据块得到目标数据。

上述电子设备提到的通信总线704可以是外设部件互连标准(peripheralcomponentinterconnect,简称pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,简称eisa)总线等。该通信总线704可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

通信接口702用于上述电子设备与其他设备之间的通信。

存储器703可以包括随机存取存储器(randomaccessmemory,简称ram),也可以包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。

上述的处理器701可以是通用处理器,包括中央处理器(centralprocessingunit,简称cpu)、网络处理器(networkprocessor,简称np)等;还可以是数字信号处理器(digitalsignalprocessing,简称dsp)、专用集成电路(applicationspecificintegratedcircuit,简称asic)、现场可编程门阵列(field-programmablegatearray,简称fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。

在本发明另一实施例中,还提供了一种存储介质,所述存储介质上存储有数据处理方法程序,所述数据处理方法程序被处理器执行时实现上述任一所述的数据处理方法的步骤。

本发明实施例在具体实现时,可以参阅上述各个实施例,具有相应的技术效果。

需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上所述仅是本发明的具体实施方式,使本领域技术人员能够理解或实现本发明。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。

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