本发明涉及存储技术领域,尤其涉及一种数据存储的方法及装置。
背景技术:
分布式存储系统一般都会采用一定的冗余策略,以避免由于分布式系统中经常出现各种各样的故障,导致的数据丢失问题。例如,常见的冗余策略可以包括多副本算法和纠删码(英文:Erasure Code,简称:EC)算法。
其中,多副本算法是指将原始数据存储多个备份,即使系统发生故障,只要系统中保存有至少一份该数据的备份文件,该数据便不会丢失。EC算法是指将原始数据切分成k个小原始数据块,k≥2,然后根据这k个小原始数据块计算出m个小校验数据块m≥1,存储k个小原始数据块和m个小校验数据块。即使系统发生故障,只要系统中保存有至少k+n个小数据块,0≤n≤m,便可以还原得到原始数据。
并且,在使用过程中,系统很有可能会对上述原始数据进行多次修改,每次修改后会存储一个版本的数据。当然,还会通过多副本对最新版本的数据进行备份,或者通过EC对最新版本的数据进行数据块划分,计算校验数据块,然后存储划分得到的小数据块和校验数据块。
如此,上述多副本、多版本的数据存储则会占用较大的存储空间。虽然现有技术中可以通过数据缩减技术,来避免冗余数据对存储空间的占用;但是,现有的数据缩减技术并不能够与上述冗余策略在存储系统中兼容使用,即不能在执行冗余策略的同时,使用数据缩减技术减少冗余数据对存储空间的占用。
技术实现要素:
本发明的实施例提供一种数据存储的方法及装置,可以在执行冗余策略的同时,使用数据缩减技术减少冗余数据对存储空间的占用。
为达到上述目的,本发明的实施例采用如下技术方案:
第一方面,提供一种数据存储的方法,存储空间中存储有原始数据的至少一个版本数据组,该至少一个版本数据组中的每个版本数据组中包含至少两个子数据,每个版本数据组中的子数据是原始数据不同版本的数据,该至少一个版本数据组中各个版本数据组中的子数据一一对应。至少两个子数据是采用EC算法划分原始数据得到的,或者,至少两个子数据是修改至少两个子数据所在版本数据组的上一版本数据组中对应子数据得到的,或者,至少两个子数据中的每个子数据为原始数据的一个副本数据。该数据存储的方法包括:在获得第一子数据后,计算第一子数据与第二子数据的差异值;第一子数据为新版本数据组中的一个子数据,第二子数据为新版本数据组的上一版本数据组中、与第一子数据对应子数据;若第一子数据与第二子数据的差异值小于或等于第一差异阈值,则在存储所述新版本数据组时,仅存储第一子数据与第二子数据的差别数据,第一子数据与第二子数据的差别数据为第一子数据与第二子数据相比、第一子数据中已修改的数据的大小,或者,若第一子数据与第二子数据的差异值大于第一差异阈值,则在存储新版本数据组时,存储第一子数据。
其中,存储空间中可以存储至少两个版本数据组,如上述至少一个版本数据组和新版本数据组,即可以执行冗余策略进行原始数据的备份。并且,还可以在第一子数据(即新版本数据组的任一子数据)与第二子数据(即新版本数据组的上一版本数据组中、与第一子数据对应子数据)的差异值小于或等于第一差异阈值(即第一子数据与第二子数据之间的差别较大)时,才直接存储第一子数据;而当第一子数据与第二子数据的差异值小于或等于第一差异阈值(即第一子数据与第二子数据之间的差别较小)时,第一子数据与第二子数据的差别数据的大小远远小于第一子数据的大小,此时,仅存储第一子数据与第二子数据的差别数据可以减少新版本数据组对存储空间的占用。即通过本方案可以在执行冗余策略的同时,使用数据缩减技术减少冗余数据对存储空间的占用。
可以想到的是,在本发明实施例的第一种应用场景中,可以采用EC算法进行原始数据的备份。在第一种应用场景中,上述版本数据组中包含的至少两个子数据可以是采用EC算法划分原始数据得到的,或者,上述版本数据组中包含的至少两个子数据可以是修改该至少两个子数据所在版本数据组的上一版本数据组中对应子数据得到的。
示例性的,若一版本数据组为原始数据的第一个版本数据组,那么该第一个版本数据组中包含的子数据则可以是采用EC算法划分原始数据得到的;若一版本数据组为原始数据的第k个版本数据组,k≥2,那么该第k个版本数据组中包含的子数据则可以是修改第k-1个版本数据组中对应的子数据得到的。
在本发明实施例的第二种应用场景中,可以采用多副本算法进行原始数据的备份。在第二种应用场景中,上述版本数据组中包含的至少两个子数据可以是修改该至少两个子数据所在版本数据组的上一版本数据组中对应子数据得到的,或者,上述至少两个子数据中的每个子数据为原始数据的一个副本数据。
示例性的,若一版本数据组为原始数据的第一个版本数据组,那么该第一个版本数据组中包含的每一个子数据都是原始数据的一个副本数据;若一版本数据组为原始数据的第k个版本数据组,k≥2,那么该第k个版本数据组中包含的子数据则可以是修改第k-1个版本数据组中对应的子数据得到的。
需要说明的是,第一种应用场景中,每一个版本数据组中子数据都仅仅是原始数据或者修改后的原始数据的一部分,而第二种应用场景中,每一个版本数据组中的子数据是原始数据的一个副本或者修改后的原始数据的一个副本。采用第一种应用场景中的任一个本数据组中一个子数据不可能还原得到原始数据或者修改后的原始数据,而采用第二种应用场景中的任一个本数据组中一个子数据都可以还原得到原始数据或者修改后的原始数据。
在本发明实施例的一种实现方式中,上述第一种应用场景中的每一个版本数据组中还可以包含至少一个校验数据块,该至少一个校验数据块是采用EC算法根据该版本数据组中包含的至少两个子数据计算得到的。其中,由于每一个版本数据组中的子数据都可能不同,那么采用EC算法,根据不同版本数据组中包含的至少两个子数据计算得到的至少一个校验数据块在很大程度上也是不同的,因此在本发明实施例中,可以直接存储新版本数据组中的至少一个校验数据块,而不需要将新版本数据组中的校验数据块与新版本数据组的上一版本数据组中对应的校验数据块进行对比。具体的,本发明实施例的方法还可以包括:在存储新版本数据组时,直接存储该新版本数据组中的至少一个校验数据块。
可以想到的是,与上述至少一个版本数据组中的至少一个校验数据块类似,该新版本数据组中的至少一个校验数据块是采用EC算法,根据新版本数据组中包含的至少两个子数据计算得到的。
本方案中,考虑到了采用EC算法根据每个版本数据组中包含的至少两个子数据计算得到的校验数据块不尽相同,由此直接存储计算得到的校验数据块,而不进行额外的对比操作,可以简化数据存储操作,提高存储效率。
在本发明实施例的一种实现方式中,在存储各个版本数据组后,为了便于查找各个版本数据组中的子数据,本发明实施例还可以在存储空间中保存上述原始数据的索引信息。其中,该原始数据的索引信息中可以包含上述至少一个版本数据组中每个版本数据组的索引信息,每个版本数据组的索引信息中包含该版本数据组中至少两个子数据中的每个子数据的索引记录。当然,还可以针对每个子数据,分别建立每个子数据的索引信息。
在本发明实施例的一种实现方式中,可以通过链式部分索引的方式记录每个子数据的索引记录。在该实现方式中,每个子数据的索引记录中包含该子数据的数据索引和第一索引链接,该第一索引链接为该子数据的存储地址与上一版子数据的存储地址的索引链接,该上一版子数据为该子数据所在版本数据组的上一版本数据组中对应子数据。其中,该子数据的数据索引指向该子数据的存储地址。
本发明实施例采用这种实现方式,一方面可以记录新版本数据组中的每个子数据的数据索引(指向该子数据的存储地址的索引),以便于可以根据子数据的数据索引快速查找到对应的子数据。另一方面,可以通过将新版本数据组中的每个子数据的存储地址与对应上一版子数据的存储地址的索引链接(第一索引链接),将该子数据与对应上一版子数据联系起来,如此,对于新版本数据组的一个子数据而言,如果在保存该子数据时仅保存了该子数据与对应上一版本子数据的差别数据,则可以直接根据该第一索引链接查找到对应上一版本子数据,然后根据该对应上一版本子数据和该子数据与对应上一版本子数据的差别数据,还原得到该子数据。
在本发明实施例的第二种实现方式中,可以通过全局索引的方式记录每个子数据的索引记录。即每个子数据的索引记录中包含该子数据的数据索引。其中,该子数据的数据索引指向该子数据的存储地址。相应的,在上述“存储第一子数据与第二子数据的差别数据或者存储第一子数据”之后,本发明实施例的方法还可以包括:生成第一子数据的索引记录。其中,第一子数据的索引记录中包含第一子数据的数据索引和第一子数据的存储地址与第二子数据的存储地址的索引链接,或者,第一子数据的索引记录中包含第一子数据的数据索引。其中,第一子数据的数据索引指向第一子数据的存储地址。
其中,在存储了第一子数据或者第一子数据与第二子数据的差别数据后,可以通过链式部分索引或者全局索引的方式记录每个子数据的索引记录,以便于可以快速查找到各个版本数据组中的子数据。
可选的,本发明实施例中可以采用以下方式来计算第一子数据与第二子数据的差异值:
方式一:计算第一子数据与第二子数据的差别数据的大小,第一子数据与第二子数据的差别数据的大小为第一子数据与第二子数据的差异值;
方式二:计算第一子数据与第二子数据的差别数据的大小,计算差别数据的大小与第一子数据的大小的比值,该比值为第一子数据与第二子数据的差异值。
本发明实施例中,无论是第一子数据与第二子数据相比、第一子数据中已修改的数据的大小(简称为:修改数据的大小),还是修改数据的大小与第一子数据的大小的比值,都可以为第一子数据与第二子数据的差异值。
优选的,在数据存储后的数据处理过程中,为了减少读取数据过程中的输入输出(英文:Input/Output,简称:IO)个数,可以在存储空间中的版本数据组满足一定条件时,将空间中存储的、原始数据的各个版本数据组中的对应子数据连续存储。
具体的,本发明实施例的方法还可以包括:若N大于或等于预设版本阈值,则将存储空间中存储的、原始数据的各个版本数据组中的对应子数据连续存储。其中,N用于表示原始数据的版本数据组的个数。
可以想到的是,当一个原始数据的版本数据组的个数N大于或等于预设版本阈值时,则表示存储空间中当前存储了该原始数据较多的版本数据组。这些较多的版本数据组中的每个版本数据组中可能存储的是子数据,还有可能仅存储了该版本数据组中子数据与该版本数据组的上一版本数据组中对应子数据的差别数据,而当版本数据组中包含了差别数据时,要进行数据还原则不仅需要读取当前版本数据组中的子数据(子数据和差别数据),还需要读取当前版本数据组的上一版本数据组中对应子数据;如此,若N越大,需要读取的版本数据组的个数则越多,若各个版本数据组中对应子数据都是分开存储的,则需要较多的IO读取可能才可以实现数据的还原。本方案中,若N大于或等于预设版本阈值,则可以将存储空间中存储的、原始数据的各个版本数据组中的对应子数据连续存储,如此便可以减少读取IO的个数。
或者,本发明实施例的方法还可以包括:若小于或等于第三差异阈值,则将存储空间中存储的、原始数据的各个版本数据组中的对应子数据连续存储。
或者,本发明实施例的方法还可以包括:若小于或等于第四差异阈值,则将存储空间中存储的、原始数据的各个版本数据组中的对应子数据连续存储。
其中,N用于表示原始数据的版本数据组的个数,Di,j+1用于表示原始数据的第j+1个版本数据组中第i个子数据的大小,Di,j用于表示原始数据的第j个版本数据组中第i个子数据的大小,Di,N用于表示原始数据的第N个版本数据组中第i个子数据的大小,i∈[1,M],M用于表示原始数据的任一版本数据组中包含的子数据的个数,M≥2,原始数据的任一版本数据组中包含的子数据的个数相同。
在本发明实施例中,如果一个新版本数据组的子数据与该新版本数据组的上一版本数据组中的对应子数据的差异值较小时,在存储该新版本数据组时,仅会存储该新版本数据组的子数据与该新版本数据组的上一版本数据组中的对应子数据的差别数据;而针对一个子数据而言,当新版本数据组中未存储该子数据,而是存储了该子数据与该新版本数据组的上一版本数据组中的对应子数据的差别数据时,如果要通过该新版本数据组进行数据还原,则不仅需要读取该新版本数据组中的所有子数据和差别数据,还需要读取该新版本数据组的上一版本数据组中与该差别数据对应子数据。
在本方案中,若小于或等于第三差异阈值,或者,若小于或等于第四差异阈值,则表示各个版本数据组中的对应子数据的差异值较小,即各个版本数据组中的对应子数据的差别数据较小。当上述各个版本数据组中的对应子数据的差别数据均较小时,则表示如果要通过该新版本数据组进行数据还原,则不仅需要读取该新版本数据组的上一版本数据组中与该差别数据对应子数据,可能还需要读取更多版本数据组中对应的子数据。此时,若上述各个版本数据组中对应子数据是分开存储的,则需要较多的IO读取可能才可以实现数据的还原。
通过本方案,可以在小于或等于第三差异阈值或者小于或等于第四差异阈值时,将存储空间中存储的、原始数据的各个版本数据组中的对应子数据连续存储;如此,即使要读取多个版本数据组中对应的子数据,由于这些子数据都是连续存储的,也只需要进行一次IO的读取操作,减少了读取IO的次数。
第二方面,提供一种数据存储的装置,包括:存储模块和计算模块。其中,存储模块包括存储空间,存储空间中存储有原始数据的至少一个版本数据组,至少一个版本数据组中的每个版本数据组中包含至少两个子数据,每个版本数据组中的子数据是原始数据不同版本的数据,至少一个版本数据组中各个版本数据组中的子数据一一对应;至少两个子数据是采用纠删码EC算法划分原始数据得到的,或者,至少两个子数据是修改至少两个子数据所在版本数据组的上一版本数据组中对应子数据得到的,或者,至少两个子数据中的每个子数据为原始数据的一个副本数据。计算模块,在获得第一子数据后,计算第一子数据与第二子数据的差异值;第一子数据为新版本数据组中的一个子数据,第二子数据为新版本数据组的上一版本数据组中、与第一子数据对应子数据。存储模块,还用于:若计算模块计算得到第一子数据与第二子数据的差异值小于或等于第一差异阈值,则在存储新版本数据组时,仅存储第一子数据与第二子数据的差别数据,第一子数据与第二子数据的差别数据为第一子数据与第二子数据相比、第一子数据中已修改的数据的大小,或者,若计算模块计算得到第一子数据与第二子数据的差异值大于第一差异阈值,则在存储新版本数据组时,存储第一子数据。
在一种可能的实现方式中,至少两个子数据是采用EC算法划分原始数据得到的,或者,至少两个子数据是修改至少两个子数据所在版本数据组的上一版本数据组中对应子数据得到的;每个版本数据组中还包含至少一个校验数据块,至少一个校验数据块是采用EC算法根据该版本数据组中包含的至少两个子数据计算得到的;存储模块,还用于在存储新版本数据组时,直接存储新版本数据组中的至少一个校验数据块;其中,新版本数据组中的至少一个校验数据块是采用EC算法,根据新版本数据组中包含的至少两个子数据计算得到的。
在一种可能的实现方式中,存储空间中还存储有原始数据的索引信息,原始数据的索引信息中包含至少一个版本数据组中每个版本数据组的索引信息;每个子数据的索引记录中包含该子数据的数据索引和第一索引链接,第一索引链接为该子数据的存储地址与上一版子数据的存储地址的索引链接,上一版子数据为该子数据所在版本数据组的上一版本数据组中对应子数据,或者,每个子数据的索引记录中包含该子数据的数据索引;其中,该子数据的数据索引指向该子数据的存储地址。
在一种可能的实现方式中,上述数据存储的装置,还可以包括:生成模块。生成模块,用于在存储模块存储第一子数据与第二子数据的差别数据或者存储第一子数据之后,生成第一子数据的索引记录;其中,第一子数据的索引记录中包含第一子数据的数据索引和第一子数据的存储地址与第二子数据的存储地址的索引链接,或者,第一子数据的索引记录中包含第一子数据的数据索引;其中,第一子数据的数据索引指向第一子数据的存储地址。
在一种可能的实现方式中,计算模块,具体用于:计算第一子数据与第二子数据的差别数据的大小,第一子数据与第二子数据的差别数据的大小为第一子数据与第二子数据的差异值;或者,计算第一子数据与第二子数据的差别数据的大小,计算差别数据的大小与第一子数据的大小的比值,比值为第一子数据与第二子数据的差异值。
在一种可能的实现方式中,存储模块,还用于:若N大于或等于预设版本阈值,则将存储空间中存储的、原始数据的各个版本数据组中的对应子数据连续存储;或者,若小于或等于第三差异阈值,则将存储空间中存储的、原始数据的各个版本数据组中的对应子数据连续存储;或者,若小于或等于第四差异阈值,则将存储空间中存储的、原始数据的各个版本数据组中的对应子数据连续存储。
其中,N用于表示原始数据的版本数据组的个数,Di,j+1用于表示原始数据的第j+1个版本数据组中第i个子数据的大小,Di,j用于表示原始数据的第j个版本数据组中第i个子数据的大小,Di,N用于表示原始数据的第N个版本数据组中第i个子数据的大小,i∈[1,M],M用于表示原始数据的任一版本数据组中包含的子数据的个数,M≥2,原始数据的任一版本数据组中包含的子数据的个数相同。
第三方面,提供一种数据存储的装置,包括:一个或多个处理器、存储器、总线和通信接口。存储器中包括存储空间,存储空间中存储有原始数据的至少一个版本数据组,至少一个版本数据组中的每个版本数据组中包含至少两个子数据,每个版本数据组中的子数据是原始数据不同版本的数据,至少一个版本数据组中各个版本数据组中的子数据一一对应;至少两个子数据是采用纠删码EC算法划分原始数据得到的,或者,至少两个子数据是修改至少两个子数据所在版本数据组的上一版本数据组中对应子数据得到的,或者,至少两个子数据中的每个子数据为原始数据的一个副本数据;存储器还用于存储计算机执行指令,处理器与存储器通过总线连接,当数据存储的装置运行时,处理器执行存储器存储的计算机执行指令,以使数据存储的装置执行如第一方面及其各种可选方式所述的数据存储的方法。
第四方面,提供一种计算机可读存储介质,该计算机可读存储介质中存储有一个或多个程序,该一个或多个程序包括指令,当数据存储的装置的处理器执行所述指令时,数据存储的装置执行如第一方面及其各种可选方式所述的数据存储的方法。
需要说明的是,本发明实施例中第二方面和第三方面中的数据存储的装置中各个功能模块的具体描述及其技术效果可参见上述第一方面及其各种可选方式中的相关描述,此处不再赘述。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种版本数据组的实例示意图;
图2为本发明实施例提供的另一种版本数据组的实例示意图;
图3为本发明实施例提供的一种数据存储的方法流程图;
图4为本发明实施例提供的另一种版本数据组的实例示意图;
图5为本发明实施例提供的另一种版本数据组的实例示意图;
图6为本发明实施例提供的另一种版本数据组的实例示意图;
图7为本发明实施例提供的另一种数据存储的方法流程图;
图8为本发明实施例提供的另一种数据存储的方法流程图;
图9为本发明实施例提供的一种数据存储的装置的结构组成示意图;
图10为本发明实施例提供的一种数据存储的装置的结构组成示意图;
图11为本发明实施例提供的一种数据存储的装置的结构组成示意图。
具体实施方式
在本发明的描述中,除非另有说明,“至少两个“或“多个”的含义是指两个或两个以上。例如,至少两个硬盘是指两个或两个以上硬盘,多个处理器是指两个或两个以上处理器。
此外,本发明的描述中所提到的术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括其他没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、接口、技术之类的具体细节,以便透切理解本发明。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本发明。在其它情况中,省略对众所周知的装置、电路以及方法的详细说明,以免不必要的细节妨碍本发明的描述。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行详细地描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部实施例。
本发明实施例提供的数据存储的方法及装置可以应用于分布式存储系统执行冗余策略的过程中,具体的,应用于为了避免由于分布式系统中经常出现各种各样的故障,导致的数据丢失问题,而进行的数据备份的过程中。本发明实施例的方法可以在执行冗余策略的同时,减少冗余数据对存储空间的占用。
其中,在本发明实施例提供的数据存储的方法中,所使用的冗余策略可以包括多副本算法和EC算法。
在本发明实施例中,上述多副本算法具体可以为多版本的多副本算法,即针对原始数据的一个副本,可以存储其多个版本的数据。EC算法也可以为多版本的EC算法,即在将原始数据划分为多个子数据块,并采用EC算法根据该多个子数据块生成至少一个校验数据块后,如果修改了该多个子数据块中的任一个子数据块,则可以存储修改后的一个新版本数据,该新版本数据中可以包括上述多个子数据块中每一个子数据块对应的修改后的子数据块,以及采用EC算法根据所有修改后的子数据块生成至少一个新的校验数据块。
本发明实施例中,将原始数据的每一个版本的数据确定为一个版本数据组。存储空间中存储有原始数据的至少一个版本数据组,该至少一个版本数据组中的每个版本数据组中包含至少两个子数据,每个版本数据组中的子数据是原始数据不同版本的数据,该至少一个版本数据组中各个版本数据组中的子数据一一对应。
在第一种应用场景中,上述版本数据组中包含的至少两个子数据可以是采用EC算法划分原始数据得到的,或者,上述版本数据组中包含的至少两个子数据可以是修改该至少两个子数据所在版本数据组的上一版本数据组中对应子数据得到的。
示例性的,若一版本数据组为原始数据的第一个版本数据组,那么该第一个版本数据组中包含的子数据则可以是采用EC算法划分原始数据得到的;若一版本数据组为原始数据的第k个版本数据组,k≥2,那么该第k个版本数据组中包含的子数据则可以是修改第k-1个版本数据组中对应的子数据得到的。
举例来说,采用Xi,j表示原始数据的第j个版本数据组中第i个子数据,i∈[1,M],M≥2,M用于表示原始数据的任一版本数据组中包含的子数据的个数,原始数据的任一版本数据组中包含的子数据的个数相同,j≤N,N用于表示原始数据的版本数据组的个数。
若i∈[1,2],j=1,那么X1,1和X2,1则为采用EC算法划分原始数据得到的两个子数据。若i∈[1,2],j=2,那么第二个版本数据组中第一个子数据X1,2则为修改第一个版本数据组中第一个子数据X1,1得到的,第二个版本数据组中第二个子数据X2,2为修改第一个版本数据组中第二个子数据X2,1得到的。
请参考图1,图1中以采用EC算法将原始数据划分为两个子数据X1,1和X2,1为例,对上述多版本的EC算法、版本数据组以及版本数据组中的子数据进行说明:
如图1所示,第一个版本数据组中的子数据包括:X1,1和X2,1;第二个版本数据组中的子数据包括:X1,2和X2,2;第三个版本数据组中的子数据包括:X1,3和X2,3;第四个版本数据组中的子数据包括:X1,4和X2,4。
其中,X1,2则为修改第一个版本数据组中第一个子数据X1,1得到的,X2,2为修改第一个版本数据组中第二个子数据X2,1得到的;X1,3则为修改第一个版本数据组中第一个子数据X1,2得到的,X2,3为修改第一个版本数据组中第二个子数据X2,2得到的;X1,4则为修改第一个版本数据组中第一个子数据X1,3得到的,X2,4为修改第一个版本数据组中第二个子数据X2,3得到的。
需要说明的是,如图1所示,本发明实施例第一种应用场景中的子数据即为上述子数据块,校验数据即为上述校验数据块。
在本发明实施例的第二种应用场景中,可以采用多副本算法进行原始数据的备份。
在第二种应用场景中,上述版本数据组中包含的至少两个子数据可以是修改该至少两个子数据所在版本数据组的上一版本数据组中对应子数据得到的,或者,上述至少两个子数据中的每个子数据为原始数据的一个副本数据。
示例性的,若一版本数据组为原始数据的第一个版本数据组,那么该第一个版本数据组中包含的每一个子数据都是原始数据的一个副本数据;若一版本数据组为原始数据的第k个版本数据组,k≥2,那么该第k个版本数据组中包含的子数据则可以是修改第k-1个版本数据组中对应的子数据得到的。
举例来说,采用Yi,j表示原始数据的第j个版本数据组中第i个子数据,i∈[1,M],M≥2,M用于表示原始数据的任一版本数据组中包含的子数据的个数,原始数据的任一版本数据组中包含的子数据的个数相同,j≤N,N用于表示原始数据的版本数据组的个数。
若i∈[1,2],j=1,那么Y1,1和Y2,1则为分别为原始数据的两个副本,Y1,1和Y2,1完全相同。若i∈[1,2],j=2,那么第二个版本数据组中第一个子数据Y1,2则为修改第一个版本数据组中第一个子数据(即第一个副本)Y1,1得到的,第二个版本数据组中第二个子数据Y2,2为修改第一个版本数据组中第二个子数据(即第二个副本)Y2,1得到的。由于Y1,1和Y2,1完全相同,因此,Y2,1和Y2,2也完全相同。
可以想到的是,在第二种应用场景中,每个版本数据组中的子数据都是该原始数据或者修改后原始数据的一个副本。
请参考图2,此处以2副本模式(即系统中存储原始数据的2个副本)为例,对上述多副本算法、版本数据组以及版本数据组中的子数据进行说明:
如图2所示,第一个版本数据组中的子数据包括:Y1,1和Y2,1;第二个版本数据组中的子数据包括:Y1,2和Y2,2;第三个版本数据组中的子数据包括:Y1,3和Y2,3;第四个版本数据组中的子数据包括:Y1,4和Y2,4。
其中,Y1,2为修改第一个版本数据组中第一个子数据(即第一个副本)Y1,1得到的,Y2,2为修改第一个版本数据组中第二个子数据(即第二个副本)Y2,1得到的;由于Y1,1和Y2,1完全相同,因此,Y2,1和Y2,2也完全相同。Y1,3为修改第一个版本数据组中第一个子数据(即第一个副本)Y1,2得到的,Y2,3为修改第一个版本数据组中第二个子数据(即第二个副本)Y2,2得到的;由于Y2,1和Y2,2完全相同,因此,Y1,3和Y2,3也完全相同。Y1,4为修改第一个版本数据组中第一个子数据(即第一个副本)Y1,3得到的,Y2,4为修改第一个版本数据组中第二个子数据(即第二个副本)Y2,3得到的;由于Y1,3和Y2,3完全相同,因此,Y1,4和Y2,4也完全相同。
需要强调的是,第一种应用场景中,每一个版本数据组中子数据都仅仅是原始数据或者修改后的原始数据的一部分;而第二种应用场景中,每一个版本数据组中的子数据是原始数据的一个副本或者修改后的原始数据的一个副本。采用第一种应用场景中的任一个本数据组中一个子数据不可能还原得到原始数据或者修改后的原始数据,而采用第二种应用场景中的任一个本数据组中一个子数据都可以还原得到原始数据或者修改后的原始数据。
下面结合附图,通过具体的实施例及其应用场景对本发明实施例提供的一种初始化网卡的方法及装置进行详细地说明。
本发明实施例提供一种数据存储的方法,如图3所示,该数据存储的方法包括:
S301、数据存储的装置在获得第一子数据后,计算第一子数据与第二子数据的差异值。
其中,上述第一子数据为新版本数据组中的一个子数据,第二子数据为新版本数据组的上一版本数据组中、与第一子数据对应子数据。
示例性的,假设如图1所示的第四个版本数据组为新的版本数据组,则第一子数据可以为如图1所示的第四个版本数据组中的第一个子数据X1,4或者第二个子数据X2,4中的任一个。第三个版本数据组为第四个版本数据组的上一版本数据组。当第一子数据为X1,4时,第二子数据为第三个版本数据组中的第一个数据X1,3;当第一子数据为X2,4时,第二子数据为第三个版本数据组中的第一个数据X2,3。
其中,第一子数据与第二子数据的差异值具体可以为:第一子数据与第二子数据的差别数据的大小;或者,第一子数据与第二子数据的差异值具体可以为差别数据(第一子数据与第二子数据的差别数据)的大小与第一子数据的大小的比值。
需要说明的是,本发明实施例中第一子数据与所述第二子数据的差别数据为第一子数据与第二子数据相比、第一子数据中已修改的数据的大小。
具体的,S301中数据存储的装置计算第一子数据与第二子数据的差异值的方法可以包括:计算第一子数据与第二子数据的差别数据的大小,第一子数据与第二子数据的差别数据的大小为第一子数据与第二子数据的差异值;或者,计算第一子数据与第二子数据的差别数据的大小,计算差别数据的大小与第一子数据的大小的比值,该比值为第一子数据与第二子数据的差异值。
示例性的,本发明实施例这里以第一子数据为X1,4,第二子数据为X1,3为例。数据存储的装置计算X1,4与X1,3的差异值的方法包括:数据存储的装置可以比较计算X1,4与X1,3的差别数据的大小,X1,4与X1,3的差别数据的大小则为X1,4与X1,3的差异值;或者,数据存储的装置可以比较计算X1,4与X1,3的差别数据的大小,并计算该差别数据的大小与第一子数据的大小的比值,该比值为X1,4与X1,3的差异值。
S302、若第一子数据与第二子数据的差异值小于或等于第一差异阈值,数据存储的装置则在存储新版本数据组时,仅存储第一子数据与第二子数据的差别数据。
S303、若第一子数据与第二子数据的差异值大于第一差异阈值,数据存储的装置则在存储新版本数据组时,存储第一子数据。
示例性的,在本发明实施例的第一种应用场景中,如图4所示,采用矩形表示图1所示的子数据,采用三角形表示图1所示的一个版本数据组中的子数据源与该版本数据组的上一版本数据组中对应子数据的差别数据。
以第一子数据为X2,4,第二子数据为X2,3为例,当X2,4与X2,3的差异值小于或等于第一差异阈值时,如图4所示,数据存储的装置则可以在存储新版本数据组时,仅存储X2,4与X2,3的差别数据。数据存储的装置后续可以根据第四个版本数据组中X2,4与X2,3的差别数据和第三个版本数据组中的X2,3,还原出X2,4。
以第一子数据为X1,4,第二子数据为X1,3为例,当X1,4与X1,3的差异值小于或等于第一差异阈值时,如图4所示,数据存储的装置则可以在存储新版本数据组时,仅存储X1,4与X1,3的差别数据。
可以想到的是,由于第三个版本数据组中存储的也只是X1,3与X1,2的差别数据,第二个版本数据组中存储的也只是X1,2与X1,1的差别数据;因此,要还原出X1,4,则需要先根据第二个版本数据组中X1,2与X1,1的差别数据和第一个版本数据组中的X1,1,还原出X1,2,再根据还原得到的X1,2和第三个版本数据组中X1,3与X1,2的差别数据,还原出X1,3。然后,才可以根据还原得到的X1,3和第四个版本数据组X1,4与X1,3的差别数据,还原出X1,4。
如图4所示,以第一子数据为X2,3,第二子数据为X2,2为例,当X2,3与X2,2的差异值大于第一差异阈值时,如图4所示,数据存储的装置则可以在存储新版本数据组时,直接存储该第一子数据X2,3。
示例性的,在本发明实施例的第二种应用场景中,如图5所示,采用矩形表示图2所示的子数据,采用三角形表示图2所示的一个版本数据组中的子数据源与该版本数据组的上一版本数据组中对应子数据的差别数据。
以第一子数据为Y1,4,第二子数据为Y1,3为例,当Y1,4与Y1,3的差异值小于或等于第一差异阈值时,如图5所示,数据存储的装置则可以在存储新版本数据组时,仅存储Y1,4与Y1,3的差别数据。数据存储的装置后续可以根据第四个版本数据组中Y1,4与Y1,3的差别数据和第三个版本数据组中的Y1,3,还原出Y1,4。
如图5所示,以第一子数据为Y1,3,第二子数据为Y1,2为例,当Y1,3与Y1,2的差异值大于第一差异阈值时,如图5所示,数据存储的装置则可以在存储新版本数据组时,直接存储该第一子数据Y1,3。
需要说明的是,在本发明实施例的第一种应用场景中,数据存储的装置需要对新版本数据组中的每一个子数据均执行上述S301,以及S302或S303的操作。例如,数据存储的装置需要对如图4所示的第四个版本数据组中的第一子数据X1,4与第一子数据X2,4,分别执行上述S301,以及S302或S303的操作。
而在本发明实施例的第二种应用场景中,由于新版本数据组中包含的所有子数据都是相同的,因此,则只需要对该新版本数据组中的第一个子数据执行上述S301以及S302或S303的操作,然后在存储了第一子数据或者第一子数据与第二子数据的差别数据后,再根据新版本数据组的上一版本数据组中子数据的个数,生成对应个数的该第一子数据或者该差别数据的副本即可。例如,数据存储的装置只需要对如图5所示的第四个版本数据组中的第一子数据Y1,4执行上述S301,以及S302或S303的操作,然后在确定存储第一子数据Y1,4后,生成第一子数据Y1,4的副本Y2,4并存储Y2,4即可。
本发明实施例提供的数据存储的方法,可以获取新版本数据组(如新版本数据组中的第一子数据),即执行冗余策略获得原始数据的新版本。并且,还可以判断第一子数据与第二子数据(即新版本数据组的上一版本数据组中、与第一子数据对应子数据)的差异值是否小于或等于第一差异阈值;仅在第一子数据与第二子数据的差异值大于第一差异阈值(即第一子数据与第二子数据之间的差别较大)时,才直接存储第一子数据;而当第一子数据与第二子数据的差异值小于或等于第一差异阈值(即第一子数据与第二子数据之间的差别较小)时,则仅存储第一子数据与第二子数据的差别数据,如此可以减少新版本数据组对存储空间的占用。
综上而言,通过本方案可以在执行冗余策略的同时,使用数据缩减技术减少冗余数据对存储空间的占用。
进一步的,在本发明实施例的第一种应用场景中,上述每一个版本数据组中还可以包含至少一个校验数据块,该至少一个校验数据块是采用EC算法根据该版本数据组中包含的至少两个子数据计算得到的。
示例性的,此处以采用EC算法,根据如图1所示的每个版本数据组中包含的两个子数据分别生成一个校验数据块为例,对本发明实施例中,版本数据组中包含的至少一个校验数据块进行举例说明:
如图6所示,如图4所示的第一个版本数据组中还可以包含一个校验数据块P1,1,P1,1是采用EC算法,根据第一个版本数据组中包含的X1,1和X2,1生成的校验数据块。
如图6所示,如图4所示的第二个版本数据组中还可以包含一个校验数据块P1,2,P1,2是采用EC算法,根据第二个版本数据组中包含的X1,2和X2,2生成的校验数据块。
如图6所示,如图4所示的第三个版本数据组中还可以包含一个校验数据块P1,3,P1,3是采用EC算法,根据第三个版本数据组中包含的X1,3和X2,3生成的校验数据块。
如图6所示,如图4所示的第四个版本数据组中还可以包含一个校验数据块P1,4,P1,4是采用EC算法,根据第四个版本数据组中包含的X1,4和X2,4生成的校验数据块。
可以想到的是,由于每一个版本数据组中的子数据与其他版本数据组中对应的子数据都可能不同,那么采用EC算法,根据不同版本数据组中包含的至少两个子数据计算得到的至少一个校验数据块在很大程度上也是不同的,因此在本发明实施例中,可以直接存储新版本数据组中的至少一个校验数据块,而不需要将新版本数据组中的校验数据块与新版本数据组的上一版本数据组中对应的校验数据块进行对比。
具体的,如图7所示,本发明实施例的方法还可以包括S304:
S304、数据存储的装置在存储新版本数据组时,直接存储该新版本数据组中的至少一个校验数据块。
示例性的,如图6所示,假设第四个版本数据组为新版本数据组,在存储第四个版本数据组时,可以直接存储第四个版本数据组中的校验数据块P1,4。
当然,针对如图6所示的其他版本数据组,也可以直接存储该版本数据组中的至少一个校验数据块。如图6所示,采用矩形表示存储版本数据组时,直接存储的是该版本数据组中的至少一个校验数据块;而非该版本数据组中的校验数据块与该版本数据组的上一版本数据组中对应校验数据块的差别数据。
本方案中,考虑到了采用EC算法根据每个版本数据组中包含的至少两个子数据计算得到的校验数据块不尽相同,由此直接存储计算得到的校验数据块,而不进行额外的对比操作,可以简化数据存储操作,提高存储效率。
可选的,在存储各个版本数据组后,为了便于查找各个版本数据组中的子数据,本发明实施例还可以在存储空间中保存上述原始数据的索引信息。
其中,该原始数据的索引信息中可以包含上述至少一个版本数据组中每个版本数据组的索引信息,每个版本数据组的索引信息中包含该版本数据组中至少两个子数据中的每个子数据的索引记录。
举例来说,本发明实施例中可以采用表格的方式表示上述原始数据的索引信息。如表1所示,为本发明实施例中的一个原始数据(原始数据a)的索引信息表实例:
表1
示例性的,在本发明实施例的一种实现方式中,可以通过链式部分索引的方式记录每个子数据的索引记录。
在该实现方式中,每个子数据的索引记录中包含该子数据的数据索引和第一索引链接,该第一索引链接为该子数据的存储地址与上一版子数据的存储地址的索引链接,该上一版子数据为该子数据所在版本数据组的上一版本数据组中对应子数据。其中,该子数据的数据索引指向该子数据的存储地址。
示例性的,采用链式部分索引的方式,可以将新版本数据组中的每个子数据与该新版本数据组中对应子数据链接起来,以便于可以根据该子数据的第一索引链接,快速查找到新版本数据组的上一版本数据组中与该子数据对应的子数据。将X2,4的第一索引链接可以将X2,4与X2,3的差别数据与X2,3联系起来,如此,便可以在还原X2,4时,快速的根据其第一索引链接查找到X2,3,可以根据X2,4与X2,3的差别数据和X2,3,还原X2,4。
本方案中采用链式部分索引的方式,不仅可以记录新版本数据组中的每个子数据的数据索引(指向该子数据的存储地址的索引),以便于可以根据子数据的数据索引快速查找到对应的子数据;还可以通过新版本数据组中的每个子数据的存储地址与该新版本数据组的上一版本数据组中对应子数据的存储地址的索引链接(第一索引链接),将该子数据与对应上一版子数据联系起来,如此,对于新版本数据组的一个子数据而言,如果在保存该子数据时仅保存了该子数据与对应上一版本子数据的差别数据,则可以直接根据该第一索引链接查找到对应上一版本子数据,然后根据该对应上一版本子数据和该子数据与对应上一版本子数据的差别数据,还原得到该子数据。
在本发明实施例的另一种实现方式中,可以通过全局索引的方式记录每个子数据的索引记录。即每个子数据的索引记录中包含该子数据的数据索引。其中,该子数据的数据索引指向该子数据的存储地址。
相应的,在上述S302“存储第一子数据与第二子数据的差别数据”或者S303“存储第一子数据”之后,如图8所示,本发明实施例的方法还可以包括S305:
S305、数据存储的装置生成第一子数据的索引记录。
其中,第一子数据的索引记录中包含第一子数据的数据索引和第一子数据的存储地址与第二子数据的存储地址的索引链接,或者,第一子数据的索引记录中包含第一子数据的数据索引。其中,第一子数据的数据索引指向第一子数据的存储地址。
本发明实施例的方法,在存储了第一子数据或者第一子数据与第二子数据的差别数据后,还可以通过链式部分索引或者全局索引的方式记录每个子数据的索引记录,以便于可以快速查找到各个版本数据组中的子数据。
需要说明的是,在本发明实施例中,当上述实施例中存储了第一子数据与第二子数据的差别数据时,上述第一子数据的存储地址具体为:上述存储空间中存储第一子数据与第二子数据的差别数据的地址;当上述实施例中存储了第一子数据时,上述第一子数据的存储地址具体为:上述存储空间中存储该第一子数据的地址。
优选的,在数据存储后的数据处理过程中,为了减少读取数据过程中的IO个数,可以在存储空间中的版本数据组满足一定条件时,将空间中存储的、原始数据的各个版本数据组中的对应子数据连续存储。
具体的,本发明实施例的方法还可以包括S306a、S306b或者S306c:
S306a、若N大于或等于预设版本阈值,数据存储的装置则将存储空间中存储的、原始数据的各个版本数据组中的对应子数据连续存储。其中,N用于表示原始数据的版本数据组的个数。
其中,N用于表示原始数据的版本数据组的个数。
可以想到的是,当一个原始数据的版本数据组的个数N大于或等于预设版本阈值时,则表示存储空间中当前存储了该原始数据较多的版本数据组。这些较多的版本数据组中的每个版本数据组中可能包含子数据,还有可能仅包含该版本数据组中子数据与该版本数据组的上一版本数据组中对应子数据的差别数据。当版本数据组中包含了差别数据时,要进行子数据的还原则不仅需要读取当前版本数据组中的差别数据,还需要读取当前版本数据组的上一版本数据组中对应的子数据;如此,若N越大,需要读取的版本数据组的个数则越多,若各个版本数据组中对应子数据都是分开存储的,则需要较多的IO读取可能才可以实现数据的还原。
通过本方案,在N大于或等于预设版本阈值,可以将存储空间中存储的、原始数据的各个版本数据组中的对应子数据连续存储,如此便可以减少读取IO的个数。
可以想到的是,上述每一个原始数据的索引信息中还可以包含该原始数据的版本个数,一个原始数据的版本个数即为该原始数据的版本数据组的个数N。数据存储的装置可以在存储原始数据的一个新版本数据组后,为该原始数据的版本个数加1。
S306b、若小于或等于第三差异阈值,数据存储的装置则将存储空间中存储的、原始数据的各个版本数据组中的对应子数据连续存储。
S306c、若小于或等于第四差异阈值,数据存储的装置则将存储空间中存储的、原始数据的各个版本数据组中的对应子数据连续存储。
其中,N用于表示原始数据的版本数据组的个数,Di,j+1用于表示原始数据的第j+1个版本数据组中第i个子数据的大小,Di,j用于表示原始数据的第j个版本数据组中第i个子数据的大小,Di,N用于表示原始数据的第N个版本数据组中第i个子数据的大小,i∈[1,M],M用于表示原始数据的任一版本数据组中包含的子数据的个数,M≥2,原始数据的任一版本数据组中包含的子数据的个数相同。
采用本发明实施例的方法,若一个新版本数据组的子数据与该新版本数据组的上一版本数据组中的对应子数据的差异值较小时,在存储该新版本数据组时,仅会存储该新版本数据组的子数据与该新版本数据组的上一版本数据组中的对应子数据的差别数据;而针对一个子数据而言,当新版本数据组中未存储该子数据,而是存储了该子数据与该新版本数据组的上一版本数据组中的对应子数据的差别数据时,如果要通过该新版本数据组进行数据还原,则不仅需要读取该新版本数据组中的所有子数据和差别数据,还需要读取该新版本数据组的上一版本数据组中与该差别数据对应子数据。
在本方案中,若小于或等于第三差异阈值,或者,若小于或等于第四差异阈值,则表示各个版本数据组中的对应子数据的差异值较小,即各个版本数据组中的对应子数据的差别数据较小。
当上述各个版本数据组中的对应子数据的差别数据均较小时,则表示如果要通过该新版本数据组进行数据还原,则不仅需要读取该新版本数据组的上一版本数据组中与该差别数据对应子数据,可能还需要读取更多版本数据组中对应的子数据。此时,若上述各个版本数据组中对应子数据是分开存储的,则需要较多的IO读取可能才可以实现数据的还原。
通过本方案,可以在小于或等于第三差异阈值或者小于或等于第四差异阈值时,将存储空间中存储的、原始数据的各个版本数据组中的对应子数据连续存储;如此,即使要读取多个版本数据组中对应的子数据,由于这些子数据都是连续存储的,也只需要进行一次IO的读取操作,可以减少读取IO的次数。
本发明实施例提供的数据存储的方法,可以获取新版本数据组(如新版本数据组中的第一子数据),即执行冗余策略获得原始数据的新版本。并且,还可以判断第一子数据与第二子数据(即新版本数据组的上一版本数据组中、与第一子数据对应子数据)的差异值是否小于或等于第一差异阈值;仅在第一子数据与第二子数据的差异值大于第一差异阈值(即第一子数据与第二子数据之间的差别较大)时,才直接存储第一子数据;而当第一子数据与第二子数据的差异值小于或等于第一差异阈值(即第一子数据与第二子数据之间的差别较小)时,则仅存储第一子数据与第二子数据的差别数据,如此可以减少新版本数据组对存储空间的占用。即使通过本方案可以在执行冗余策略的同时,使用数据缩减技术减少冗余数据对存储空间的占用。
进一步的,通过本方案还可以对存储空间中保存的数据进行整理,使得个版本数据组中对应的子数据连续存储,从而可以减少读取这些子数据时所需的读取IO的次数。
上述主要介绍了数据存储的装置对各个版本数据组中的数据的存储过程。可以理解的是,数据存储的装置为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的数据存储的装置及算法步骤,本发明能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
本发明实施例可以根据上述方法示例对数据存储的装置进行功能模块或者功能单元的划分,例如,可以对应各个功能划分各个功能模块或者功能单元,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块或者功能单元的形式实现。其中,本发明实施例中对模块或者单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
图9示出了上述实施例中所涉及的数据存储的装置的一种可能的结构示意图。该数据存储的装置900包括:存储模块901和计算模块902。该存储模块901包括:存储空间,存储空间中存储有原始数据的至少一个版本数据组,至少一个版本数据组中的每个版本数据组中包含至少两个子数据,每个版本数据组中的子数据是原始数据不同版本的数据,至少一个版本数据组中各个版本数据组中的子数据一一对应;至少两个子数据是采用纠删码EC算法划分原始数据得到的,或者,至少两个子数据是修改至少两个子数据所在版本数据组的上一版本数据组中对应子数据得到的,或者,至少两个子数据中的每个子数据为原始数据的一个副本数据。上述计算模块902用于进行存储模块901存储新版本数据组中的数据之前的计算。例如,所述计算模块902用于支持图3,图7或图8中的S301和/或用于本文所描述的技术的其它过程。存储模块901还用于根据计算模块902的计算结果进行版本数据组中子数据的存储。例如,所述存储模块901用于支持图3,图7或图8中的S302、S303,图7或图8中的S304和/或用于本文所描述的技术的其它过程。
进一步的,至少两个子数据是采用EC算法划分原始数据得到的,或者,至少两个子数据是修改至少两个子数据所在版本数据组的上一版本数据组中对应子数据得到的;每个版本数据组中还包含至少一个校验数据块,至少一个校验数据块是采用EC算法根据该版本数据组中包含的至少两个子数据计算得到的;存储模块901,还用于在存储新版本数据组时,直接存储新版本数据组中的至少一个校验数据块;其中,新版本数据组中的至少一个校验数据块是采用EC算法,根据新版本数据组中包含的至少两个子数据计算得到的。
进一步的,存储空间中还存储有原始数据的索引信息,原始数据的索引信息中包含至少一个版本数据组中每个版本数据组的索引信息;每个子数据的索引记录中包含该子数据的数据索引和第一索引链接,第一索引链接为该子数据的存储地址与上一版子数据的存储地址的索引链接,上一版子数据为该子数据所在版本数据组的上一版本数据组中对应子数据,或者,每个子数据的索引记录中包含该子数据的数据索引;其中,该子数据的数据索引指向该子数据的存储地址。
进一步的,如图10所示,上述数据存储的装置900还可以包括:生成模块903。生成模块903,用于在存储模块901存储数据后,生成第一子数据的索引记录。其中,第一子数据的索引记录中包含第一子数据的数据索引和第一子数据的存储地址与第二子数据的存储地址的索引链接,或者,第一子数据的索引记录中包含第一子数据的数据索引;其中,第一子数据的数据索引指向第一子数据的存储地址。
在采用集成的单元的情况下,所述生成模块903和计算模块902等可以集成在一个处理单元中实现,该处理单元可以是处理器或控制器,例如可以是CPU,通用处理器,数字信号处理器(英文:Digital Signal Processor,简称:DSP),专用集成电路(英文:Application-Specific Integrated Circuit,简称:ASIC),现场可编程门阵列(英文:Field Programmable Gate Array,简称:FPGA)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本发明公开内容所描述的各种举例说明逻辑方框,模块和电路。所述处理单元也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等等。存储模块901可以是存储器。
当所述处理单元为处理器,所述存储模块为存储器时,本发明实施例所涉及的数据存储的装置可以为图11所示的数据存储的装置1100。
参阅图11所示,所述数据存储的装置1100包括:处理器1101、通信接口1102、存储器1103以及总线1104。其中,所述处理器1101、所述通信接口1102、所述存储器1103通过总线1104相互连接。其中,所述总线1104可以是外设部件互连标准(英文:Peripheral Component Interconnect,简称:PCI)总线或扩展工业标准结构(英文:Extended Industry Standard Architecture,简称:EISA)总线等。所述总线1104可以分为地址总线、数据总线、控制总线等。为便于表示,图11中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
本发明实施例还提供一种非易失性存储介质,该非易失性存储介质中存储有一个或多个程序代码,当所述数据存储的装置1100的处理器1101执行该程序代码时,所述数据存储的装置1100执行图3,图7或图8中任一附图中的相关方法步骤。
其中,本发明实施例提供的所述数据存储的装置1100中各个功能单元或者功能模块的详细描述以及各个功能单元或者功能模块执行图3,图7或图8中任一附图中的相关方法步骤。后所带来的技术效果可以参考本发明方法实施例中的相关描述,此处不再赘述。
结合本发明公开内容所描述的方法或者算法的步骤可以硬件的方式来实现,也可以是由处理器执行软件指令的方式来实现。软件指令可以由相应的软件模块组成,软件模块可以被存放于随机存取存储器(英文:Random Access Memory,简称:RAM)、闪存、只读存储器(英文:Read Only Memory,ROM)、可擦除可编程只读存储器(英文:Erasable Programmable ROM,简称:EPROM)、电可擦可编程只读存储器(英文:Electrically EPROM,简称:EEPROM)、寄存器、硬盘、移动硬盘、只读光盘(CD-ROM)或者本领域熟知的任何其它形式的存储介质中。一种举例说明存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于ASIC中。另外,该ASIC可以位于核心网接口设备中。当然,处理器和存储介质也可以作为分立组件存在于核心网接口设备中。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。