一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

数据写操作、数据读操作方法、装置与流程

2023-01-14 12:18:41 来源:中国专利 TAG:


1.本技术涉及磁盘及信息存储技术领域,特别是涉及一种数据写操作、数据读操作方法、装置、数据读写操作系统、计算机设备和存储介质。


背景技术:

2.在基于独立盘冗余阵列的存储系统中,逻辑存储空间中的逻辑块的数据被压缩后存储到物理存储空间中,物理存储空间被划分成多个条带,每个条带包括多个分块,具体包括数据块和校验块,数据块用于存储逻辑块的压缩后的数据,校验块用于存储针对数据块中存储的数据的校验信息,一个数据块可能存储一个或多个逻辑块中的数据。
3.实际应用场景中,在对条带中的分块执行数据写操作的过程中,常常会遇到数据写操作失败的情况。基于现有的技术方案,一旦监测到条带中分块的数据写操作失败,则立即停止对当前条带中数据的数据写入;或,重复持续对该分块执行数据写操作,直至所述分块的数据写操作成功。基于上述数据写操作方法会占用大量的存储系统资源,且,会导致数据写操作效率低下。
4.因此,急需提出一种能够有效解决上述技术问题的数据写操作、数据读操作方法、装置、数据读写操作系统、计算机设备和存储介质。


技术实现要素:

5.基于此,有必要针对上述技术问题,提供一种能够提升存储系统数据写操作效率、提升数据读取准确性的数据写操作、数据读操作方法、装置、数据读写操作系统、计算机设备和存储介质。
6.一方面,提供一种数据写操作方法,所述方法应用于条带中分块的数据写操作,所述方法包括:当所述条带中待执行数据写操作的分块为一时,启动对所述分块的数据写操作时长监测,定义所述分块为目标分块;当所述目标分块的数据写操作时长超过预设的数据写操作时长时,则获取所述目标分块的分块属性;基于所述目标分块的分块属性,按照预设的数据写操作失败分块总数计算规则,获取所述条带中数据写操作失败的分块总数;当所述条带中数据写操作失败的分块总数小于预设值时,则终止所述数据写操作;反之,则继续执行所述数据写操作。
7.在其中一个实施例中,基于所述目标分块的分块属性,按照预设的数据写操作失败分块总数计算规则,获取所述条带中数据写操作失败的分块总数,包括:基于所述目标分块的分块属性,将所述目标分块分为数据块或校验块;当所述目标分块为数据块时,则获取所述条带中数据写操作失败的校验块总数;当所述目标分块为校验块时,则获取所述条带中除所述目标分块外的数据写操作失败的校验块,与,所述条带中数据写操作失败且待校
验块校验的数据块的总数。
8.在其中一个实施例中,当所述条带中写操作失败的分块总数小于预设值时,则终止所述数据写操作,包括:当所述目标分块为数据块,且,所述条带中数据写操作失败的校验块总数小于2时,则终止所述数据写操作;当所述目标分块为校验块,且,所述条带中除所述目标分块外的数据写操作失败的校验块,与所述条带中数据写操作失败且待校验块校验的数据块的总数小于2时,则终止所述数据写操作。
9.在其中一个实施例中,当所述条带中待执行数据写操作的分块为一时,包括:获取预设的指针变量链表中的指针变量的数量;当所述预设的指针变量链表中的指针变量的数量为一时,则所述条带中待执行数据写操作的分块为一。
10.在其中一个实施例中,所述方法还包括:生成所述预设的指针变量链表;生成所述预设的指针变量链表,包括:响应于数据写操作请求,获取目标数据块,及,所述目标数据块所处条带的校验块;获取所述目标数据块与所述校验块的分块信息结构体;基于所述分块信息结构体,获取存储数据写操作超时结构体的逻辑地址,所述分块信息结构体包括数据写操作超时结构体;声明所述数据写操作超时结构体的逻辑地址,生成指针变量;基于所述指针变量,生成所述预设的指针变量链表。
11.在其中一个实施例中,响应于数据写操作请求后,所述方法还包括:对所述目标数据块执行数据写操作;对所述目标数据块执行数据写操作包括:获取目标数据块,及,所述目标数据块的待写入数据;基于所述目标数据块与所述待写入数据,执行数据写操作,将所述待写入数据写入至所述目标数据块。
12.在其中一个实施例中,响应于所述数据写操作后,所述方法还包括:对所述目标数据块所处条带的校验块执行数据写操作;对所述目标数据块所处条带的校验块执行数据写操作,包括:获取所述目标数据块的当前数据,及,所述目标数据块的待写入数据;对所述当前数据和所述待写入数据进行异或运算,获取中间校验值;获取所述目标数据块所处的条带的校验块的当前数据;对所述校验块的当前数据和所述中间校验值进行异或处理,得到所述校验块的待写入数据,所述校验块包括第一校验块和第二校验块;基于所述校验块的待写入数据,执行数据写操作,将所述待写入数据写入所述校验块。
13.在其中一个实施例中,对所述目标数据块执行数据写操作后,和/或,对所述目标数据块所处条带的校验块执行数据写操作后,所述方法还包括:当所述数据写操作完成时,获取所述指针变量链表中的指针变量的数量,所述数据写操作完成包括数据写操作失败和数据写操作成功;若所述指针变量的数量不小于2时,则从所述预设的指针变量链表中删除与所述目标数据块,或,所述校验块对应的指针变量,并更新所述指针变量链表。
14.在其中一个实施例中,所述方法还包括:获取条带中分块的数据写操作状态;获取所述分块的数据写操作时长;当所述分块的数据写操作时长不超过预设的数据写操作时长时,则更新所述分块的分块信息结构体中写操作提前完成状态为真。
15.在其中一个实施例中,获取所述分块的数据写操作状态时,所述方法还包括:当所述分块的数据写操作时长超过预设的数据写操作时长时,则判断所述分块所在条带是否存在至少一个数据写操作成功的校验块;若存在,则更新所述分块的分块信息结构体中写操作提前完成状态为真;若不存在,则更新所述分块的分块信息结构体中待校验块校验状态为真。
16.在其中一个实施例中,所述方法还包括:待所述校验块数据写操作成功时,遍历所述校验块所处条带的数据块,所述校验块至少为一;判断所述条带中是否存在待校验块校验状态为真的数据块;若存在,则基于所述校验块,获取所述数据块的待写入数据,对所述数据块执行数据写操作。
17.在其中一个实施例中,基于所述校验块,获取所述数据块的待写入数据,对所述数据块执行数据写操作后,所述方法还包括:更新所述数据块的分块信息结构体中写操作提前完成状态为真。
18.在其中一个实施例中,所述方法还包括:初始化条带中分块的分块结构体状态属性;初始化条带中分块的分块结构体状态属性,包括:获取所述条带中分块的分块结构体,所述分块的分块结构体包括写操作提前完成、待校验块校验和写操作超时;初始化所述分块的写操作提前完成状态和待校验块校验状态均为假。
19.在其中一个实施例中,所述方法包括:监测所述条带中分块的数据写操作速率;监测所述条带中分块的数据写操作速率,包括:预先生成分块写操作成功计数器;初始化所述分块写操作成功计数器的计数值为0;当更新所述分块的分块信息结构体中写操作提前完成状态为真时,则加1至所述分块写操作成功计数器的计数值。
20.在其中一个实施例中,监测所述条带中分块的数据写操作速率,还包括:响应于数据写请求操作,启动对所述分块写操作成功计数器的计数时长监控,直至所述分块写操作成功计数器的计数值等于第一预设值;获取所述分块写操作成功计数器的计数时长;当所述分块写操作成功计数器的计数时长不大于第二预设值时,则判定所述条带分块的数据写操作速率正常。
21.另一方面,提供了一种数据读操作方法,所述方法用于对条带中的分块的数据执行读操作,所述条带中分块的数据基于上述数据写操作方法写入,所述分块包括校验块和数据块,所述校验块包括第一校验块和第二校验块,所述方法包括:获取所述条带中数据写操作失败的分块,定义所述分块为失败分块,所述失败分块至多为二;按照预设的失败分块数据计算规则,重构所述失败分块的数据;待所述失败分块的数据重构完成后,对所述失败分块执行数据读操作。
22.在其中一个实施例中,按照预设的失败分块数据计算规则,重构所述失败分块的数据,包括:获取所述失败分块的分块类型分布情况;所述失败分块的分块类型分布情况,包括:所述失败分块的数量为一,所述失败分块包括失败数据块,或,失败校验块;和,所述失败分块的数量为二,所述失败分块包括两个失败数据块,或,所述失败分块包括一个失败数据块、一个失败校验块。
23.在其中一个实施例中,当所述失败分块包括校验块时,所述方法还包括:获取所述校验块的分块类别;当所述校验块的分块类别为第一校验块时,则定义所述第一校验块为第一失败校验块;当所述失败分块的分块类别第二校验块时,则定义所述第二校验块为第二失败校验块。
24.在其中一个实施例中,当所述失败分块的数量为一、所述失败分块为失败校验块时,所述方法还包括:当所述失败分块的分块类别为第一失败校验块时,对所述条带中每一数据块的数据进行异或运算,重构所述第一失败校验块的数据:当所述失败分块的分块类别为第二失败校验块时,对所述条带中每一数据块的数据及所述第一校验块的数据进行异
或运算,重构所述第二失败校验块的数据。
25.在其中一个实施例中,所述失败分块的数量为一,所述失败分块为失败数据块时,所述方法还包括:对所述条带中除所述失败数据块外的数据块的数据进行异或运算,得到第一运算值;对所述第一运算值与所述条带中第一校验块的数据进行同或运算,重构所述失败数据块的数据。
26.在其中一个实施例中,当所述失败分块的数量为二,所述失败分块为两个失败数据块时,所述方法包括:对所述条带中除所述失败数据块外的数据块的数据进行异或运算,得到第一运算值;对所述第一运算值与所述条带中第一校验块的数据进行同或运算,得到第二运算值,所述第二运算值为两个所述失败数据块的数据的异或运算结果;对所述第一运算值与所述条带中第一校验块的数据进行异或运算,得到第三运算值;对所述第三运算值与所述条带中第二校验块的数据进行同或运算,得到第四运算值,所述第四运算值为两个所述失败数据块的数据的异或运算结果;基于所述第三运算值与所述第四运算值,重构所述失败数据块的数据。
27.在其中一个实施例中,当所述失败分块的数量为二,所述失败分块为一个失败数据块、一个失败校验块时,所述方法还包括:当所述失败校验块为第一失败校验块时,对所述条带中除所述失败数据块外的数据块的数据进行异或运算,得到第五运算值,所述第五运算值为所述第一失败校验块的数据与失败数据块的数据的同或运算结果;基于所述第五运算值,对所述第五运算值与所述第二校验块的数据进行同或运算,得到第六运算值,所述第六运算值为第一失败校验块的数据与所述失败数据块的数据的异或运算结果;基于所述第五运算值与所述第六运算值,重构所述失败数据块和所述第一失败校验块的数据。
28.在其中一个实施例中,当所述失败分块的数量为二,所述失败分块为一个失败数据块、一个失败校验块时,所述方法还包括:当所述失败校验块为第二失败校验块时,对所述条带中除所述失败数据块外的数据块的数据进行异或运算,得到第七运算值;基于所述第七运算值,对所述第七运算值与所述第一校验块的数据进行同或运算,重构所述失败数据块的数据;对所述条带中包括所述失败数据块的数据块的数据,及,所述第一校验块的数据进行异或运算,重构所述第二失败校验块的数据。
29.又一方面,提供了一种数据写操作装置,所述装置应用于条带中分块的数据写操作,所述装置包括:监测启动单元,以用于当所述条带中待执行数据写操作的分块为一时,启动对所述分块的数据写操作时长监测,定义所述分块为目标分块;第一获取单元,以用于当所述目标分块的数据写操作时长超过预设的数据写操作时长时,则获取所述目标分块的分块属性;还用于基于所述目标分块的分块属性,按照预设的数据写操作失败分块总数计算规则,获取所述条带中数据写操作失败的分块总数;写操作单元,当所述条带中数据写操作失败的分块总数小于预设值时,则终止所述数据写操作;反之,则继续执行所述数据写操作。
30.再一方面,提供了一种数据读操作装置,所述数据读操作装置用于对条带中分块的数据执行读操作,所述条带中分块的数据基于所述数据写操作装置写入,所述装置包括:第二获取单元,以用于获取所述条带中数据写操作失败的分块,定义所述分块为失败分块,所述失败分块至多为二;
重构单元,以用于按照预设的失败分块数据计算规则,重构所述失败分块的数据;读操作单元,以用于待所述失败分块的数据重构完成后,对所述失败分块执行数据读操作。
31.又一方面,提供了一种数据读写操作系统,所述系统包括数据读操作装置和数据写操作装置。
32.另一方面,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:当所述条带中待执行数据写操作的分块为一时,启动对所述分块的数据写操作时长监测,定义所述分块为目标分块;当所述目标分块的数据写操作时长超过预设的数据写操作时长时,则获取所述目标分块的分块属性;基于所述目标分块的分块属性,按照预设的数据写操作失败分块总数计算规则,获取所述条带中数据写操作失败的分块总数;当所述条带中数据写操作失败的分块总数小于预设值时,则终止所述数据写操作;反之,则继续执行所述数据写操作。
33.又一方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:当所述条带中待执行数据写操作的分块为一时,启动对所述分块的数据写操作时长监测,定义所述分块为目标分块;当所述目标分块的数据写操作时长超过预设的数据写操作时长时,则获取所述目标分块的分块属性;基于所述目标分块的分块属性,按照预设的数据写操作失败分块总数计算规则,获取所述条带中数据写操作失败的分块总数;当所述条带中数据写操作失败的分块总数小于预设值时,则终止所述数据写操作;反之,则继续执行所述数据写操作。
34.上述数据写操作、数据读操作方法、装置、数据读写操作系统、计算机设备和存储介质,所述数据写操作方法应用于条带中分块的数据写操作,所述方法包括:当所述条带中待执行数据写操作的分块为一时,启动对所述分块的数据写操作时长监测,定义所述分块为目标分块;当所述目标分块的数据写操作时长超过预设的数据写操作时长时,则获取所述目标分块的分块属性;基于所述目标分块的分块属性,按照预设的数据写操作失败分块总数计算规则,获取所述条带中数据写操作失败的分块总数;当所述条带中数据写操作失败的分块总数小于预设值时,则终止所述数据写操作;反之,则继续执行所述数据写操作。基于上述数据写操作方法实现对条带中分块执行数据写操作,基于数据写操作失败分块的分块属性和分块总数,确定当前数据写操作是否可以终止,在满足预设的数据写操作终止条件时,终止所述数据写操作;能够在不降低分块的数据的准确性的前提下,提高存储系统数据写操作的效率,能够有效提升系统的存储性能;进一步地,对基于上述数据写操作方法写入分块的数据执行数据读操作的数据读操作方法,所述方法包括:获取所述条带中数据写操作失败的分块,定义所述分块为失败分块,所述失败分块至多为二;按照预设的失败分块数据计算规则,重构所述失败分块的数
据;待所述失败分块的数据重构完成后,对所述失败分块执行数据读操作。对应失败分块的分块属性和分块总数,按照预设的数据读操作方法对失败分块的数据进行重构后执行数据读操作;一方面能够确保重构后的数据的准确性,另一方面能够提高数据读操作的效率。
附图说明
35.图1为一个实施例中数据写操作方法和数据读操作方法的应用环境图;图2为一个实施例中数据写操作方法的流程示意图;图3为一个实施例中数据读操作方法的流程示意图;图4为一个实施例中数据写操作装置的结构框图;图5为一个实施例中数据读操作装置的结构框图;图6为一个实施例中数据读写操作系统的结构框图;图7为一个实施例中计算机设备的内部结构图。
具体实施方式
36.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本技术进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本技术,并不用于限定本技术。
37.本技术提供的数据写操作方法,所述方法应用于raid6磁盘阵列的分块的数据写操作;上述数据写操作方法可以应用于如图1所示的应用环境中。其中,终端102通过网络与服务器104通过网络进行通信。用户通过终端102输入数据写操作请求,服务器104接收到所述终端102发送的数据写操作请求,对条带中分块执行数据写操作。其中,终端102可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备,服务器104可以用独立的服务器或者是多个服务器组成的服务器集群来实现。以该方法应用于图1中的服务器104为例进行说明,所述方法如图2所示,所述方法包括:当所述条带中待执行数据写操作的分块为一时,启动对所述分块的数据写操作时长监测,定义所述分块为目标分块;当所述目标分块的数据写操作时长超过预设的数据写操作时长时,则获取所述目标分块的分块属性;基于所述目标分块的分块属性,按照预设的数据写操作失败分块总数计算规则,获取所述条带中数据写操作失败的分块总数;当所述条带中数据写操作失败的分块总数小于预设值时,则终止所述数据写操作;反之,则继续执行所述数据写操作。
38.具体地,当所述条带中待执行数据写操作的分块为一时,定义所述分块为目标分块,记为lastipk。
39.需要理解的是,在对raid6磁盘阵列分块执行数据写操作的过程中会存在多线程并发操作;也就是说raid6磁盘阵列中的数据块、第一校验块和第二校验块的数据写操作完成顺序并不是一定的。进一步地将对分块执行数据写操作时,是预先生成待写入数据块的数据,基于待写入数据块的数据即可以生成第一校验块和第二校验块的数据,在生成上述数据之后才会对分块执行数据写操作,在执行数据写操作的过程由于涉及到多线程并发写
操作,所以并不一定是按照先数据块,再校验块的数据写操作顺序写入的。
40.在其中一个实施例中,基于所述目标分块的分块属性,按照预设的数据写操作失败分块总数计算规则,获取所述条带中数据写操作失败的分块总数,包括:基于所述目标分块的分块属性,将所述目标分块分为数据块或校验块;当所述目标分块为数据块时,则获取所述条带中数据写操作失败的校验块总数;当所述目标分块为校验块时,则获取所述条带中除所述目标分块外的数据写操作失败的校验块,与,所述条带中数据写操作失败且待校验块校验的数据块的总数。其中,除所述目标分块外的数据写操作失败的校验块为0或为1。具体地,当所述目标分块为数据块时,则获取条带中数据写操作失败的校验块总数,记作failednums;当所述目标分块为校验块时,则获取所述条带中除所述目标分块外的数据写操作失败的校验块,与,所述条带中数据写操作失败且待校验块校验的数据块的总数,记作failednums。
41.在其中一个实施例中,当所述条带中写操作失败的分块总数小于预设值时,则终止所述数据写操作,包括:当所述目标分块为数据块,且,所述条带中数据写操作失败的校验块总数小于2时,则终止所述数据写操作;当所述目标分块为校验块,且,所述条带中除所述目标分块外的数据写操作失败的校验块,与所述条带中数据写操作失败且待校验块校验的数据块的总数小于2时,则终止所述数据写操作。
42.也就是说,当目标分块为数据块,且failednums<2时,则可以终止对lastipk执行数据写操作;当目标分块为校验块,且failednums<2时,则可以终止对lastipk执行数据写操作。需要理解的是,所述failednums一定是一个不小于0的整数。需要理解的是,确保failednums<2时才能终止对lastipk执行数据写操作是为了确保一个条带中数据写操作失败的分块的数量最大不能超过2,以确保条带中数据写操作失败的分块的数据可以通过条带上其他分块的数据可以重构得到,以保证数据的准确性。
43.其中,当所述目标分块为校验块,且,所述条带中除所述目标分块外的数据写操作失败的校验块,与所述条带中数据写操作失败且待校验块校验的数据块的总数小于2时,则终止所述数据写操作,包含了两种情况;其中一种情况是校验块和数据块的数量均为一,另外一种情况是校验块的数量为0,数据块的数量为1。
44.在其中一个实施例中,当所述条带中待执行数据写操作的分块为一时,包括:获取预设的指针变量链表中的指针变量的数量;当所述预设的指针变量链表中的指针变量的数量为一时,则所述条带中待执行数据写操作的分块为一。
45.在其中一个实施例中,所述方法还包括:生成所述预设的指针变量链表;生成所述预设的指针变量链表,包括:响应于数据写操作请求,获取目标数据块,及,所述目标数据块所处条带的校验块;获取所述目标数据块与所述校验块的分块信息结构体;基于所述分块信息结构体,获取存储数据写操作超时结构体的逻辑地址,所述分块信息结构体包括数据写操作超时结构体;声明所述数据写操作超时结构体的逻辑地址,生成指针变量;基于所述指针变量,生成所述预设的指针变量链表。
46.在其中一个实施例中,响应于数据写操作请求后,所述方法还包括:对所述目标数据块执行数据写操作;对所述目标数据块执行数据写操作包括:获取目标数据块,及,所述目标数据块的待写入数据;基于所述目标数据块与所述待写入数据,执行数据写操作,将所述待写入数据写入至所述目标数据块。
47.在其中一个实施例中,响应于所述数据写操作后,所述方法还包括:对所述目标数据块所处条带的校验块执行数据写操作;对所述目标数据块所处条带的校验块执行数据写操作,包括:获取所述目标数据块的当前数据,及,所述目标数据块的待写入数据;对所述当前数据和所述待写入数据进行异或运算,获取中间校验值;获取所述目标数据块所处的条带的校验块的当前数据;对所述校验块的当前数据和所述中间校验值进行异或处理,得到所述校验块的待写入数据,所述校验块包括第一校验块和第二校验块;基于所述校验块的待写入数据,执行数据写操作,将所述待写入数据写入所述校验块。
48.在其中一个实施例中,对所述目标数据块执行数据写操作后,和/或,对所述目标数据块所处条带的校验块执行数据写操作后,所述方法还包括:当所述数据写操作完成时,获取所述指针变量链表中的指针变量的数量,所述数据写操作完成包括数据写操作失败和数据写操作成功;若所述指针变量的数量不小于2时,则从所述预设的指针变量链表中删除与所述目标数据块,或,所述校验块对应的指针变量,并更新所述指针变量链表。
49.在其中一个实施例中,所述方法还包括:获取条带中分块的数据写操作状态;获取所述分块的数据写操作时长;当所述分块的数据写操作时长不超过预设的数据写操作时长时,则更新所述分块的分块信息结构体中写操作提前完成状态为真。
50.在其中一个实施例中,获取所述分块的数据写操作状态时,所述方法还包括:当所述分块的数据写操作时长超过预设的数据写操作时长时,则判断所述分块所在条带是否存在至少一个数据写操作成功的校验块;若存在,则更新所述分块的分块信息结构体中写操作提前完成状态为真;若不存在,则更新所述分块的分块信息结构体中待校验块校验状态为真。
51.在其中一个实施例中,所述方法还包括:待所述校验块数据写操作成功时,遍历所述校验块所处条带的数据块,所述校验块至少为一;判断所述条带中是否存在待校验块校验状态为真的数据块;若存在,则基于所述校验块,获取所述数据块的待写入数据,对所述数据块执行数据写操作。
52.具体地,若条带中存在待校验块校验状态为真的数据块时,则基于所述校验块,获取所述数据块的待写入数据,对所述数据块执行数据写操作,包括:获取所述待校验块校验状态为真的数据块的数量;其中,所述待校验块校验状态为真的数据块的数量至多为二。
53.在其中一个实施例中,当所述待校验块校验状态为真的数据块的数量为一时,基于所述校验块,获取所述数据块的待写入数据,对所述数据块执行数据写操作,包括:对所述条带中除所述数据块外的数据块的数据进行异或运算,得到第一运算值;对所述第一运算值与所述条带中第一校验块的数据进行同或运算,即可得到所述数据块的数据。
54.在其中一个实施例中,当所述待校验块校验状态为真的数据块的数量为二时,基于所述校验块,获取所述数据块的待写入数据,对所述数据块执行数据写操作,包括:对所述条带中除所述数据块外的数据块的数据进行异或运算,得到第一运算值;对所述第一运算值与所述条带中第一校验块的数据进行同或运算,得到第二运算值,所述第二运算值为两个所述失败数据块的数据的异或运算结果;对所述第一运算值与所述条带中第一校验块的数据进行异或运算,得到第三运算值;对所述第三运算值与所述条带中第二校验块的数据进行同或运算,得到第四运算值,所述第四运算值为两个所述失败数据块的数据的异或运算结果;基于所述第三运算值与所述第四运算值,即可得到所述数据块的数据。
55.在其中一个实施例中,基于所述校验块,获取所述数据块的待写入数据,对所述数据块执行数据写操作后,所述方法还包括:更新所述数据块的分块信息结构体中写操作提前完成状态为真。
56.在其中一个实施例中,所述方法还包括:初始化条带中分块的分块结构体状态属性;初始化条带中分块的分块结构体状态属性,包括:获取所述条带中分块的分块结构体,所述分块的分块结构体包括写操作提前完成、待校验块校验和写操作超时;初始化所述分块的写操作提前完成状态和待校验块校验状态均为假。
57.在其中一个实施例中,所述方法包括:监测所述条带中分块的数据写操作速率;监测所述条带中分块的数据写操作速率,包括:预先生成分块写操作成功计数器;初始化所述分块写操作成功计数器的计数值为0;当更新所述分块的分块信息结构体中写操作提前完成状态为真时,则加1至所述分块写操作成功计数器的计数值。
58.在其中一个实施例中,监测所述条带中分块的数据写操作速率,还包括:响应于数据写请求操作,启动对所述分块写操作成功计数器的计数时长监控,直至所述分块写操作成功计数器的计数值等于第一预设值;获取所述分块写操作成功计数器的计数时长;当所述分块写操作成功计数器的计数时长不大于第二预设值时,则判定所述条带分块的数据写操作速率正常。
59.在一个实施例中,本技术还提供一种数据读操作方法,所述方法实现对基于上述数据写操作写入至条带中分块的数据执行读操作,所述分块包括校验块和数据块;上述数据读操作方法可以应用于如图1所示的应用环境中。其中,终端102通过网络与服务器104通过网络进行通信。用户通过终端102接收客户发送的数据读操作请求,并通过网络发送给服务器104,服务器104响应于数据读操作请求,执行数据读操作。其中,终端102可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备,服务器104可以用独立的服务器或者是多个服务器组成的服务器集群来实现。以该方法应用于图1中的服务器104为例进行说明,所述方法如图3所示,所述方法包括:获取所述条带中数据写操作失败的分块,定义所述分块为失败分块,所述失败分块至多为二;按照预设的失败分块数据计算规则,重构所述失败分块的数据;待所述失败分块的数据重构完成后,对所述失败分块执行数据读操作。
60.在其中一个实施例中,按照预设的失败分块数据计算规则,重构所述失败分块的数据,包括:获取所述失败分块的分块类型分布情况;所述失败分块的分块类型分布情况,包括:所述失败分块的数量为一,所述失败分块包括失败数据块,或,失败校验块;和,所述失败分块的数量为二,所述失败分块包括两个失败数据块,或,所述失败分块包括一个失败数据块、一个失败校验块。
61.在其中一个实施例中,当所述失败分块包括校验块时,所述方法还包括:获取所述校验块的分块类别;当所述校验块的分块类别为第一校验块时,则定义所述第一校验块为第一失败校验块;当所述失败分块的分块类别第二校验块时,则定义所述第二校验块为第二失败校验块。
62.在其中一个实施例中,当所述失败分块的数量为一、所述失败分块为失败校验块时,所述方法还包括:当所述失败分块的分块类别为第一失败校验块时,对所述条带中每一数据块的数据进行异或运算,重构所述第一失败校验块的数据:当所述失败分块的分块类
别为第二失败校验块时,对所述条带中每一数据块的数据及所述第一校验块的数据进行异或运算,重构所述第二失败校验块的数据。
63.在其中一个实施例中,所述失败分块的数量为一,所述失败分块为失败数据块时,所述方法还包括:对所述条带中除所述失败数据块外的数据块的数据进行异或运算,得到第一运算值;对所述第一运算值与所述条带中第一校验块的数据进行同或运算,重构所述失败数据块的数据。
64.在其中一个实施例中,当所述失败分块的数量为二,所述失败分块为两个失败数据块时,所述方法包括:对所述条带中除所述失败数据块外的数据块的数据进行异或运算,得到第一运算值;对所述第一运算值与所述条带中第一校验块的数据进行同或运算,得到第二运算值,所述第二运算值为两个所述失败数据块的数据的异或运算结果;对所述第一运算值与所述条带中第一校验块的数据进行异或运算,得到第三运算值;对所述第三运算值与所述条带中第二校验块的数据进行同或运算,得到第四运算值,所述第四运算值为两个所述失败数据块的数据的异或运算结果;基于所述第三运算值与所述第四运算值,重构所述失败数据块的数据。
65.具体地,定义所述条带中的数据块分别为a、b、c和d,定义所述条带中的校验块分别为e和f;当所述失败分块为两个失败数据块时,即假设当定义所述数据块a和数据块b为失败数据块,设定数据块c、数据块d、第一校验块e和第二校验块f的数据均为1;对所述条带中除所述失败数据块a和b外的数据块的数据进行异或运算,得到第一运算值,即对数据块c和数据块d进行异或得到第一运算值0;对所述第一运算值与所述条带中第一校验块的数据进行同或运算,得到第二运算值,所述第二运算值为两个所述失败数据块的数据的异或运算结果,即对0和第一校验块e的数据1进行同或运算,得到第二运算值0,也就是说,对失败数据块a和b进行异或运算之后得到的值是0;对所述第一运算值与所述条带中第一校验块的数据进行异或运算,得到第三运算值,即,对0与第一校验块e的数据1进行异或运算后,得到第三运算值1;对所述第三运算值与所述条带中第二校验块的数据进行同或运算,得到第四运算值,所述第四运算值为两个所述失败数据块的数据的异或运算结果,即对第三运算值1与第二校验块f的数据1进行同或运算后,得到第四运算值1,也就是说,对失败数据块a和b进行异或运算后,得到的异或运算结果为1;基于所述第三运算值与所述第四运算值,重构所述失败数据块的数据,即可得到上述失败数据块a和失败数据块b的数据分别为0和1,或1和0。
66.在其中一个实施例中,当所述失败分块的数量为二,所述失败分块为一个失败数据块、一个失败校验块时,所述方法还包括:当所述失败校验块为第一失败校验块时,对所述条带中除所述失败数据块外的数据块的数据进行异或运算,得到第五运算值,所述第五运算值为所述第一失败校验块的数据与失败数据块的数据的同或运算结果;基于所述第五运算值,对所述第五运算值与所述第二校验块的数据进行同或运算,得到第六运算值,所述第六运算值为第一失败校验块的数据与所述失败数据块的数据的异或运算结果;基于所述第五运算值与所述第六运算值,重构所述失败数据块和所述第一失败校验块的数据。所述重构所述失败数据块与所述第一失败校验块的数据的方法可参照上述重构两个失败数据块的数据的方法,此处不再赘述。
67.在其中一个实施例中,当所述失败分块的数量为二,所述失败分块为一个失败数
据块、一个失败校验块时,所述方法还包括:当所述失败校验块为第二失败校验块时,对所述条带中除所述失败数据块外的数据块的数据进行异或运算,得到第七运算值;基于所述第七运算值,对所述第七运算值与所述第一校验块的数据进行同或运算,重构所述失败数据块的数据;对所述条带中包括所述失败数据块的数据块的数据,及,所述第一校验块的数据进行异或运算,重构所述第二失败校验块的数据。
68.应该理解的是,虽然图2-3的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2-3中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
69.在一个实施例中,如图4所示,提供了一种数据写操作装置,所述装置应用于条带中分块的数据写操作,所述装置包括:监测启动单元,第一获取单元和写操作单元,其中:监测启动单元,以用于当所述条带中待执行数据写操作的分块为一时,启动对所述分块的数据写操作时长监测,定义所述分块为目标分块;第一获取单元,以用于当所述目标分块的数据写操作时长超过预设的数据写操作时长时,则获取所述目标分块的分块属性;还用于基于所述目标分块的分块属性,按照预设的数据写操作失败分块总数计算规则,获取所述条带中数据写操作失败的分块总数;写操作单元,当所述条带中数据写操作失败的分块总数小于预设值时,则终止所述数据写操作;反之,则继续执行所述数据写操作。
70.在其中一个实施例中,第一获取单元,还用于基于所述目标分块的分块属性,将所述目标分块分为数据块或校验块;当所述目标分块为数据块时,则获取所述条带中数据写操作失败的校验块总数;当所述目标分块为校验块时,则获取所述条带中除所述目标分块外的数据写操作失败的校验块,与,所述条带中数据写操作失败且待校验块校验的数据块的总数。
71.在其中一个实施例中,所述写操作单元,还用于当所述目标分块为数据块,且,所述条带中数据写操作失败的校验块总数小于2时,则终止所述数据写操作;当所述目标分块为校验块,且,所述条带中除所述目标分块外的数据写操作失败的校验块,与所述条带中数据写操作失败且待校验块校验的数据块的总数小于2时,则终止所述数据写操作。
72.在其中一个实施例中,第一获取单元,还用于获取预设的指针变量链表中的指针变量的数量;当所述预设的指针变量链表中的指针变量的数量为一时,则所述条带中待执行数据写操作的分块为一。
73.在其中一个实施例中,第一获取单元,还用于响应于数据写操作请求,获取目标数据块,及,所述目标数据块所处条带的校验块;获取所述目标数据块与所述校验块的分块信息结构体;基于所述分块信息结构体,获取存储数据写操作超时结构体的逻辑地址,所述分块信息结构体包括数据写操作超时结构体;声明所述数据写操作超时结构体的逻辑地址,生成指针变量;基于所述指针变量,生成所述预设的指针变量链表。
74.在其中一个实施例中,写操作单元,还用于获取目标数据块,及,所述目标数据块
的待写入数据;基于所述目标数据块与所述待写入数据,执行数据写操作,将所述待写入数据写入至所述目标数据块。
75.在其中一个实施例中,写操作单元,还用于对所述目标数据块所处条带的校验块执行数据写操作;对所述目标数据块所处条带的校验块执行数据写操作,包括:获取所述目标数据块的当前数据,及,所述目标数据块的待写入数据;对所述当前数据和所述待写入数据进行异或运算,获取中间校验值;获取所述目标数据块所处的条带的校验块的当前数据;对所述校验块的当前数据和所述中间校验值进行异或处理,得到所述校验块的待写入数据,所述校验块包括第一校验块和第二校验块;基于所述校验块的待写入数据,执行数据写操作,将所述待写入数据写入所述校验块。
76.在其中一个实施例中,所述装置还包括:指针变量更新单元,以用于当所述数据写操作完成时,获取所述指针变量链表中的指针变量的数量,所述数据写操作完成包括数据写操作失败和数据写操作成功;若所述指针变量的数量不小于2时,则从所述预设的指针变量链表中删除与所述目标数据块,或,所述校验块对应的指针变量,并更新所述指针变量链表。
77.在其中一个实施例中,第一获取单元,还用于获取条带中分块的数据写操作状态;获取所述分块的数据写操作时长;当所述分块的数据写操作时长不超过预设的数据写操作时长时,则更新所述分块的分块信息结构体中写操作提前完成状态为真。
78.在其中一个实施例中,所述装置还包括:状态更新单元,以用于当所述分块的数据写操作时长超过预设的数据写操作时长时,则判断所述分块所在条带是否存在至少一个数据写操作成功的校验块;若存在,则更新所述分块的分块信息结构体中写操作提前完成状态为真;若不存在,则更新所述分块的分块信息结构体中待校验块校验状态为真。
79.在其中一个实施例中,所述写操作单元,还用于待所述校验块数据写操作成功时,遍历所述校验块所处条带的数据块,所述校验块至少为一;判断所述条带中是否存在待校验块校验状态为真的数据块;若存在,则基于所述校验块,获取所述数据块的待写入数据,对所述数据块执行数据写操作。
80.在其中一个实施例中,所述状态更新单元,还用于更新所述数据块的分块信息结构体中写操作提前完成状态为真。
81.在其中一个实施例中,所述装置还包括初始化单元,以用于获取所述条带中分块的分块结构体,所述分块的分块结构体包括写操作提前完成、待校验块校验和写操作超时;初始化所述分块的写操作提前完成状态和待校验块校验状态均为假。
82.在其中一个实施例中,所述初始化单元,还用于预先生成分块写操作成功计数器;初始化所述分块写操作成功计数器的计数值为0;当更新所述分块的分块信息结构体中写操作提前完成状态为真时,则加1至所述分块写操作成功计数器的计数值。
83.在其中一个实施例中,在其中一个实施例中,所述监测启动单元,还用于响应于数据写请求操作,启动对所述分块写操作成功计数器的计数时长监控,直至所述分块写操作成功计数器的计数值等于第一预设值;获取所述分块写操作成功计数器的计数时长;当所述分块写操作成功计数器的计数时长不大于第二预设值时,则判定所述条带分块的数据写操作速率正常。
84.关于数据写操作装置的具体限定可以参见上文中对于数据写操作方法的限定,在
此不再赘述。上述数据写操作装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
85.在一个实施例中,如图5所示,本技术还提供一种数据读操作装置,所述数据读操作装置用于对条带中分块的数据执行读操作,所述条带中分块的数据基于所述数据写操作装置写入,所述装置包括:第二获取单元、重构单元和读操作单元;其中:第二获取单元,以用于获取所述条带中数据写操作失败的分块,定义所述分块为失败分块,所述失败分块至多为二;重构单元,以用于按照预设的失败分块数据计算规则,重构所述失败分块的数据;读操作单元,以用于待所述失败分块的数据重构完成后,对所述失败分块执行数据读操作。
86.在其中一个实施例中,所述重构单元,还用于获取所述失败分块的分块类型分布情况;所述失败分块的分块类型分布情况,包括:所述失败分块的数量为一,所述失败分块包括失败数据块,或,失败校验块;和,所述失败分块的数量为二,所述失败分块包括两个失败数据块,或,所述失败分块包括一个失败数据块、一个失败校验块。
87.在其中一个实施例中,所述第二获取单元,还用于获取所述校验块的分块类别;当所述校验块的分块类别为第一校验块时,则定义所述第一校验块为第一失败校验块;当所述失败分块的分块类别第二校验块时,则定义所述第二校验块为第二失败校验块。
88.在其中一个实施例中,所述重构单元,还用于当所述失败分块的分块类别为第一失败校验块时,对所述条带中每一数据块的数据进行异或运算,重构所述第一失败校验块的数据:当所述失败分块的分块类别为第二失败校验块时,对所述条带中每一数据块的数据及所述第一校验块的数据进行异或运算,重构所述第二失败校验块的数据。
89.在其中一个实施例中,所述重构单元,还用于对所述条带中除所述失败数据块外的数据块的数据进行异或运算,得到第一运算值;对所述第一运算值与所述条带中第一校验块的数据进行同或运算,重构所述失败数据块的数据。
90.在其中一个实施例中,所述重构单元,还用于对所述条带中除所述失败数据块外的数据块的数据进行异或运算,得到第一运算值;对所述第一运算值与所述条带中第一校验块的数据进行同或运算,得到第二运算值,所述第二运算值为两个所述失败数据块的数据的异或运算结果;对所述第一运算值与所述条带中第一校验块的数据进行异或运算,得到第三运算值;对所述第三运算值与所述条带中第二校验块的数据进行同或运算,得到第四运算值,所述第四运算值为两个所述失败数据块的数据的异或运算结果;基于所述第三运算值与所述第四运算值,重构所述失败数据块的数据。
91.在其中一个实施例中,所述重构单元,还用于当所述失败校验块为第一失败校验块时,对所述条带中除所述失败数据块外的数据块的数据进行异或运算,得到第五运算值,所述第五运算值为所述第一失败校验块的数据与失败数据块的数据的同或运算结果;基于所述第五运算值,对所述第五运算值与所述第二校验块的数据进行同或运算,得到第六运算值,所述第六运算值为第一失败校验块的数据与所述失败数据块的数据的异或运算结果;基于所述第五运算值与所述第六运算值,重构所述失败数据块和所述第一失败校验块的数据。
92.在其中一个实施例中,所述重构单元,还用于当所述失败校验块为第二失败校验块时,对所述条带中除所述失败数据块外的数据块的数据进行异或运算,得到第七运算值;基于所述第七运算值,对所述第七运算值与所述第一校验块的数据进行同或运算,重构所述失败数据块的数据;对所述条带中包括所述失败数据块的数据块的数据,及,所述第一校验块的数据进行异或运算,重构所述第二失败校验块的数据。
93.关于数据读操作装置的具体限定可以参见上文中对于数据读操作方法的限定,在此不再赘述。上述数据读操作装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
94.在一个实施例中,如图6所示,提供了一种数据读写操作系统,所述系统包括上述数据写操作装置和数据读操作装置。
95.在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图7所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种数据写操作方法和数据读操作方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
96.本领域技术人员可以理解,图7中示出的结构,仅仅是与本技术方案相关的部分结构的框图,并不构成对本技术方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
97.在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:当所述条带中待执行数据写操作的分块为一时,启动对所述分块的数据写操作时长监测,定义所述分块为目标分块;当所述目标分块的数据写操作时长超过预设的数据写操作时长时,则获取所述目标分块的分块属性;基于所述目标分块的分块属性,按照预设的数据写操作失败分块总数计算规则,获取所述条带中数据写操作失败的分块总数;当所述条带中数据写操作失败的分块总数小于预设值时,则终止所述数据写操作;反之,则继续执行所述数据写操作。
98.在一个实施例中,处理器执行计算机程序时还实现以下步骤:基于所述目标分块的分块属性,将所述目标分块分为数据块或校验块;当所述目标分块为数据块时,则获取所述条带中数据写操作失败的校验块总数;当所述目标分块为校验块时,则获取所述条带中除所述目标分块外的数据写操作失败的校验块,与,所述条带中数据写操作失败且待校验块校验的数据块的总数。
99.在一个实施例中,处理器执行计算机程序时还实现以下步骤:当所述目标分块为
数据块,且,所述条带中数据写操作失败的校验块总数小于2时,则终止所述数据写操作;当所述目标分块为校验块,且,所述条带中除所述目标分块外的数据写操作失败的校验块,与所述条带中数据写操作失败且待校验块校验的数据块的总数小于2时,则终止所述数据写操作。
100.在一个实施例中,处理器执行计算机程序时还实现以下步骤:获取预设的指针变量链表中的指针变量的数量;当所述预设的指针变量链表中的指针变量的数量为一时,则所述条带中待执行数据写操作的分块为一。
101.在一个实施例中,处理器执行计算机程序时还实现以下步骤:响应于数据写操作请求,获取目标数据块,及,所述目标数据块所处条带的校验块;获取所述目标数据块与所述校验块的分块信息结构体;基于所述分块信息结构体,获取存储数据写操作超时结构体的逻辑地址,所述分块信息结构体包括数据写操作超时结构体;声明所述数据写操作超时结构体的逻辑地址,生成指针变量;基于所述指针变量,生成所述预设的指针变量链表。
102.在一个实施例中,处理器执行计算机程序时还实现以下步骤:获取目标数据块,及,所述目标数据块的待写入数据;基于所述目标数据块与所述待写入数据,执行数据写操作,将所述待写入数据写入至所述目标数据块。
103.在一个实施例中,处理器执行计算机程序时还实现以下步骤:获取所述目标数据块的当前数据,及,所述目标数据块的待写入数据;对所述当前数据和所述待写入数据进行异或运算,获取中间校验值;获取所述目标数据块所处的条带的校验块的当前数据;对所述校验块的当前数据和所述中间校验值进行异或处理,得到所述校验块的待写入数据,所述校验块包括第一校验块和第二校验块;基于所述校验块的待写入数据,执行数据写操作,将所述待写入数据写入所述校验块。
104.在一个实施例中,处理器执行计算机程序时还实现以下步骤:当所述数据写操作完成时,获取所述指针变量链表中的指针变量的数量,所述数据写操作完成包括数据写操作失败和数据写操作成功;若所述指针变量的数量不小于2时,则从所述预设的指针变量链表中删除与所述目标数据块,或,所述校验块对应的指针变量,并更新所述指针变量链表。
105.在一个实施例中,处理器执行计算机程序时还实现以下步骤:获取条带中分块的数据写操作状态;获取所述分块的数据写操作时长;当所述分块的数据写操作时长不超过预设的数据写操作时长时,则更新所述分块的分块信息结构体中写操作提前完成状态为真。
106.在一个实施例中,处理器执行计算机程序时还实现以下步骤:当所述分块的数据写操作时长超过预设的数据写操作时长时,则判断所述分块所在条带是否存在至少一个数据写操作成功的校验块;若存在,则更新所述分块的分块信息结构体中写操作提前完成状态为真;若不存在,则更新所述分块的分块信息结构体中待校验块校验状态为真。
107.在一个实施例中,处理器执行计算机程序时还实现以下步骤:待所述校验块数据写操作成功时,遍历所述校验块所处条带的数据块,所述校验块至少为一;判断所述条带中是否存在待校验块校验状态为真的数据块;若存在,则基于所述校验块,获取所述数据块的待写入数据,对所述数据块执行数据写操作。
108.在一个实施例中,处理器执行计算机程序时还实现以下步骤:更新所述数据块的分块信息结构体中写操作提前完成状态为真。
109.在一个实施例中,处理器执行计算机程序时还实现以下步骤:获取所述条带中分块的分块结构体,所述分块的分块结构体包括写操作提前完成、待校验块校验和写操作超时;初始化所述分块的写操作提前完成状态和待校验块校验状态均为假。
110.在一个实施例中,处理器执行计算机程序时还实现以下步骤:预先生成分块写操作成功计数器;初始化所述分块写操作成功计数器的计数值为0;当更新所述分块的分块信息结构体中写操作提前完成状态为真时,则加1至所述分块写操作成功计数器的计数值。
111.在一个实施例中,处理器执行计算机程序时还实现以下步骤:响应于数据写请求操作,启动对所述分块写操作成功计数器的计数时长监控,直至所述分块写操作成功计数器的计数值等于第一预设值;获取所述分块写操作成功计数器的计数时长;当所述分块写操作成功计数器的计数时长不大于第二预设值时,则判定所述条带分块的数据写操作速率正常。
112.在一个实施例中,处理器执行计算机程序时还实现以下步骤:获取所述条带中数据写操作失败的分块,定义所述分块为失败分块,所述失败分块至多为二;按照预设的失败分块数据计算规则,重构所述失败分块的数据;待所述失败分块的数据重构完成后,对所述失败分块执行数据读操作。
113.在一个实施例中,处理器执行计算机程序时还实现以下步骤:获取所述失败分块的分块类型分布情况;所述失败分块的分块类型分布情况,包括:所述失败分块的数量为一,所述失败分块包括失败数据块,或,失败校验块;和,所述失败分块的数量为二,所述失败分块包括两个失败数据块,或,所述失败分块包括一个失败数据块、一个失败校验块。
114.在一个实施例中,处理器执行计算机程序时还实现以下步骤:获取所述校验块的分块类别;当所述校验块的分块类别为第一校验块时,则定义所述第一校验块为第一失败校验块;当所述失败分块的分块类别第二校验块时,则定义所述第二校验块为第二失败校验块。
115.在一个实施例中,处理器执行计算机程序时还实现以下步骤:当所述失败分块的分块类别为第一失败校验块时,对所述条带中每一数据块的数据进行异或运算,重构所述第一失败校验块的数据:当所述失败分块的分块类别为第二失败校验块时,对所述条带中每一数据块的数据及所述第一校验块的数据进行异或运算,重构所述第二失败校验块的数据。
116.在一个实施例中,处理器执行计算机程序时还实现以下步骤:对所述条带中除所述失败数据块外的数据块的数据进行异或运算,得到第一运算值;对所述第一运算值与所述条带中第一校验块的数据进行同或运算,重构所述失败数据块的数据。
117.在一个实施例中,处理器执行计算机程序时还实现以下步骤:对所述条带中除所述失败数据块外的数据块的数据进行异或运算,得到第一运算值;对所述第一运算值与所述条带中第一校验块的数据进行同或运算,得到第二运算值,所述第二运算值为两个所述失败数据块的数据的异或运算结果;对所述第一运算值与所述条带中第一校验块的数据进行异或运算,得到第三运算值;对所述第三运算值与所述条带中第二校验块的数据进行同或运算,得到第四运算值,所述第四运算值为两个所述失败数据块的数据的异或运算结果;基于所述第三运算值与所述第四运算值,重构所述失败数据块的数据。
118.在一个实施例中,处理器执行计算机程序时还实现以下步骤:当所述失败校验块
为第一失败校验块时,对所述条带中除所述失败数据块外的数据块的数据进行异或运算,得到第五运算值,所述第五运算值为所述第一失败校验块的数据与失败数据块的数据的同或运算结果;基于所述第五运算值,对所述第五运算值与所述第二校验块的数据进行同或运算,得到第六运算值,所述第六运算值为第一失败校验块的数据与所述失败数据块的数据的异或运算结果;基于所述第五运算值与所述第六运算值,重构所述失败数据块和所述第一失败校验块的数据。
119.在一个实施例中,处理器执行计算机程序时还实现以下步骤:当所述失败校验块为第二失败校验块时,对所述条带中除所述失败数据块外的数据块的数据进行异或运算,得到第七运算值;基于所述第七运算值,对所述第七运算值与所述第一校验块的数据进行同或运算,重构所述失败数据块的数据;对所述条带中包括所述失败数据块的数据块的数据,及,所述第一校验块的数据进行异或运算,重构所述第二失败校验块的数据。
120.在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:当所述条带中待执行数据写操作的分块为一时,启动对所述分块的数据写操作时长监测,定义所述分块为目标分块;当所述目标分块的数据写操作时长超过预设的数据写操作时长时,则获取所述目标分块的分块属性;基于所述目标分块的分块属性,按照预设的数据写操作失败分块总数计算规则,获取所述条带中数据写操作失败的分块总数;当所述条带中数据写操作失败的分块总数小于预设值时,则终止所述数据写操作;反之,则继续执行所述数据写操作。
121.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:基于所述目标分块的分块属性,将所述目标分块分为数据块或校验块;当所述目标分块为数据块时,则获取所述条带中数据写操作失败的校验块总数;当所述目标分块为校验块时,则获取所述条带中除所述目标分块外的数据写操作失败的校验块,与,所述条带中数据写操作失败且待校验块校验的数据块的总数。
122.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:当所述目标分块为数据块,且,所述条带中数据写操作失败的校验块总数小于2时,则终止所述数据写操作;当所述目标分块为校验块,且,所述条带中除所述目标分块外的数据写操作失败的校验块,与所述条带中数据写操作失败且待校验块校验的数据块的总数小于2时,则终止所述数据写操作。
123.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:获取预设的指针变量链表中的指针变量的数量;当所述预设的指针变量链表中的指针变量的数量为一时,则所述条带中待执行数据写操作的分块为一。
124.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:响应于数据写操作请求,获取目标数据块,及,所述目标数据块所处条带的校验块;获取所述目标数据块与所述校验块的分块信息结构体;基于所述分块信息结构体,获取存储数据写操作超时结构体的逻辑地址,所述分块信息结构体包括数据写操作超时结构体;声明所述数据写操作超时结构体的逻辑地址,生成指针变量;基于所述指针变量,生成所述预设的指针变量链表。
125.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:获取目标数据块,及,所述目标数据块的待写入数据;基于所述目标数据块与所述待写入数据,执行数据写操作,将所述待写入数据写入至所述目标数据块。
126.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:获取所述目标数据块的当前数据,及,所述目标数据块的待写入数据;对所述当前数据和所述待写入数据进行异或运算,获取中间校验值;获取所述目标数据块所处的条带的校验块的当前数据;对所述校验块的当前数据和所述中间校验值进行异或处理,得到所述校验块的待写入数据,所述校验块包括第一校验块和第二校验块;基于所述校验块的待写入数据,执行数据写操作,将所述待写入数据写入所述校验块。
127.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:当所述数据写操作完成时,获取所述指针变量链表中的指针变量的数量,所述数据写操作完成包括数据写操作失败和数据写操作成功;若所述指针变量的数量不小于2时,则从所述预设的指针变量链表中删除与所述目标数据块,或,所述校验块对应的指针变量,并更新所述指针变量链表。
128.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:获取条带中分块的数据写操作状态;获取所述分块的数据写操作时长;当所述分块的数据写操作时长不超过预设的数据写操作时长时,则更新所述分块的分块信息结构体中写操作提前完成状态为真。
129.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:当所述分块的数据写操作时长超过预设的数据写操作时长时,则判断所述分块所在条带是否存在至少一个数据写操作成功的校验块;若存在,则更新所述分块的分块信息结构体中写操作提前完成状态为真;若不存在,则更新所述分块的分块信息结构体中待校验块校验状态为真。
130.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:待所述校验块数据写操作成功时,遍历所述校验块所处条带的数据块,所述校验块至少为一;判断所述条带中是否存在待校验块校验状态为真的数据块;若存在,则基于所述校验块,获取所述数据块的待写入数据,对所述数据块执行数据写操作。
131.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:更新所述数据块的分块信息结构体中写操作提前完成状态为真。
132.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:获取所述条带中分块的分块结构体,所述分块的分块结构体包括写操作提前完成、待校验块校验和写操作超时;初始化所述分块的写操作提前完成状态和待校验块校验状态均为假。
133.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:预先生成分块写操作成功计数器;初始化所述分块写操作成功计数器的计数值为0;当更新所述分块的分块信息结构体中写操作提前完成状态为真时,则加1至所述分块写操作成功计数器的计数值。
134.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:响应于数据写请求操作,启动对所述分块写操作成功计数器的计数时长监控,直至所述分块写操作成功计数器的计数值等于第一预设值;获取所述分块写操作成功计数器的计数时长;当所述分块写操作成功计数器的计数时长不大于第二预设值时,则判定所述条带分块的数据写操作速率正常。
135.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:获取所述条带中数据写操作失败的分块,定义所述分块为失败分块,所述失败分块至多为二;按照预设的失败分块数据计算规则,重构所述失败分块的数据;待所述失败分块的数据重构完成后,对所述失败分块执行数据读操作。
136.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:获取所述失败分块的分块类型分布情况;所述失败分块的分块类型分布情况,包括:所述失败分块的数量为一,所述失败分块包括失败数据块,或,失败校验块;和,所述失败分块的数量为二,所述失败分块包括两个失败数据块,或,所述失败分块包括一个失败数据块、一个失败校验块。
137.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:获取所述校验块的分块类别;当所述校验块的分块类别为第一校验块时,则定义所述第一校验块为第一失败校验块;当所述失败分块的分块类别第二校验块时,则定义所述第二校验块为第二失败校验块。
138.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:当所述失败分块的分块类别为第一失败校验块时,对所述条带中每一数据块的数据进行异或运算,重构所述第一失败校验块的数据:当所述失败分块的分块类别为第二失败校验块时,对所述条带中每一数据块的数据及所述第一校验块的数据进行异或运算,重构所述第二失败校验块的数据。
139.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:对所述条带中除所述失败数据块外的数据块的数据进行异或运算,得到第一运算值;对所述第一运算值与所述条带中第一校验块的数据进行同或运算,重构所述失败数据块的数据。
140.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:对所述条带中除所述失败数据块外的数据块的数据进行异或运算,得到第一运算值;对所述第一运算值与所述条带中第一校验块的数据进行同或运算,得到第二运算值,所述第二运算值为两个所述失败数据块的数据的异或运算结果;对所述第一运算值与所述条带中第一校验块的数据进行异或运算,得到第三运算值;对所述第三运算值与所述条带中第二校验块的数据进行同或运算,得到第四运算值,所述第四运算值为两个所述失败数据块的数据的异或运算结果;基于所述第三运算值与所述第四运算值,重构所述失败数据块的数据。
141.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:当所述失败校验块为第一失败校验块时,对所述条带中除所述失败数据块外的数据块的数据进行异或运算,得到第五运算值,所述第五运算值为所述第一失败校验块的数据与失败数据块的数据的同或运算结果;基于所述第五运算值,对所述第五运算值与所述第二校验块的数据进行同或运算,得到第六运算值,所述第六运算值为第一失败校验块的数据与所述失败数据块的数据的异或运算结果;基于所述第五运算值与所述第六运算值,重构所述失败数据块和所述第一失败校验块的数据。
142.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:当所述失败校验块为第二失败校验块时,对所述条带中除所述失败数据块外的数据块的数据进行异或运算,得到第七运算值;基于所述第七运算值,对所述第七运算值与所述第一校验块的数据进行同或运算,重构所述失败数据块的数据;对所述条带中包括所述失败数据块的数据块的数据,及,所述第一校验块的数据进行异或运算,重构所述第二失败校验块的数据。
143.本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本技术所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink) dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。
144.以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
145.以上所述实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术专利的保护范围应以所附权利要求为准。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献