发明内容
有鉴于此,本公开实施例提供一种数据处理方法、装置及电子设备,至少部分解决现有技术中存在的问题。
第一方面,本公开实施例提供了一种数据处理方法,包括:
获取待读取的目标记录的标识,其中,所述目标记录为数据集合中的任一记录;
在预先存储的记录标识与记录存储区域的第一对应关系中,根据所述目标记录的标识,查找所述目标记录的存储区域;
在所述数据集合对应的存储空间中,获取所述目标记录的存储区域内存储的压缩数据,其中,所述压缩数据包括至少一个指针;
根据预设的指针与样本数据的第二对应关系,将所述压缩数据的指针替换为对应的样本数据,得到所述目标记录的全部数据。
根据本公开实施例的一种具体实现方式,所述获取待读取的目标记录的标识的步骤之前,所述方法还包括:
从所述数据集合中抽取样本数据;
创建指针与样本数据的所述第二对应关系;
针对所述数据集合中的每个记录,查找所述记录的全部数据片段和所述样本数据中均存在的目标片段;
基于所述第二对应关系,将所述记录中的所述目标片段替换为所述目标片段对应的指针,得到所述记录的压缩数据;
将所述数据集合的全部记录对应的压缩数据存储到所述数据集合对应的存储空间;
创建所述数据集合的全部记录的记录标识与记录存储区域的所述第一对应关系。
根据本公开实施例的一种具体实现方式,所述创建指针与样本数据的所述第二对应关系的步骤,包括:
利用所抽取的样本数据创建全局字典,其中,所述样本数据中每个数据片段均对应所述全局字典中的一个指针。
根据本公开实施例的一种具体实现方式,所述创建所述数据集合的全部记录的记录标识与记录存储区域的所述第一对应关系的步骤,包括:
创建索引数组,其中,所述索引数组的每个元素包含1个记录的记录标识和记录存储区域。
根据本公开实施例的一种具体实现方式,所述数据集合的记录总量为N,其中,N为大于2的正整数;
所述索引数组的元素总数为(N+1),第i个元素包含第i个记录的记录标识和第i个记录在所述数据集合的存储空间中的起始存储位置,第(N+1)个元素包含所述数据集合对应的存储空间的总长度,i小于或者等于N;
所述在预先存储的记录标识与记录存储区域的第一对应关系中,根据所述目标记录的标识,查找所述目标记录的存储区域的步骤,包括:
在所述索引数组中,根据所述目标记录的标识查找所述目标记录的起始存储位置,和所述目标记录的下一邻接记录的起始存储位置;
将所述目标记录的下一邻接记录的起始存储位置减去所述目标记录的起始存储位置,得到所述目标记录的存储长度;
根据所述目标记录的起始存储位置和所述目标记录的存储长度,确定所述目标记录在所述数据集合的存储空间中的存储区域。
根据本公开实施例的一种具体实现方式,所述查找所述记录的全部数据片段和所述样本数据中均存在的目标片段的步骤,包括:
利用全局匹配算法,查找所述记录的全部数据片段和所述样本数据中均存在的目标片段。
根据本公开实施例的一种具体实现方式,所述基于所述第二对应关系,将所述记录中的所述目标片段替换为所述目标片段对应的指针,得到所述记录的压缩数据的步骤,包括:
判断所述目标片段的实际长度是否大于或者等于第一预设长度;
若所述目标片段的实际长度大于或者等于第一预设长度,将所述记录中的所述目标片段替换为所述目标片段对应的指针。
根据本公开实施例的一种具体实现方式,所述判断所述目标片段的实际长度是否大于或者等于第一预设长度的步骤之后,所述方法还包括:
判断所述目标片段的实际长度是否小于所述第一预设长度且大于或者等于所述第二预设长度,其中,所述第一预设长度大于所述第二预设长度;
若所述目标片段的实际长度小于所述第一预设长度且大于或者等于所述第二预设长度,利用预设的局部压缩算法得到所述记录的编码,作为所述记录的压缩数据;
所述根据预设的指针与样本数据的第二对应关系,将所述压缩数据的指针替换为对应的样本数据,得到所述目标记录的全部数据的步骤还包括:
利用预设的局部解压缩算法解压所述记录的压缩数据,得到所述目标记录的全部数据。
根据本公开实施例的一种具体实现方式,所述判断所述目标片段的实际长度是否小于所述第一预设长度且大于或者等于所述第二预设长度步骤之后,所述方法还包括:
若所述目标片段的实际长度小于所述第二预设长度,将所述目标片段保留在所述记录中,得到所述记录的压缩数据。
根据本公开实施例的一种具体实现方式,所述利用全局匹配算法,查找所述记录的全部数据片段和所述样本数据中均存在的所述目标片段的步骤,包括:
利用双数组前缀树算法和后缀数组算法来查找所述记录的全部数据片段和所述样本数据中均存在的所述目标片段。
根据本公开实施例的一种具体实现方式,所述利用双数组前缀树算法和后缀数组算法来查找所述记录的全部数据片段和所述样本数据中均存在的所述目标片段的步骤,包括:
对后缀数组进行宽度优先遍历,生成前缀树,其中,所述前缀树包含结点关系和压缩路径;
利用所述前缀树,根据所述记录的全部数据片段和所述样本数据,创建双数组前缀树;
利用所述双数组前缀树,查找所述目标片段。
第二方面,本公开实施例提供了一种数据处理装置,包括:
第一获取模块,用于获取待读取的目标记录的标识,其中,所述目标记录为数据集合中的任一记录;
查找模块,用于在预先存储的记录标识与记录存储区域的第一对应关系中,根据所述目标记录的标识,查找所述目标记录的存储区域;
第二获取模块,用于在所述数据集合对应的存储空间中,获取所述目标记录的存储区域内存储的压缩数据,其中,所述压缩数据包括至少一个指针;
替换模块,用于根据预设的指针与样本数据的第二对应关系,将所述压缩数据的指针替换为对应的样本数据,得到所述目标记录的全部数据。
第三方面,本公开实施例还提供了一种电子设备,该电子设备包括:
至少一个处理器;以及,
与该至少一个处理器通信连接的存储器;其中,
该存储器存储有可被该至少一个处理器执行的指令,该指令被该至少一个处理器执行,以使该至少一个处理器能够执行前述第一方面或第一方面的任一实现方式中的数据处理方法。
第四方面,本公开实施例还提供了一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质存储计算机指令,该计算机指令用于使该计算机执行前述第一方面或第一方面的任一实现方式中的数据处理方法。
第五方面,本公开实施例还提供了一种计算机程序产品,该计算机程序产品包括存储在非暂态计算机可读存储介质上的计算程序,该计算机程序包括程序指令,当该程序指令被计算机执行时,使该计算机执行前述第一方面或第一方面的任一实现方式中的数据处理方法。
本公开实施例中的数据处理方案,包括获取待读取的目标记录的标识,其中,所述目标记录为数据集合中的任一记录;在预先存储的记录标识与记录存储区域的第一对应关系中,根据所述目标记录的标识,查找所述目标记录的存储区域;在所述数据集合对应的存储空间中,获取所述目标记录的存储区域内存储的压缩数据,其中,所述压缩数据包括至少一个指针;根据预设的指针与样本数据的第二对应关系,将所述压缩数据的指针替换为对应的样本数据,得到所述目标记录的全部数据。通过本公开实施例的方案,利用记录标识和存储区域建立的第一对应关系来直接查找目标记录的存储区域,并通过指针与样本数据之间的第二对应关系,对压缩数据进行替换操作,进而得到目标记录的全部数据,在此过程中将数据的全局压缩与局部压缩进行结合,在提高系统随机读取的性能的同时,降低了磁盘用量以及降低内存用量,提高了数据读取操作的效率,减少了不必要的解压操作和缓存占用。
具体实施方式
下面结合附图对本公开实施例进行详细描述。
以下通过特定的具体实例说明本公开的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本公开的其他优点与功效。显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。本公开还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本公开的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
需要说明的是,下文描述在所附权利要求书的范围内的实施例的各种方面。应显而易见,本文中所描述的方面可体现于广泛多种形式中,且本文中所描述的任何特定结构及/或功能仅为说明性的。基于本公开,所属领域的技术人员应了解,本文中所描述的一个方面可与任何其它方面独立地实施,且可以各种方式组合这些方面中的两者或两者以上。举例来说,可使用本文中所阐述的任何数目个方面来实施设备及/或实践方法。另外,可使用除了本文中所阐述的方面中的一或多者之外的其它结构及/或功能性实施此设备及/或实践此方法。
还需要说明的是,以下实施例中所提供的图示仅以示意方式说明本公开的基本构想,图式中仅显示与本公开中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
另外,在以下描述中,提供具体细节是为了便于透彻理解实例。然而,所属领域的技术人员将理解,可在没有这些特定细节的情况下实践所述方面。
本公开实施例提供一种数据处理方法。本实施例提供的数据处理方法可以由一计算装置来执行,该计算装置可以实现为软件,或者实现为软件和硬件的组合,该计算装置可以集成设置在服务器、终端、电子设备等中。
参见图1,本公开实施例提供的一种数据处理方法,包括:
S101,获取待读取的目标记录的标识,其中,所述目标记录为数据集合中的任一记录。
本公开实施例提供的数据处理方法,可以应用于数据集合中针对数据记录的读取操作和压缩操作。每个数据集合通常包含几千或者数万条记录,多条记录依序排列,构成一个数据集合。在一个数据集合中,每个记录具有唯一标识,该唯一标识可以包括编号、条目等属性信息。记录的标识可以依据其所在序列的顺序或者数据类型等参数确定,不作限定。
针对数据集合中记录的压缩操作是指,将数据集合中的全部记录按照预设的压缩规则压缩,将每个记录的压缩数据存储在该数据集合对应的存储空间中。针对数据集合中记录的读取操作则可以包括随机读取和顺序读取,随机读取是指根据待读取的记录的编号等标识来直接查找到该标识对应记录的压缩数据,解压得到该记录的全部。顺序读取则是根据待读取的记录的标识来查找该标识对应记录及后续相邻接的几个记录的压缩数据,解压得到该几个相邻记录的全部数据。
若确定需要进行对数据集合中的某一记录执行读取操作,定义该待读取的记录为目标记录,首先可以根据用户输入获取目标记录的标识,例如目标记录在数据集合中的编号。
S102,在预先存储的记录标识与记录存储区域的第一对应关系中,根据所述目标记录的标识,查找所述目标记录的存储区域。
数据集合对应有一个存储空间,该数据集合中的全部记录的数据均存储在该存储空间内,每条记录的数据占用该存储空间内的一定存储区域。具体实施时,将每条记录的数据经过全部压缩或者局部压缩后得到该记录的压缩数据,将该压缩数据存储到对应的存储空间中,该记录的压缩数据在存储空间中所占用的存储区域即为该记录对应的存储区域。
电子设备内预先设置有第一对应关系,用于记录数据集合的每条记录的标识以及该每一条记录在该数据集合中的存储区域。电子设备在确定待读取的目标记录的标识后,在第一对应关系中,查找出目标记录的存储区域的指示信息。其中,目标存储区域的指示信息可以包括用于指示存储区域的起始存储位置、末端存储位置、存储长度等信息。
S103,在所述数据集合对应的存储空间中,获取所述目标记录的存储区域内存储的压缩数据,其中,所述压缩数据包括至少一个指针。
电子设备依据上述步骤确定待读取的目标记录的存储区域后,即可在数据集合对应的存储空间中定位到所述目标记录的存储区域,读取该存储区域内存储的数据,该部分数据即为目标记录的压缩数据。根据压缩方式的不同,压缩数据中所包含的压缩符也不大相同,常用的压缩符可以包括指针、编码等。此外,压缩数据中还可以包括未经压缩的原始数据片段。
S104,根据预设的指针与样本数据的第二对应关系,将所述压缩数据的指针替换为对应的样本数据,得到所述目标记录的全部数据。
在对数据集合中的记录的数据进行压缩时,可以提取该数据集合中的部分记录的数据作为样本数据,为样本数据中的数据片段匹配对应的指针。这样,样本数据中的数据片段都会存在唯一对应的指针,根据指针也能在样本数据中唯一确定所对应的数据片段。电子设备内预先设置有第二对应关系,该第二对应关系用于存储指针与样本数据的第二对应关系。
这样,电子设备在获取目标记录的压缩数据后,查找该部分压缩数据中存在的指针,以及每个指针在压缩数据中的位置。电子设备根据第二对应关系查找出指针在样本数据中对应的数据片段,将找出来的数据片段直接原位替换掉压缩数据中对应的指针,即可获得该目标记录的全部数据。
当然,在其他实施方式中,压缩数据中还可以包含除了指针之外的压缩符,例如压缩编码,这时候可以直接根据对应的解压缩方法将压缩编码解压缩,得到的数据片段原位替换压缩编码。若压缩数据中还存在未压缩的数据片段,则直接将该部分未压缩的数据片段保留。综合上述各种解压缩方式,即可得到针对该目标记录的全部数据。
本公开实施例提供的数据处理方法除了上述应用于随机读取的情况外,还可以应用于顺序读取操作。例如,可以根据待读取的一个记录标识确定顺序邻接的多个目标记录的标识,执行根据多个目标记录的标识获取记录数据的操作。或者,在确定一个目标记录的存储区域后,确定顺序邻接的多个记录的存储区域,再进行多个记录的压缩数据获取和解压缩操作等,不作限定。
上述本公开实施例提供的数据处理方法,在确定待读取的目标记录后,即可根据标识获取该记录的压缩数据所在的存储区域,进而获得记录的压缩数据,通过指针与样本数据的对应关系以及其他的解压缩算法,即可将压缩数据解压得到目标记录的全部数据。本实施例提供的数据处理方法的数据读取效率和准确性较高,无需多余的解压操作和读取操作,减少了数据处理过程中的计算量和缓存占用。
如图2所示,为本公开实施例提供的另一种数据处理方法的部分流程图,本实施例的数据处理方法增设了针对数据集合内记录的压缩操作。具体的,在步骤101所述的获取待读取的目标记录的标识之前,所述方法还可以包括:
S201,从数据集合中抽取样本数据。
本公开实施例提供的数据处理方法,在针对数据集合的全部记录的数据执行压缩操作时,先从该数据集合中抽取出部分数据,定义为样本数据。可以直接从该数据集合的全部记录中抽取出一定条数的记录,将抽取出来的记录的全部数据作为样本数据,该一定条数的记录可以为相邻接的记录或者不相邻接的记录。当然,也可以将数据集合中的记录按照编号划分为多个部分,从每个部分中均抽取出部分数据作为样本数据。
具体实施时,可以限定样本数据与数据集合的全部数据的比例范围为1%至10%,例如抽取数据集合中的3%的记录的数据作为样本数据。这样,既可以保证样本数据的可参考性,又能降低计算量,简化后续的计算过程。
S202,创建指针与样本数据的第二对应关系。
电子设备依据上述步骤从数据集合中抽取样本数据,样本数据可以包含多个长度一致或者不一致的数据片段,为每个数据片段均匹配唯一对应的压缩符。若采用全局字典的压缩算法,为每个数据片段匹配的压缩符即为全局字典中的指针。电子设备即可根据样本数据中的数据片段与指针的对应关系,创建第二对应关系,用于表征指针与样本数据中的唯一对应关系。
可选的,上述创建指针与样本数据的所述第二对应关系的步骤,可以包括:
利用所抽取的样本数据创建全局字典,其中,所述样本数据中每个数据片段均对应所述全局字典中的一个指针。
电子设备在为样本数据匹配指针时,可以根据样本数据在全局字典中的存储序列,利用数据片段的起止存储位置来确定对应的指针。不同指针对应的数据片段不同,但二者之间可以存在包含、交叉重合等关系。
S203,针对所述数据集合中的每个记录,查找所述记录的全部数据片段和所述样本数据中均存在的目标片段。
依据上述步骤创建指针与样本数据的第二对应关系之后,电子设备即可将数据集合中每条记录的数据进行压缩,得到每条记录的压缩数据。压缩的过程实质上是原位替换操作,即将长度较长的数据片段原位替换为唯一对应的且长度较短的压缩符,实现记录总长度的压缩。
若压缩过程中所利用的压缩算法为利用全局字典压缩的方法,在针对每一条记录进行压缩时,遍历所述记录的全部数据片段,以查找到该记录的全部数据片段中是否存在部分数据片段,与样本数据中的数据片段相同。若查找到记录的全部数据和样本数据中均存在的数据片段,则定义该相同的数据片段为目标片段。需要说明的是,目标片段的数量可以为一个,也可以为多个。目标片段的数量为多个时,记录中不同位置的目标片段的内容可以是相同的,也可以是不同的。在对记录中的目标片段进行处理时,可以按照目标片段在记录中的位置来处理,避免混淆和遗漏。
S204,基于所述第二对应关系,将所述记录中的所述目标片段替换为所述目标片段对应的指针,得到所述记录的压缩数据。
依据上述步骤,查找出记录和样本数据中均存在的目标片段,再依据第二对应关系,确定记录中每个位置的目标片段对应的指针,将该记录中的该位置的目标片段替换为对应的指针。再将记录中的全部目标片段均原位替换成对应的指针后,所述记录的数据长度会有缩减,被替换后的数据即为记录的压缩数据。
此外,针对记录中的非目标片段,或者长度小于或者等于指针长度或者其他预设长度的目标片段,也可以不进行替换,直接将原数据片段保留在记录中,作为压缩数据的一部分。这样,在保证压缩程度的前提下,减少电子设备的运算量。
S205,将所述数据集合的全部记录对应的压缩数据存储到所述数据集合对应的存储空间。
电子设备利用上述的压缩算法对数据集合中的每条记录进行压缩,并将每条记录的压缩数据按顺序存储到数据集合对应的存储空间,每个记录的压缩数据在存储空间中占据一定的存储区域。
S206,创建所述数据集合的全部记录的记录标识与记录存储区域的第一对应关系。
电子设备在将全部记录的压缩数据存储到存储空间内时,记录每个记录的存储区域,并创建第一对应关系,用于记录每个记录的标识和该记录存储区域的对应关系。
这样,在后续的数据读取操作中,电子设备即可根据待读取的记录的标识,在第一对应关系中查找到对应的记录存储区域,进而获得对应存储区域的压缩数据,解压得到待读取的记录的全部数据,实现可定点读取访问的数据压缩操作。
本公开实施例提供的数据处理方法,所增设的数据压缩过程,可以利用预设的指针与样本数据的第二对应关系,或者其他的压缩符与数据片段的对应关系,将记录中的数据片段原位替换为长度较小且唯一对应的指针等压缩符,实现针对数据集合中的每条记录单独压缩、解压和读取的目的,减少了不必要的压缩操作和解压操作,实现了支持定点访问的数据压缩方案。
在一种具体实现方式,上述步骤S206所述的,创建所述数据集合的全部记录的记录标识与记录存储区域的所述第一对应关系的步骤,可以包括:
创建索引数组,其中,所述索引数组的每个元素包含1个记录的记录标识和记录存储区域。
本实施方式中,针对创建记录标识与记录存储区域的第一对应关系作了进一步限定,即以索引数组的方式来指示记录标识与记录存储区域的对应关系。索引数组内包含多个元素,元素的总数大于或者等于数据集合中的记录的总数,索引数组中的1个元素就可以用于存储1个记录的记录标识和记录存储区域。
进一步的,所述数据集合的记录总量为N,其中,N为大于2的正整数;
所述索引数组的元素总数为(N+1),第i个元素包含第i个记录的记录标识和第i个记录在所述数据集合的存储空间中的起始存储位置,第(N+1)个元素包含所述数据集合对应的存储空间的总长度,i小于或者等于N;
上述步骤S102所述的,在预先存储的记录标识与记录存储区域的第一对应关系中,根据所述目标记录的标识,查找所述目标记录的存储区域的步骤,可以包括:
S301,在索引数组中,根据目标记录的标识查找所述目标记录的起始存储位置,和所述目标记录的下一邻接记录的起始存储位置。
S302,将所述目标记录的下一邻接记录的起始存储位置减去所述目标记录的起始存储位置,得到所述目标记录的存储长度。
S303,根据所述目标记录的起始存储位置和所述目标记录的存储长度,确定所述目标记录在所述数据集合的存储空间中的存储区域。
本实施方式中,设定数据集合的记录总量为N,创建的索引数组中的元素总数则为(N+1),根据数据集合中的记录排列顺序,将数据集合中的第i个记录的记录标识和记录存储区域存储在索引数组的第i个元素。
在第i个元素存储第i个记录的存储区域时,可以直接存储第i个记录的起止存储位置,方便用户可以直接获知记录的存储区域。当然,也可以仅存储第i个记录的起始存储位置,在第(i+1)个元素存储第(i+1)个记录的起始存储位置。将第(i+1)个记录的起始存储位置减去第i个记录的起始存储位置,即可得到第i个记录的存储长度。在i为N时,将第(N+1)个元素位置记录的存储空间总长度减去第N个元素存储的第N个记录的起始存储位置,也可以得到第N个记录的存储长度。这样,可以直接根据记录的压缩数据存储时获得起始存储位置并存储到索引数组中,无需在先计算每个记录的长度和终止存储位置,节省了一定的计算量。
此外,在本公开实施例的另一种具体实现方式,步骤S203所述的,查找所述记录的全部数据片段和所述样本数据中均存在的目标片段的步骤,包括:
利用全局匹配算法,查找所述记录的全部数据片段和所述样本数据中均存在的目标片段。
本实施方式中,针对创建全局字典进行记录的数据压缩方案,利用全局匹配算法执行匹配操作,即在记录的全部数据片段查找和所述样本数据中相同的目标片段,尤其是搜索记录的全部树中与全局字典的样本数据中相同的最长数据片段。
具体实现过程可以为:
输入:给定一个长度为n和m的字节数组D[1…n]和R[1…m],R中存在一些子串R[i…j]==D[k…l]。其中,D表示全局字典Dictionary,R表示记录Record。
输出:按i的大小顺序,将子串R[i…j]替换为序偶(k,l),所有这样的序偶(k,l)构成输出序列。每个(k,l)对应的子串R[i…j]无重叠,并且让表达整个(k,l)序列的总字节数最小。全局字典搜索的关键步骤是在R[i]位置开始搜索,得到最大的j,以及相应的(k,l)。
可选的,电子设备可以利用双数组前缀树算法Double Array Trie)和后缀数组算法Suffix Array来查找所述记录的全部数据片段和所述样本数据中均存在的所述目标片段。
如图4所示,上述利用双数组和前缀树算法和后缀数组算法实现匹配的具体过程可以包括:
S401,对后缀数组进行宽度优先遍历,生成前缀树,其中,所述前缀树包含结点关系和压缩路径;
S402,利用所述前缀树,根据所述记录的全部数据片段和所述样本数据,创建双数组前缀树;
S403,利用所述双数组前缀树,查找所述目标片段。
全局字典的创建指根据抽取出来的采样数据Dict创建全局字典的索引结构:后缀数组和Cache Trie,创建过程有两个关键点:创建后缀数组和创建Cache Trie。
对后缀数组进行宽度优先遍历,遍历时同时生成一个紧凑的临时Trie,该Trie不用于搜索,功能及其有限,但包含了所有必要的信息(结点关系、Patricia压缩路径、lo,hi值);以上一步生成的临时Trie作为输入,创建用户搜索的Double Array Trie。
具体的,先为全局字典D建立一个后缀数组Suffix Array,然后对于每条记录R,在R的每个位置i,使用后缀数组进行最长匹配,即得到相应的j和(k,l),输出(k,l)即可。
对开始的匹配添加一个高速缓冲存储器Cache,Cache是一个字典树Trie。除了Trie本身的数据结构,在每个Trie结点上记录相应的匹配范围[lo,hi)。另外,还记录一个Zlen,表示lo和hi-1相匹配的长度,匹配Zlen长的字符串时不需要在Trie中进行状态转移,也不需要在Suffix Array上执行二分查找。增加了Zlen的Trie实际上是个Patricia Trie,Zlen字符串是Patricia Trie中的压缩路径。
其中,Trie使用的是双数组Double Array Trie,双数组Trie的状态转移速度非常快,一次状态转移只需要一个加法和一个判断,这一次状态转移等价于直接在SuffixArray上的一次Binary_Search,但是速度要快20倍以上。
如果把整个Suffix Array看成一个Trie,那么Cache Trie缓存的是靠近根的SubTrie,即:越靠近根Root,访问越频繁,Trie结点越少,搜索的区间范围更大。如果直接在Suffix Array上搜索,即使是搜索相同的数据,在根附近搜索,要比在远离根的分支上搜索速度慢得多。
对后缀数组进行宽度优先遍历,并限制遍历层数,这个层数不同于字符串匹配的长度,存在压缩路径时,匹配的字符串长度要大于遍历层数。除了限制宽度优先遍历层数,还限制Trie结点中lo,hi之间的距离,在这个距离限制为15时,创建出来的Cache Trie在大部分情况下占用的内存与DictSize接近。
在上述实施方式的基础上,考虑到全局压缩仅是利用数据集合中的全部记录中的小部分采样数据的压缩方案,可能会出现记录中的部分数据片段在全局字典中查找不到或者匹配长度较短的情况,为减少不必要的运算量,还可以增设局部压缩方案和不压缩方案。上述步骤S203所述的,基于所述第二对应关系,将所述记录中的所述目标片段替换为所述目标片段对应的指针,得到所述记录的压缩数据,可以包括:
判断所述目标片段的实际长度是否大于或者等于第一预设长度;
若所述目标片段的实际长度大于或者等于第一预设长度,将所述记录中的所述目标片段替换为所述目标片段对应的指针。
考虑到全局字典的指针也占用一定长度,若指针所替换的目标片段的实际长度较短,那么此类替换操作可能无法达到较好的压缩目标。电子设备可以预先设置第一预设长度,该第一预设长度可以大于指针的长度。电子设备判断所查找出来的目标片段的实际长度是否大于或者等于第一预设长度,若是,则确定匹配程度较好,可以直接将该目标片段替换为对应的指针,实现压缩。
此外,在本公开实施例的一种具体实现方式,所述判断所述目标片段的实际长度是否大于或者等于第一预设长度的步骤之后,所述方法还可以包括:
判断所述目标片段的实际长度是否小于所述第一预设长度且大于或者等于所述第二预设长度,其中,所述第一预设长度大于所述第二预设长度;
若所述目标片段的实际长度小于所述第一预设长度且大于或者等于所述第二预设长度,利用预设的局部压缩算法得到所述记录的编码,作为所述记录的压缩数据;
所述根据预设的指针与样本数据的第二对应关系,将所述压缩数据的指针替换为对应的样本数据,得到所述目标记录的全部数据的步骤还包括:
利用预设的局部解压缩算法解压所述记录的压缩数据,得到所述目标记录的全部数据;或者,
若所述目标片段的实际长度小于所述第二预设长度,将所述目标片段保留在所述记录中,得到所述记录的压缩数据。
本实施方式中,电子设备预先设置第二预设长度,该第二预设长度可以设置为等于或者略大于指针的长度。若目标长度的实际长度小于第一预设长度且大于或者等于第二预设长度,则可以认定所查找出来的目标片段较短,可以利用局部压缩算法来获得记录的压缩数据。若目标长度的实际长度小于第二预设长度,则可以认定所查找出来的目标片段的长度大于指针的长度,此时可以选择不压缩的方式,直接将记录的数据片段保留,作为记录的压缩数据。
具体实施时,根据本公开实施例的一种具体实现方式,所述判断所述目标片段的实际长度是否小于所述第一预设长度且大于或者等于所述第二预设长度步骤之后,所述方法还包括:
如果在全局字典中匹配的长度太小,例如小于等于5,那么即便对(k,l)经过编码,其所占的空间也仍然大于不压缩时的空间。预设一个最短长度,比如5,只有大于该长度的匹配,才使用(k,l)表示。小于该长度的,以不压缩的方式保存。
当然,在具体实施时,可以优先考虑局部压缩,没有局部匹配的时候,或者局部匹配比全局匹配更短的时候,才使用全局匹配。局部匹配和全局匹配都不存在,或者都太短的时候,才以不压缩的方式保存。
实际上,针对局部压缩,其对局部片段的引用,针对该局部引用的长度和距离/位置,还可以有多种编码方式,引用所占的bit数量不同,以更进一步减小编码长度,提高压缩率。例如,游程编码(Run Length Encoding,简称RLE)、短距离引用、中距离引用1、中距离引用2、长距离引用或者超距离引用。
对于记录R中的任何片段,压缩后有三种表达方式:全局压缩、不压缩和局部压缩(局部压缩。压缩后的数据需要编码,编码方式有两个优化目标,即编码要尽可能短以提高压缩率高,编码要易于解码便于快速解压。可选的,将编码的操作码设为定长3bit,从而共有8个操作码,包括全局压缩、不压缩,以及局部压缩的6个编码类别。
此外,在本公开的其他实施方式中,压缩过程中的内存用量=DictSize*(1+4)+CacheSize+WorkingMemory,可以看出:
DictSize*(1+4)是固定不变的(后缀数组每项4字节);
Cache Size也基本固定,当前的配置在一般情况下尺寸与DictSize很接近;
Working Memory主要包含当前正在压缩的记录和local lz77hash table;
Working Memory的尺寸与单条输入数据的长度成正比;
local lz77hash table的内存用量=单条输入数据长度*8;
启用多线程压缩时,每个线程都有相应的Working Memory,并且一旦压缩速度慢于读取输入数据的速度,待压缩数据队列会积压一些数据,总体上内存用量会比单线程多一些(一般在10%以内)。
压缩过程中的内存用量大约为:Dict Size*6.5,可以将采样率设为一个固定值,例如3%。那么所处理的数据集合越大,抽取出来的全局字典Dict就会越大,Dict匹配就会越多,压缩率就会越高。
上述本公开实施例提供的数据处理方法,使用全局字典的全局压缩整体方案,读取时直接访问/解压目标记录数据,无需缓存解压后的多余数据。此外,全局字典索引结构中双数组Trie树的创建,以及全局字典索引结构中双数组Trie树的搜索,并且在全局字典索引结构中实现双数组Trie树与路径压缩的结合以及全局压缩与局部压缩的结合。极大程度地提高了数据集合的压缩效率和访问效率。
与上面的方法实施例相对应,参见图5,本公开实施例还提供了一种数据处理装置50,包括:
第一获取模块501,用于获取待读取的目标记录的标识,其中,所述目标记录为数据集合中的任一记录;
查找模块502,用于在预先存储的记录标识与记录存储区域的第一对应关系中,根据所述目标记录的标识,查找所述目标记录的存储区域;
第二获取模块503,用于在所述数据集合对应的存储空间中,获取所述目标记录的存储区域内存储的压缩数据,其中,所述压缩数据包括至少一个指针;
替换模块504,用于根据预设的指针与样本数据的第二对应关系,将所述压缩数据的指针替换为对应的样本数据,得到所述目标记录的全部数据。
图5所示装置可以对应的执行上述方法实施例中的内容,本实施例未详细描述的部分,参照上述方法实施例中记载的内容,在此不再赘述。
参见图6,本公开实施例还提供了一种电子设备60,该电子设备包括:
至少一个处理器;以及,
与该至少一个处理器通信连接的存储器;其中,
该存储器存储有可被该至少一个处理器执行的指令,该指令被该至少一个处理器执行,以使该至少一个处理器能够执行前述方法实施例中的数据处理方法。
本公开实施例还提供了一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质存储计算机指令,该计算机指令用于使该计算机执行前述方法实施例中的数据处理方法。
本公开实施例还提供了一种计算机程序产品,该计算机程序产品包括存储在非暂态计算机可读存储介质上的计算程序,该计算机程序包括程序指令,当该程序指令被计算机执行时,使该计算机执行前述方法实施例中的的数据处理方法。
下面参考图6,其示出了适于用来实现本公开实施例的电子设备60的结构示意图。本公开实施例中的电子设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、PDA(个人数字助理)、PAD(平板电脑)、PMP(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。图6示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图6所示,电子设备60可以包括处理装置(例如中央处理器、图形处理器等)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储装置608加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。在RAM 603中,还存储有电子设备60操作所需的各种程序和数据。处理装置601、ROM 602以及RAM 603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
通常,以下装置可以连接至I/O接口605:包括例如触摸屏、触摸板、键盘、鼠标、图像传感器、麦克风、加速度计、陀螺仪等的输入装置606;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置607;包括例如磁带、硬盘等的存储装置608;以及通信装置609。通信装置609可以允许电子设备60与其他设备进行无线或有线通信以交换数据。虽然图中示出了具有各种装置的电子设备60,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置609从网络上被下载和安装,或者从存储装置608被安装,或者从ROM 602被安装。在该计算机程序被处理装置601执行时,执行本公开实施例的方法中限定的上述功能。
需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:获取至少两个网际协议地址;向节点评价设备发送包括所述至少两个网际协议地址的节点评价请求,其中,所述节点评价设备从所述至少两个网际协议地址中,选取网际协议地址并返回;接收所述节点评价设备返回的网际协议地址;其中,所获取的网际协议地址指示内容分发网络中的边缘节点。
或者,上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:接收包括至少两个网际协议地址的节点评价请求;从所述至少两个网际协议地址中,选取网际协议地址;返回选取出的网际协议地址;其中,接收到的网际协议地址指示内容分发网络中的边缘节点。
可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,单元的名称在某种情况下并不构成对该单元本身的限定,例如,第一获取单元还可以被描述为“获取至少两个网际协议地址的单元”。
应当理解,本公开的各部分可以用硬件、软件、固件或它们的组合来实现。
以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应以权利要求的保护范围为准。