具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
首先,在对本申请实施例进行描述的过程中出现的部分名词或术语适用于如下解释:
纠删码技术:Erasure Code,简称EC,EC将m个原始数据块编码生成k个校验块,形成一个组条带,系统可最多容忍任意k个原始数据块或校验块损坏,不会产生数据丢失。
在线纠删码技术:和离线纠删码技术不同,在线纠删码通常采用条带布局写入数据,条带布局方式只要凑满条带就可以写入。
元数据节点:分布式系统中文件的元信息所存储在的节点,通常用于存储文件的状态信息,及数据块的位置信息等。
数据节点:分布式系统中数据块所存储在的节点,通常负责数据块副本的写入,存储,读取,删除等操作。
实施例1
根据本发明实施例,提供了一种数据存储方法的实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本申请实施例一所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。图1示出了一种用于实现数据存储方法的计算机终端(或移动设备)的硬件结构框图。如图1所示,计算机终端10(或移动设备10)可以包括一个或多个(图中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器104、以及用于通信功能的传输装置106。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,计算机终端10还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
存储器104可用于存储应用软件的软件程序以及模块,如本发明实施例中的数据存储方法对应的程序指令/数据存储装置,处理器102通过运行存储在存储器104内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的应用程序的数据存储方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端10的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(Network Interface Controller,NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
显示器可以例如触摸屏式的液晶显示器(LCD),该液晶显示器可使得用户能够与计算机终端10(或移动设备)的用户界面进行交互。
在上述运行环境下,本申请提供了如图2所示的数据存储方法。图2是根据本发明实施例一的数据存储方法的流程图。
S21,将待存储数据依次存储至多个条带组的第一存储区中,并将每个第一存储区中已存储数据的校验数据存储至对应条带组的第二存储区中,其中,每个条带组的存储空间中包括第一存储区和第二存储区。
具体地,待存储数据为待存储至分布式系统的多个数据节点中的数据,在本实施例中,待存储数据为待一次性存储至多个数据节点的一组数据。
在一种可选的实施方式中,在数据量较大的情况下,可以将数据划分为多个数据块,并将每个数据块作为一组待存储数据。
在一种可选的实施方式中,以包含6个数据节点,每个数据节点的存储空间为12k为例,若每个条带组的存储空间为12k,则6个数据节点的存储空间内可以布局6个条带组,其中,第一条带组的存储空间分别由第一数据节点的第1k到2k的存储空间、第二数据节点的第1k到2k的存储空间、第三数据节点的第1k到2k的存储空间、第四数据节点的第1k到2k的存储空间、第五数据节点的第1k到2k的存储空间以及第六数据节点的第1k到2k的存储空间共同构成。同理,第二条带组的存储空间分别由第一数据节点至第六数据节点的第3k到第4k的存储空间共同构成;第三条带组的存储空间分别由第一数据节点至第六数据节点的第5k到第6k的存储空间共同构成;第四条带组的存储空间分别由第一数据节点至第六数据节点的第7k到第8k的存储空间共同构成;第五条带组的存储空间分别由第一数据节点至第六数据节点的第9k到第10k的存储空间共同构成;第六条带组的存储空间分别由第一数据节点至第六数据节点的第11k到第12k的存储空间共同构成。
进一步的,将每个条带组的存储空间划分为第一存储区和第二存储区,若每个条带组的存储空间为12k,可以将第1到11k的存储空间划分为第一存储区,将第12k的存储空间划分为第二存储区。
再进一步的,将待存储数据依次存储至多个条带组的第一存储区中,是指先将待存储数据存储至第一条带组的第一存储区域,在第一条带组的第一存储区域已存满数据,而待存储数据还存在剩余的情况下,将剩余数据存储至第二条带组的第一存储区,直至将待存储数据全部存储完毕。
需要说明的是,为了避免数据的丢失和读写异常,还在每个条带组的存储空间内设置有第二存储空间,第二存储空间内可以存储第一存储空间内的数据的校验睡觉,以条带组的存储空间包含11k的第一存储区域,包含1k的第二存储区域为例,可以对第一存储区域内存储的11k数据进行异或逻辑操作,得到校验数据,并将校验数据存储至第二存储区域。
S22,在多个条带组中的第一目标条带组的第一存储区中存在剩余空间的情况下,采用多个无效数据存填充剩余空间,并将多个无效数据的数据量信息存储至第一目标条带组中的第二存储区中,其中,第一目标条带组存储有待存储数据的尾部数据。
需要说明的是,第一目标条带组即为多个条带组中的最后一个条带组。具体地,由于待存储数据是按照条带组的顺序进行存储的,在存满前一个条带组的第一存储区后,再将数据存储后一个条带组的第一存储区中,在待存储数据的数据量不是条带组的第一存储区的大小的整数倍的情况下,最后一个用户存储待存储数据的条带组的第一存储空间存在剩余存储空间。
进一步的,为了避免最后一个条带的数据的丢失,可以采用无效数据填充最后一个条带组中的无效数据,并将填充量记录在最后一个条带组的第二存储区内。如图3所示,每个条带组的存储空间的首部为第一存储区,尾部为第二存储区,条带组n为第一目标条带组,在条带组1-条带组n-1中的第一存储区内存储用户数据,在条带组n的第一存储区内存储用户数据和填充数据。
此外,在条带组1-条带组n-1中的第二存储区内存储用户数据的元信息,具体地,元信息包括无效数据的数据量信息,也即填充数据的填充量,只有条带组n的填充量不等于0,条带组1-条带组n-1的填充量为0;元信息还包括用户数据的校验数据,用于校验用户数据;元信息还包括固定字符串,用于表征第二存储区为元信息存储区。
通过本实施例,使用固定长度的第二存储区域来记录元信息,包括数据填充量、校验数据等,空间冗余度小(例如,一个条带组设置16K或者1M,一个条带组占用16B的第二存储区,空间冗余度0.1%或者0.0016%),一致性处理简单,并且不依赖于元数据节点。
需要说明的是,无效数据的填充量是强状态的元数据,需要保证强的一致性。通过本实施例,在写入数据时,将待存储数据、填充数据和填充数据量统一存储,避免了数据和元数据分离存储带来的一致性问题,并且降低了对元数据节点的高可靠依赖。
根据本申请上述实施例,多个条带组的存储空间的大小相同,多个条带组的第二存储区的大小相同,在将待存储数据依次存储至多个条带组的第一存储区中,并将每个第一存储区中已存储数据的校验数据存储至对应条带组的第二存储区中之前,该方法还包括:获取每个条带组的存储空间的大小以及每个条带组的第二存储区的大小;计算每个条带组的存储空间的大小与条带组的第二存储区的大小的差值,并将差值确定为条带组的有效存储空间的大小;将待存储数据依次存储至多个条带组的第一存储区中包括:基于每个条带组的有效存储空间的大小,将待存储数据依次存储至多个条带组的第一存储区中,直至待存储数据存储完毕。
具体地,在向分布式存储节点的多个条带组存储待存储数据时,非最后一笔数据以固定大小向每个条带组写入,非最后一笔数据固定写入大小的大小writeSize可以由下式确定:
writeSize=StripGroupSize–FixedFooterSize。
其中,StripGroupSize为每个条带组的存储空间的大小,FixedFooterSize为每个条带组的第二存储区的大小。
需要说明的是,非最后一笔数据固定写入大小的大小也即条带组的有效存储空间的大小,在得到条带组的有效存储空间的大小之后,将待存储数据按照有效存储空间的大小依次存储至多个条带组的第一存储区中,直至待存储数据存储完毕。
根据本申请上述实施例,在多个条带组中的第一目标条带组的第一存储区中存在剩余空间的情况下,采用多个无效数据存填充剩余空间,并将多个无效数据的数据量信息存储至第一目标条带组中的第二存储区中之前,该方法还包括:计算第一目标条带组的存储空间的大小与第一目标条带组的第二存储区的差值,得到第一数据量;确定第一目标条带组的第一存储区中已存储数据的数据量,得到第二数据量;计算第一数据量与第二数据量的差值,并基于差值确定多个无效数据的数据量信息。
具体地,在向分布式存储节点的多个条带组存储待存储数据时,最后一笔数据以任意长度写入,并在条带填充无效数据(也即无用数据),以凑满条带组的第一存储区域。
其中,无效数据填充大小paddingSize可以由下式确定:
paddingSize=StripGroupSize–UsrDataSize–FixedFooterSize。
其中,StripGroupSize为每个条带组的存储空间的大小,UsrDataSize为第一目标条带组的第一存储区内存储的数据的数据量,FixedFooterSize为第一目标条带组的第二存储区的大小。
根据本申请上述实施例,该方法还包括:计算多个无效数据的数据量信息的校验数据,并将校验数据存储至第一目标条带组中的第二存储区中。
具体地,为了保证多个无效数据的数据量信息的准确性,还可以计算多个无效数据的数据量信息的校验数据,并将该校验数据也存储至第一目标条带组中的第二存储区中,从而在无效数据的数据量信息出现异常的情况下,对无效数据的数据量信息进行校验。
根据本申请上述实施例,在多个条带组中的第一目标条带组的第一存储区中存在剩余空间的情况下,采用多个无效数据存填充剩余空间,并将多个无效数据的数据量信息存储至第一目标条带组中的第二存储区中之后,该方法还包括:确定待存储数据所占据的多个条带组的数目,并确定多个条带组中每个条带组的第一存储区域已存储数据的数据量;计算数目和已存储数据的数据量的乘积,得到第三数据量;从多个条带组的第一目标条带组中的第二存储区内获取无效数据的数据量信息,得到无效数据的数据量;计算第三数据量和无效数据的数据量的差值,并将差值确定为待存储数据的数据量。
需要说明的是,在待存储数据并非条带组的第一存储区的大小的整数倍的情况下,可以按照下式计算写入分布式系统的待存储数据的数据量,也即待存储数据的长度Length:
Client failover后,metaNode向dataNode读取最后一个条带组的FixedFooter获取paddingSize,从而计算该block长度。
Length=(StripGroupSize–FixedFooterSize)*N–paddingSize。
其中,StripGroupSize为每个条带组的存储空间的大小,FixedFooterSize为第一目标条带组的第二存储区的大小,N为写入的待存储数据所占据的条带组的数量,paddingSize为第一目标条带组的第一存储区内填充的无效数据的数据量。
通过本实施例,达到了在待存储数据并非条带组的第一存储区的大小的整数倍的情况下,准确获取待存储数据的长度的目的。
实施例2
根据本发明实施例,还提供了一种数据读取方法,应用于从上述任一项中的多个条带组中读取数据,如图4所示,包括:
步骤S41,确定待读取数据的读取位置,并基于读取位置确定读取偏移量。
具体地,待读取数据以上述任意一项实施例中的数据存储方法存储在分布式存储系统的多个数据节点中。确定待读取数据的读取位置,即为确定在多个条带组的哪个位置读取数据,例如,确定在多个条带组的13k的位置读取数据,则确定读取偏移量可以为13k。
步骤S42,计算读取偏移量与每个条带组的第一存储区大小的商值,并基于商值确定第二目标条带组的序号,其中,第二目标条带组为多个条带组中存储待读取数据的条带组。
需要说明的是,读取待读取数据的过程即为先确定待读取数据在哪个条带组以及相应条带组内的哪个位置,再进行数据的读取。
具体地,第二目标条带组即为待读取数据所在的条带组,可以按照下式确定第二目标条带组的序号StripGroupIndex:
StripGroupIndex=readOffset/(StripGroupSize–FixedFooterSize)。
其中,readOffset为读取偏移量,StripGroupSize为每个条带组的存储空间的大小,FixedFooterSize为第一目标条带组的第二存储区的大小,符号“/”表示求商值。
步骤S43,计算读取偏移量与每个条带组的第一存储区的大小的余数,并基于余数确定目标存储位置,其中,目标存储位置为待读取数据在第二目标条带组中的存储位置。
具体地,可以按照下式确定待读取数据在第二目标条带组中的位置偏移量StripGroupOffset,位置偏移量StripGroupOffset可以用于表征待读取数据在第二目标条带组中的存储位置:
StripGroupOffset=readOffset%(StripGroupSize–FixedFooterSize)。
其中,readOffset为读取偏移量,StripGroupSize为每个条带组的存储空间的大小,FixedFooterSize为第一目标条带组的第二存储区的大小,符号“/”表示求余数。
步骤S44,根据第二目标条带组的序号从多个条带组中确定第二目标条带组,并读取第二目标条带组中目标位置存储的数据,得到待读取数据。
具体地,在待读取的数据为单个数据的情况下,根据第二目标条带组的序号定位至第二目标条带组,并从第二目标条带组的首部移动位置偏移量StripGroupOffset对应的长度,到达目标位置,并在目标位置读取数据,得到待读取的数据。
在可选的实施方式中,在待读取的数据为一段存储空间对应的数据的情况下,找到该段存储空间对应的第一个待读取数据的位置,以及最后一个待读取数据的位置,从高第一个待读取数据的位置读取数据,并跳过第二存储区域以及第一存储区域内的无效数据,得到待读取数据,其中,无效数据的填充长度可以从第二区域内解析得到。
根据本申请上述实施例,在确定待读取数据的读取位置,并基于读取位置确定读取偏移量之后,该方法还包括:获取每个条带组的存储空间的大小以及每个条带组的第二存储区的大小;计算每个条带组的存储空间的大小与条带组的第二存储区的大小的差值,并将差值确定为条带组的第一存储区的大小。
需要说明的是,由于每个条带组的存储空间的大小是固定的,每个条带组的第二存储区的大小也是预先设定的,也是固定的,可以通过二者计算条带组的第一存储区的大小,为确定待读取数据的位置奠定了数据基础。
根据本申请上述实施例,在根据第二目标条带组的序号从多个条带组中确定第二目标条带组,并读取第二目标条带组中目标位置存储的数据,得到待读取数据之后,该方法还包括:从第二目标条带组中的第二存储区中获取待读取数据的校验数据;基于校验数据以及第一存储区中除待读取数据以外的数据,对待读取数据进行校验。
具体地,在数据读取的过程在还可以对待读取数据进行校验,例如,在读取失败,或读取数据异常的情况下,可以读取第二目标条带组的第一存储区域的待读取数据以外的其他数据,并从第二目标条带组的第二存储区域内获取待读取数据对应的检验数据,从而根据反向逻辑计算得到待存储数据的值,避免了数据和元数据分离存储的情况下,元信息丢失导致待读取数据难以获取的问题。
在一种可选的实施方式中,在第二目标条带组的第一存储区域中填充有无效数据的情况下,可以从第二目标条带组的第二存储区域内获取无效数据的数据量信息,并获取无效数据的数据量信息对应的校验数据,对无效数据的数据量信息进行校验,从而为待读取数据的准确读取奠定数据基础。
此外,由于本申请实施例中的在线纠删码对应的条带组布局方式中,每个条带组占用固定长度的元信息存储区,读取数据的上层应用可以计算出数据在条带组中的位置,从而实现数据的感知。
通过本公开实施例,在数据存取之前,对条带组进行了第一存储区域和第二存储区域的划分,在数据存储时,以较小的存储冗余实现元数据和数据的统一存储,并在读取数据时从第二存储区内解析原数据,实现了不依赖元数据节点达到提高读取数据的准确度的效果,避免了在写入数据并非条带组的存储空间的整数倍的场景下,丢失最后一笔数据的风险,并且实现了数据读取应用感知数据位置的目的。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
实施例3
根据本发明实施例,还提供了一种用于实施上述数据存储方法的装置,如图5所示,该装置包括:
第一存储单元51,用于将待存储数据依次存储至多个条带组的第一存储区中,并将每个第一存储区中已存储数据的校验数据存储至对应条带组的第二存储区中,其中,每个条带组的存储空间中包括第一存储区和第二存储区。
第二存储单元52,用于在多个条带组中的第一目标条带组的第一存储区中存在剩余空间的情况下,采用多个无效数据存填充剩余空间,并将多个无效数据的数据量信息存储至第一目标条带组中的第二存储区中,其中,第一目标条带组存储有待存储数据的尾部数据。
根据本申请上述实施例,多个条带组的存储空间的大小相同,多个条带组的第二存储区的大小相同,装置还包括:第一获取单元,用于在将待存储数据依次存储至多个条带组的第一存储区中,并将每个第一存储区中已存储数据的校验数据存储至对应条带组的第二存储区中之前,获取每个条带组的存储空间的大小以及每个条带组的第二存储区的大小;第一计算单元,用于计算每个条带组的存储空间的大小与条带组的第二存储区的大小的差值,并将差值确定为条带组的有效存储空间的大小;第一存储单元51还用于基于每个条带组的有效存储空间的大小,将待存储数据依次存储至多个条带组的第一存储区中,直至待存储数据存储完毕。
根据本申请上述实施例,装置还包括:第二计算单元,用于在多个条带组中的第一目标条带组的第一存储区中存在剩余空间的情况下,采用多个无效数据存填充剩余空间,并将多个无效数据的数据量信息存储至第一目标条带组中的第二存储区中之前,计算第一目标条带组的存储空间的大小与第一目标条带组的第二存储区的差值,得到第一数据量;第一确定单元,用于确定第一目标条带组的第一存储区中已存储数据的数据量,得到第二数据量;第三计算单元,用于计算第一数据量与第二数据量的差值,并基于差值确定多个无效数据的数据量信息。
根据本申请上述实施例,装置还包括:第四计算单元,用于计算多个无效数据的数据量信息的校验数据,并将校验数据存储至第一目标条带组中的第二存储区中。
根据本申请上述实施例,装置还包括:第二确定单元,用于在多个条带组中的第一目标条带组的第一存储区中存在剩余空间的情况下,采用多个无效数据存填充剩余空间,并将多个无效数据的数据量信息存储至第一目标条带组中的第二存储区中之后,确定待存储数据所占据的多个条带组的数目,并确定多个条带组中每个条带组的第一存储区域已存储数据的数据量;第五计算单元,用于计算数目和已存储数据的数据量的乘积,得到第三数据量;第二获取单元,用于从多个条带组的第一目标条带组中的第二存储区内获取无效数据的数据量信息,得到无效数据的数据量;第六计算单元,用于计算第三数据量和无效数据的数据量的差值,并将差值确定为待存储数据的数据量。
此处需要说明的是,上述单元及模块对应于实施例1中的步骤,单元及模块与对应的步骤所实现的实例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实施例一提供的计算机终端10中。
实施例4
根据本发明实施例,还提供了一种用于实施上述数据读取方法的装置,如图6所示,该装置包括:
第三确定单元61,用于确定待读取数据的读取位置,并基于读取位置确定读取偏移量。
第七计算单元62,用于计算读取偏移量与每个条带组的第一存储区大小的商值,并基于商值确定第二目标条带组的序号,其中,第二目标条带组为多个条带组中存储待读取数据的条带组。
第八计算单元63,用于计算读取偏移量与每个条带组的第一存储区的大小的余数,并基于余数确定目标存储位置,其中,目标存储位置为待读取数据在第二目标条带组中的存储位置。
第四确定单元64,用于根据第二目标条带组的序号从多个条带组中确定第二目标条带组,并读取第二目标条带组中目标位置存储的数据,得到待读取数据。
根据本申请上述实施例,所述装置还包括:第三获取单元,用于在所述确定待读取数据的读取位置,并基于所述读取位置确定读取偏移量之后,获取每个所述条带组的所述存储空间的大小以及每个所述条带组的所述第二存储区的大小;第九计算单元,用于计算每个所述条带组的所述存储空间的大小与所述条带组的所述第二存储区的大小的差值,并将所述差值确定为所述条带组的所述第一存储区的大小。
根据本申请上述实施例,在所述根据所述第二目标条带组的序号从所述多个条带组中确定所述第二目标条带组,并读取所述第二目标条带组中所述目标位置存储的数据,得到所述待读取数据之后,所述装置还包括:第四获取单元,用于从所述第二目标条带组中的所述第二存储区中获取所述待读取数据的校验数据;校验单元,用于基于所述校验数据以及所述第一存储区中除所述待读取数据以外的数据,对所述待读取数据进行校验。
此处需要说明的是,上述单元及模块对应于实施例2中的步骤,所述单元及模块与对应的步骤所实现的实例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实施例一提供的计算机终端10中。
实施例5
本发明的实施例可以提供一种计算机终端,该计算机终端可以是计算机终端群中的任意一个计算机终端设备。可选地,在本实施例中,上述计算机终端也可以替换为移动终端等终端设备。
可选地,在本实施例中,上述计算机终端可以位于计算机网络的多个网络设备中的至少一个网络设备。
在本实施例中,上述计算机终端可以执行应用程序的数据存储方法中以下步骤的程序代码:将待存储数据依次存储至多个条带组的第一存储区中,并将每个第一存储区中已存储数据的校验数据存储至对应条带组的第二存储区中,其中,每个条带组的存储空间中包括第一存储区和第二存储区;在多个条带组中的第一目标条带组的第一存储区中存在剩余空间的情况下,采用多个无效数据存填充剩余空间,并将多个无效数据的数据量信息存储至第一目标条带组中的第二存储区中,其中,第一目标条带组存储有待存储数据的尾部数据。
上述计算机终端还可以执行应用程序的数据读取方法中以下步骤的程序代码:确定待读取数据的读取位置,并基于读取位置确定读取偏移量;计算读取偏移量与每个条带组的第一存储区大小的商值,并基于商值确定第二目标条带组的序号,其中,第二目标条带组为多个条带组中存储待读取数据的条带组;计算读取偏移量与每个条带组的第一存储区的大小的余数,并基于余数确定目标存储位置,其中,目标存储位置为待读取数据在第二目标条带组中的存储位置;根据第二目标条带组的序号从多个条带组中确定第二目标条带组,并读取第二目标条带组中目标位置存储的数据,得到待读取数据。
可选地,图7是根据本发明实施例的一种计算机终端的结构框图。如图7所示,该计算机终端A可以包括:一个或多个(图中仅示出一个)处理器、存储器。
其中,存储器可用于存储软件程序以及模块,如本发明实施例中的数据处理方法和装置对应的程序指令/模块,处理器通过运行存储在存储器内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的数据存储方法以及数据读取方法。存储器可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器可进一步包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至终端A。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
处理器可以通过传输装置调用存储器存储的信息及应用程序,以执行下述步骤:将待存储数据依次存储至多个条带组的第一存储区中,并将每个第一存储区中已存储数据的校验数据存储至对应条带组的第二存储区中,其中,每个条带组的存储空间中包括第一存储区和第二存储区;在多个条带组中的第一目标条带组的第一存储区中存在剩余空间的情况下,采用多个无效数据存填充剩余空间,并将多个无效数据的数据量信息存储至第一目标条带组中的第二存储区中,其中,第一目标条带组存储有待存储数据的尾部数据。
处理器还可以通过传输装置调用存储器存储的信息及应用程序,以执行下述步骤:确定待读取数据的读取位置,并基于读取位置确定读取偏移量;计算读取偏移量与每个条带组的第一存储区大小的商值,并基于商值确定第二目标条带组的序号,其中,第二目标条带组为多个条带组中存储待读取数据的条带组;计算读取偏移量与每个条带组的第一存储区的大小的余数,并基于余数确定目标存储位置,其中,目标存储位置为待读取数据在第二目标条带组中的存储位置;根据第二目标条带组的序号从多个条带组中确定第二目标条带组,并读取第二目标条带组中目标位置存储的数据,得到待读取数据。
采用本发明实施例,提供了一种数据存储的方案:将待存储数据依次存储至多个条带组的第一存储区中,并将每个第一存储区中已存储数据的校验数据存储至对应条带组的第二存储区中,其中,每个条带组的存储空间中包括第一存储区和第二存储区;在多个条带组中的第一目标条带组的第一存储区中存在剩余空间的情况下,采用多个无效数据存填充剩余空间,并将多个无效数据的数据量信息存储至第一目标条带组中的第二存储区中,其中,第一目标条带组存储有待存储数据的尾部数据。通过将待存储数据及其原数据统一存储在数据节点中,达到了提高数据存储可靠性的目的,进而解决了相关技术中,在线纠删码技术中采用数据节点和元数据节点分别存储数据以及数据的元信息,数据存储可靠性低的技术问题。
本领域普通技术人员可以理解,图7所示的结构仅为示意,计算机终端也可以是智能手机(如Android手机、iOS手机等)、平板电脑、掌声电脑以及移动互联网设备(MobileInternet Devices,MID)、PAD等终端设备。图7其并不对上述电子装置的结构造成限定。例如,计算机终端10还可包括比图7中所示更多或者更少的组件(如网络接口、显示装置等),或者具有与图7所示不同的配置。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(Read-Only Memory,ROM)、随机存取器(RandomAccess Memory,RAM)、磁盘或光盘等。
实施例6
本发明的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于保存上述实施例一所提供的数据存储方法以及数据读取方法所执行的程序代码。
可选地,在本实施例中,上述存储介质可以位于计算机网络中计算机终端群中的任意一个计算机终端中,或者位于移动终端群中的任意一个移动终端中。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:将待存储数据依次存储至多个条带组的第一存储区中,并将每个第一存储区中已存储数据的校验数据存储至对应条带组的第二存储区中,其中,每个条带组的存储空间中包括第一存储区和第二存储区;在多个条带组中的第一目标条带组的第一存储区中存在剩余空间的情况下,采用多个无效数据存填充剩余空间,并将多个无效数据的数据量信息存储至第一目标条带组中的第二存储区中,其中,第一目标条带组存储有待存储数据的尾部数据。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:确定待读取数据的读取位置,并基于读取位置确定读取偏移量;计算读取偏移量与每个条带组的第一存储区大小的商值,并基于商值确定第二目标条带组的序号,其中,第二目标条带组为多个条带组中存储待读取数据的条带组;计算读取偏移量与每个条带组的第一存储区的大小的余数,并基于余数确定目标存储位置,其中,目标存储位置为待读取数据在第二目标条带组中的存储位置;根据第二目标条带组的序号从多个条带组中确定第二目标条带组,并读取第二目标条带组中目标位置存储的数据,得到待读取数据。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。