一种索引数据压缩以及索引数据搜索的方法和设备
技术领域
本申请涉及数据信息处理领域,尤其涉及一种索引数据压缩以及索引数据搜索的方法和设备。
背景技术
随着互联网技术和计算机技术的不断发展,一个数据文件中包含的信息量越来越大,导致存储在数据库中占用的存储容量也随之增加。
为了方便对一个数据文件中数据信息的查找,每一个数据文件中存放的数据将按照一种设定的存放顺序存储。此外,当数据文件中的数据量达到1TB时,通常将数据文件中的数据划分成大小相同的数据块,并为划分得到的每一个数据块确定一个主键索引(例如,每一个数据块的最后一行数据信息作为该数据块的索引信息),最后将确定的每一个数据块的主键索引组合得到针对该数据文件的索引信息表。
在对该数据文件的数据信息进行查找时,首先,通过该索引信息表查找到该数据文件的数据块;其次,按照二分查找的方式找到该数据块中的指定行;最后,在该指定行中找到需要的数据信息。
但是,索引信息列表的容量大小是由数据文件中的数据量和每一个数据块的数据量决定的。当数据文件中的数据量比较大,每一个数据块的数据量比较小时,导致生成的索引信息列表的容量也比较大;当数据文件中的数据量比较大,每一个数据块的数据量比较小时,导致生成的索引信息列表的容量比较小,但是利用索引信息列表查找数据信息的速率将降低。
例如:一个数据文件中包含了1TB的数据量,假设划分的每一个数据块的大小为1GB,这样将得到103个数据块,即生成的索引信息列表中包含了103个主键索引,其中,每一个主键索引中包含了多个列数据信息。
在查找数据信息时,首先,需要在103个主键索引中确定需要的主键索引;其次,根据确定的主键索引,找到对应的数据块;最后在1GB的数据块中查找到需要的数据信息。
然而,由于索引信息列表的数据量比较小,搜索服务器的内存能够满足其需求,但是确定的数据块的容量比较大,使得最后查找数据信息的效率低且精度也不高。
假设划分的每一个数据块的大小为1MB,这样将得到106个数据块,即生成的索引信息列表中包含了106个主键索引,其中,每一个主键索引中包含了多个列数据信息。
在查找数据信息时,首先,需要在106个主键索引中确定需要的主键索引;其次,根据确定的主键索引,找到对应的数据块;最后在1MB的数据块中查找到需要的数据信息。
由于索引信息列表的数据量比较大,确定的数据块的容量比较小,使得最后查找数据信息的精度提高,但是查找到数据信息的效率不高,并且搜索服务器的内存也无法满足其需求。
发明内容
本申请提供了一种索引数据压缩以及索引数据搜索的方法和设备,用于解决如何在保证查找数据信息效率与精度的前提下降低索引信息列表的数据容量的问题。
一种索引数据压缩的方法,包括:
在得到一个数据文件的索引信息列表之后,按照所述索引信息列表中列索引数据的排列顺序,依次比较相邻两行中同一列的列索引数据是否相同;
当相邻两行中同一列的列索引数据相同时,对相同的列索引数据进行压缩;当所述相邻两行中同一列的列索引数据不相同时,记录所述相邻两行中比较结果不相同的同一列的列索引数据以及对应的位置信息,并压缩所述相邻两行中比较结果不相同的同一列之后的其他列的列索引数据;
在对所述索引信息列表中每一行对应的列索引数据压缩处理执行完毕后,根据压缩处理后得到的列索引数据,生成针对所述索引信息列表的索引数组。
按照所述索引信息列表中列索引数据的排列顺序,依次比较相邻两行中同一列的列索引数据是否相同,包括:
从所述索引信息列表的第一行索引数据开始,对相邻两行中同一列列索引数据执行以下操作,直至所述相邻两行中同一列的列索引数据不相同时,结束对所述相邻两行中同一列的列索引数据是否相同进行判断的操作:
从相邻两行的第一列索引数据开始,依次比较相邻两行中同一列的列索引数据是否相同。
所述方法还包括:
当比较结果是相邻两行中同一列的列索引数据相同时,记录一个列索引数据以及该列索引数据的位置信息,并继续执行判断所述相邻两行中下一列的列索引数据是否相同的操作,其中,所述列索引数据的位置信息包括列标号和行标号;
当比较结果是相邻两行中同一列的列索引数据不相同时,记录比较结果不相同的每一列的列索引数据以及位置信息,结束对所述相邻两行中下一列的列索引数据是否相同进行判断的操作。
对相同的列索引数据进行压缩,包括:
根据记录的列索引数据的位置信息,判断列标号相同但行标号相邻对应的两个列索引数据是否相同;
在判断结果是列标号相同但行标号相邻对应的两个列索引数据相同时,记录所述列索引数据以及所述列索引数据的一个位置信息,其中,所述位置信息中包含了列标号和行标号,所述行标号包含了所述列索引数据对应的多个行标号。
压缩所述相邻两行中比较结果不相同的同一列之后的其他列的列索引数据,包括:
确定所述相邻两行中比较结果不相同的同一列之后的其他列的列索引数据不在索引信息列表对应的索引数组中显示。
根据压缩处理后得到的列索引数据,生成针对所述索引信息列表的索引数组,包括:
当记录的列索引数据的行标号相同、且列标号不相同时,按照列标号的排列顺序,依次建立列索引数据之间的父子关系;
以及
当记录的多个列索引数据满足列标号相同、且行标号不相同、但在索引信息列表中该多个列索引数据分别对应的相邻前一列的列索引数据相同时,建立该多个列索引数据与记录的一个所述相邻前一列的列索引数据之间的父子关系。
在建立记录的列索引数据之间的父子关系之后,所述方法还包括:
针对记录得到的列索引数据,确定该列索引数据对应的一级子节点的个数;
在确定该列索引数据对应的一级子节点的个数非零时,确定该列索引数据的第一个子节点的行标号,并建立该列索引数据在索引数组中的标识信息,其中,所述标识信息包括列索引数据的内容、列索引数据所在列的列标号、一级子节点的个数以及第一个子节点的行标号;
在确定该列索引数据对应的一级子节点的个数为零时,建立该列索引数据在索引数组中的标识信息,其中,所述标识信息包括列索引数据的内容、列索引数据所在列的列标号、空以及列索引数据所在行的行标号。
一种索引数据搜索的方法,包括:
接收搜索请求消息,其中,所述搜索请求消息中包含了至少一个搜索关键词以及该搜索关键词对应的列标号;
根据接收到的搜索关键词对应的列标号,依次将搜索关键词与索引数组中列标号相同的列索引数据进行比较,确定首次出现的列索引数据不小于接收到的所述搜索关键词的列索引数据。
根据接收到的搜索关键词对应的列标号,依次将搜索关键词与索引数组中列标号相同的列索引数据进行比较,确定首次出现的列索引数据不小于接收到的所述搜索关键词的列索引数据,包括:
选择一个搜索关键词,并根据选择的搜索关键词对应的列标号,从索引数组中查找到与选择的搜索关键词的列标号相同、且数据内容不小于所述搜索关键词的列索引数据;
当查找到的列索引数据的数据内容大于所述搜索关键词的数据内容时,进一步判断查找到的列索引数据按照排列顺序是否是第一个大于所述搜索关键词的列索引数据,若是,则确定所述列索引数据为待搜索的索引数据;
当查找到的列索引数据等于所述搜索关键词时,进一步判断查找到的列索引数据是否存在第一级子节点,若不存在,则确定所述列索引数据为待搜索的索引数据,若存在,跳转执行判断所述第一级节点的数据内容是否大于下一个搜索关键词的数据内容。
一种索引数据压缩的设备,包括:
比较模块,用于在得到一个数据文件的索引信息列表之后,按照所述索引信息列表中列索引数据的排列顺序,依次比较相邻两行中同一列的列索引数据是否相同;
压缩模块,用于当相邻两行中同一列的列索引数据相同时,对相同的列索引数据进行压缩;当所述相邻两行中同一列的列索引数据不相同时,记录所述相邻两行中比较结果不相同的同一列的列索引数据以及对应的位置信息,并压缩所述相邻两行中比较结果不相同的同一列之后的其他列的列索引数据;
索引数组生成模块,用于在对所述索引信息列表中每一行对应的列索引数据压缩处理执行完毕后,根据压缩处理后得到的列索引数据,生成针对所述索引信息列表的索引数组。
所述比较模块,具体用于从所述索引信息列表的第一行索引数据开始,对相邻两行中同一列列索引数据执行以下操作,直至所述相邻两行中同一列的列索引数据不相同时,结束对所述相邻两行中同一列的列索引数据是否相同进行判断的操作:
从相邻两行的第一列索引数据开始,依次比较相邻两行中同一列的列索引数据是否相同。
所述设备还包括:
记录模块,用于当比较结果是相邻两行中同一列的列索引数据相同时,记录一个列索引数据以及该列索引数据的位置信息,并继续触发所述比较模块执行判断所述相邻两行中下一列的列索引数据是否相同的操作,其中,所述列索引数据的位置信息包括列标号和行标号;
当比较结果是相邻两行中同一列的列索引数据不相同时,记录比较结果不相同的每一列的列索引数据以及位置信息,结束对所述相邻两行中下一列的列索引数据是否相同进行判断的操作。
所述压缩模块,具体用于根据记录的列索引数据的位置信息,判断列标号相同但行标号相邻对应的两个列索引数据是否相同;
在判断结果是列标号相同但行标号相邻对应的两个列索引数据相同时,记录所述列索引数据以及所述列索引数据的一个位置信息,其中,所述位置信息中包含了列标号和行标号,所述行标号包含了所述列索引数据对应的多个行标号。
所述压缩模块,具体用于确定所述相邻两行中比较结果不相同的同一列之后的其他列的列索引数据不在索引信息列表对应的索引数组中显示。
所述索引数组生成模块,具体用于当记录的列索引数据的行标号相同、且列标号不相同时,按照列标号的排列顺序,依次建立列索引数据之间的父子关系;
以及当记录的多个列索引数据满足列标号相同、且行标号不相同、但在索引信息列表中该多个列索引数据分别对应的相邻前一列的列索引数据相同时,建立该多个列索引数据与记录的一个所述相邻前一列的列索引数据之间的父子关系。
所述设备还包括:标识信息生成模块,其中:
标识信息生成模块,用于在建立记录的列索引数据之间的父子关系之后,针对记录得到的列索引数据,确定该列索引数据对应的一级子节点的个数;
在确定该列索引数据对应的一级子节点的个数非零时,确定该列索引数据的第一个子节点的行标号,并建立该列索引数据在索引数组中的标识信息,其中,所述标识信息包括列索引数据的内容、列索引数据所在列的列标号、一级子节点的个数以及第一个子节点的行标号;
在确定该列索引数据对应的一级子节点的个数为零时,建立该列索引数据在索引数组中的标识信息,其中,所述标识信息包括列索引数据的内容、列索引数据所在列的列标号、空以及列索引数据所在行的行标号。
一种索引数据搜索的设备,包括:
接收模块,用于接收搜索请求消息,其中,所述搜索请求消息中包含了至少一个搜索关键词以及该搜索关键词对应的列标号;
搜索模块,用于根据接收到的搜索关键词对应的列标号,依次将搜索关键词与索引数组中列标号相同的列索引数据进行比较,确定首次出现的列索引数据不小于接收到的所述搜索关键词的列索引数据。
所述搜索模块,具体用于选择一个搜索关键词,并根据选择的搜索关键词对应的列标号,从索引数组中查找到与选择的搜索关键词的列标号相同、且数据内容不小于所述搜索关键词的列索引数据;
当查找到的列索引数据的数据内容大于所述搜索关键词的数据内容时,进一步判断查找到的列索引数据按照排列顺序是否是第一个大于所述搜索关键词的列索引数据,若是,则确定所述列索引数据为待搜索的索引数据;
当查找到的列索引数据等于所述搜索关键词时,进一步判断查找到的列索引数据是否存在第一级子节点,若不存在,则确定所述列索引数据为待搜索的索引数据,若存在,跳转执行判断所述第一级节点的数据内容是否大于下一个搜索关键词的数据内容。
本申请有益效果如下:
本申请实施例通过在得到一个数据文件的索引信息列表之后,按照所述索引信息列表中列索引数据的排列顺序,依次比较相邻两行中同一列的列索引数据是否相同;当相邻两行中同一列的列索引数据相同时,对相同的列索引数据进行压缩;当所述相邻两行中同一列的列索引数据不相同时,记录所述相邻两行中比较结果不相同的同一列的列索引数据以及对应的位置信息,并压缩所述相邻两行中比较结果不相同的同一列之后的其他列的列索引数据;在对所述索引信息列表中每一行对应的列索引数据压缩处理执行完毕后,根据压缩处理后得到的列索引数据,生成针对所述索引信息列表的索引数组,与现有技术相比,本申请实施例在得到数据文件的索引信息列表之后,通过比较列标号相同、行标号相邻的列索引数据是否相同的操作,确定了索引信息列表中相邻两行中同一列中存在的重复的列索引数据,以及确定了索引信息列表中相邻两行中同一列中首次出现的不同的列索引数据。在新生成的索引数组中,对相邻两行中同一列中存在的重复的列索引数据进行压缩,以及对相邻两行中同一列中首次出现的不同的列索引数据之后的列索引数据不进行存储,这样得到的索引信息列表对应的索引数组,每一行中保留的最后一个列索引数据说明了索引信息列表中该行与相邻其他行的最大区别,对该列索引数据之前的重复列索引数据进行压缩,并且又不在索引数组中存储其后的列索引数据,相对与索引信息列表,存储容量大大减小,同时索引数组中数据量较小,还保证了列索引数据的查找效率。
附图说明
图1为本申请实施例一提供的一种索引数据压缩的方法的流程示意图;
图2为本申请实施例二提供的一种索引数据搜索方法的流程示意图;
图3为本申请实施例三提供的一种索引数据压缩的设备的结构示意图;
图4为本申请实施例四的一种索引数据搜索的设备的结构示意图。
具体实施方式
为了实现本申请的目的,本申请实施例提供了一种索引数据压缩以及索引数据搜索的方法和设备,通过在得到一个数据文件的索引信息列表之后,按照所述索引信息列表中列索引数据的排列顺序,依次比较相邻两行中同一列的列索引数据是否相同;当相邻两行中同一列的列索引数据相同时,对相同的列索引数据进行压缩;当所述相邻两行中同一列的列索引数据不相同时,记录所述相邻两行中比较结果不相同的同一列的列索引数据以及对应的位置信息,并压缩所述相邻两行中比较结果不相同的同一列之后的其他列的列索引数据;在对所述索引信息列表中每一行对应的列索引数据压缩处理执行完毕后,根据压缩处理后得到的列索引数据,生成针对所述索引信息列表的索引数组。
与现有技术相比,本申请实施例在得到数据文件的索引信息列表之后,通过比较列标号相同、行标号相邻的列索引数据是否相同的操作,确定了索引信息列表中相邻两行中同一列中存在的重复的列索引数据,以及确定了索引信息列表中相邻两行中同一列中首次出现的不同的列索引数据。
在新生成的索引数组中,对相邻两行中同一列中存在的重复的列索引数据进行压缩,以及对相邻两行中同一列中首次出现的不同的列索引数据之后的列索引数据不进行存储,这样得到的索引信息列表对应的索引数组,每一行中保留的最后一个列索引数据说明了索引信息列表中该行与相邻其他行的最大区别,对该列索引数据之前的重复列索引数据进行压缩,并且又不在索引数组中存储其后的列索引数据,相对与索引信息列表,存储容量大大减小,同时索引数组中数据量较小,还保证了列索引数据的查找效率。
需要说明的是,本申请实施例涉及的索引信息列表是指列表中的索引信息按照一定的顺序排列,并且索引信息列表中相邻两行的索引数据具有可比较性。
例如:索引信息列表中的第一行索引数据为00000000,第二行索引数据为00000001,由此可见,索引信息列表中第一行前7列的索引数据与第二行前7列的索引数据相同,但是第一行第8列的索引数据与第二行第8列的索引数据不同,确定索引信息列表中的第一行的索引数据小于第二行的索引数据。
需要说明的是,本申请实施例涉及的索引信息列表可以是前缀索引列表(即不同行的列索引数据中部分行的部分列的索引数据相同,例如:前缀索引iphone4和iphone5中iphone相同),也可以是普通索引列表(需要说明的是,按照设定的顺序排列),这里不做限定。
下面结合说明书附图对本申请各个实施例进行详细描述。
实施例一:
如图1所示,为本申请实施例一提供的一种索引数据压缩的方法的流程示意图。所述方法包括:
步骤101:在得到一个数据文件的索引信息列表之后,按照所述索引信息列表中列索引数据的排列顺序,依次比较相邻两行中同一列的列索引数据是否相同。
在步骤101中,由于数据文件中包含的数据量比较大,为了方便对数据文件中的数据进行查找,通常数据文件中的数据按照一定的顺序存放,根据数据的存放顺序生成该数据文件的索引信息库。
其中,索引信息库可以是数组形式,也可以是列表形式,还可以是树形结构形式等等。
对于列表形式的索引信息库,通过列表中的行标识和列标识共同确定一个索引信息库中的列索引数据。
例如:如表1所示,为一个数据文件的索引信息列表:
1 |
2 |
3 |
4 |
1 |
5 |
6 |
7 |
4 |
10 |
8 |
5 |
4 |
10 |
8 |
30 |
4 |
10 |
20 |
10 |
表1
从表1中可以看出,该索引信息列表中包含了6行索引信息,每一行索引信息由4个列索引数据组成。
在得到类似表1这样的索引信息列表之后,首先,确定该索引信息列表中每一行中不同列的列索引数据以及每一个列索引数据的位置信息。
例如,确定索引信息列表中第一行中不同列的列索引数据:第一行第一列对应的列索引数据为1,第一行第二列对应的列索引数据为2,第一行第三列对应的列索引数据为3,第一行第四列对应的列索引数据为4。
需要说明的是,索引信息列表中的行标号和列标号可以从0开始,也可以从其他数字开始,这里不做限定。
为了方便方案的描述,对于表1中行标号和列标号分别从0开始标记,即行标识为0~5,列标号为0~3,第零行第零列对应的列索引数据1的位置信息为(0,0)。
其次,按照所述索引信息列表中列索引数据的排列顺序,依次比较相邻两行中同一列的列索引数据是否相同。
由于一个数据文件的索引信息列表是按照一定的排列顺序的(例如:数据信息从小到大顺序;或者按照数据信息的前缀信息a~z的排列顺序,等等,这里不做限定),因此,从所述索引信息列表的第一行索引数据开始,对相邻两行中同一列列索引数据执行以下操作,直至所述相邻两行中同一列的列索引数据不相同时,结束对所述相邻两行中同一列的列索引数据是否相同进行判断的操作:
从相邻两行的第一列索引数据开始,依次比较相邻两行中同一列的列索引数据是否相同。
具体地,第一步,针对所述索引信息列表中的相邻两行,从所述索引信息列表的第一列索引数据开始,执行:判断相邻两行中同一列对应的两个列索引数据是否相同,若相同,则执行第二步;否则,执行第三步。
其中,所谓相邻两行是指行标号相邻的两行,例如:行标号为0的第零行与行标号为1的第一行属于相邻两行,行标号为1的第一行与行标号为2的第二行属于相邻两行。
由于每一行对应的多个列索引数据,因此在以任一个相邻两行为研究对象时,需要从第一列对应的列索引数据(若列标号从0开始,即为第零列)开始讨论,判断当前研究的相邻两行中第一列对应的两个列索引数据是否相同。
仍以表1中记录的内容为例进行说明。例如:研究对象是第0行和第1行,那么第0行第0列对应的列索引数据是1,第1行第0列对应的列索引数据是1,判断第0行第0列对应的列索引数据与第1行第0列对应的列索引数据是否相同,若第0行第0列对应的列索引数据与第1行第0列对应的列索引数据(即1与1)相同,则执行第二步。
例如:研究对象是第1行和第2行,那么第1行第0列对应的列索引数据是1,第2行第0列对应的列索引数据是4,判断第1行第0列对应的列索引数据与第2行第0列对应的列索引数据是否相同,若第1行第0列对应的列索引数据与第2行第0列对应的列索引数据(即1与4)不相同,则执行第三步。
第二步,当比较结果是相邻两行中同一列的列索引数据相同时,记录一个列索引数据以及该列索引数据的位置信息,并继续执行判断所述相邻两行中下一列的列索引数据是否相同的操作。
其中,所述列索引数据的位置信息包括列标号和行标号。
需要说明的是,记录的列索引数据的行标号可以是相同列索引数据的所有行标号,还可以是从相同列索引数据对应的行标号中选择一个行标号,还可以是从相同列索引数据对应的行标号中选择行标号最小的一个,这里不做限定。
例如:位置信息为(0,0)的列索引数据1,位置信息为(1,0)的列索引数据1,那么在记录列索引数据的位置信息中列标号为0,行标识可以为0,也可以为1,还可以是0和1。
例如:在比较结果是第0行第0列对应的列索引数据与第1行第0列对应的列索引数据(即1与1)相同时,记录一个列索引数据(即1)以及该列索引数据的位置信息(即(0,0)和/或(1,0))。
一般,在相邻两行对应的同一列的两个列索引数据相同时,记录的列索引数据的位置信息选择行标号较小的一个位置信息,例如:记录的列索引数据1的位置信息为(0,0)。
在确定第0行第0列对应的列索引数据与第1行第0列对应的列索引数据(即1与1)相同时,触发对第0行第1列对应的列索引数据与第1行第1列对应的列索引数据是否相同的判断,并根据判断结果确定是按照第二步的方式继续执行,还是按照第三步的方式继续执行。
仍以表1中记录的内容为例进行说明。例如:判断第0行第1列对应的列索引数据(即2)与第1行第1列对应的列索引数据(即5)是否相同,若第0行第1列对应的列索引数据与第1行第1列对应的列索引数据(即2和5)不相同,则跳转执行第三步。
第三步:当比较结果是相邻两行中同一列的列索引数据不相同时,记录比较结果不相同的每一列的列索引数据以及位置信息,结束对所述相邻两行中下一列的列索引数据是否相同进行判断的操作,并将执行操作的行标号增加一,跳转执行第一步。
仍以表1中记录的内容为例进行说明。例如:第0行第1列对应的列索引数据与第1行第1列对应的列索引数据(即2和5)不相同时,分别记录每一个列索引数据以及对应的位置信息,即列索引数据2对应的位置信息(0,1),列索引数据5对应的位置信息(1,1),并结束对第0行和第1行中其他列的列索引数据的判断,触发执行行标号增加1,即开始对第1行和第2行中列索引数据的判断。
通过步骤101中的判断操作,确定了索引信息列表中相邻行对应的同一列中列索引数据之间的关系,为后续数据压缩做准备。
步骤102:当相邻两行中同一列的列索引数据相同时,对相同的列索引数据进行压缩;当所述相邻两行中同一列的列索引数据不相同时,记录所述相邻两行中比较结果不相同的同一列的列索引数据以及对应的位置信息,并压缩所述相邻两行中比较结果不相同的同一列之后的其他列的列索引数据。
在步骤102中,在利用步骤101的方式对索引信息列表中所有行中列索引数据判断结束后,由于在比较结果是相邻两行中同一列的列索引数据不相同时,记录比较结果不相同的每一列的列索引数据以及位置信息,结束对所述相邻两行中下一列的列索引数据是否相同进行判断的操作,意味着此时得到的中间表(即介于索引信息列表与索引数组的中间状态)中只记录到出现同一列的列索引数据不同对应的列索引数据的位置,其后的列索引数据将不再记录,也就是说,所述相邻两行中比较结果不相同的同一列之后的其他列的列索引数据也将不在索引信息列表对应的索引数组中显示。
那么在经过步骤101之后对得到的索引信息列表中的列索引数据进行整理,得到索引信息列表与最终生成的索引数组之间的中间表,即仍以表1中所示的内容为例,经过上述三步之后,得到表2所示的内容。
1 |
2 |
|
|
1 |
5 |
|
|
4 |
10 |
8 |
5 |
4 |
10 |
8 |
30 |
4 |
10 |
20 |
|
17 |
|
|
|
表2
从表2中可以看出,通过上述方式之后,得到的中间表中确定了每一行索引数据的关键索引数据,使得即将生成的索引数组中的数据量比索引信息列表中的数据量少,缩小了索引数据的存储容量。
即第一行的关键索引数据为{1和2};第二行的关键索引数据为{1和5};第三行的关键索引数据为{4、10、8和5};第四行的关键索引数据为{4、10、8和30};第五行的关键索引数据为{4、10、20};第六行的关键索引数据为{17}。
但是,从表2中看出,中间表中还存在大量的重复列索引数据,此时需要对相同的列索引数据进行压缩,方式包括但不限于:
首先,根据记录的列索引数据的位置信息,判断列标号相同但行标号相邻对应的两个列索引数据是否相同。
这样的目的是为了对中间表的重复的列索引数据进行再次压缩。
其次,在判断结果是列标号相同但行标号相邻对应的两个列索引数据相同时,记录一个列索引数据以及该列索引数据的位置信息。
其中,所述位置信息中包含了列标号和行标号,所述行标号包含了所述列索引数据对应的多个行标号。
以得到表2所示的列索引数据为例进行说明。例如:记录的列索引数据以及列索引数据的位置信息包括:1(0,0);2(0,1);1(1,0);5(1,1);4(2,0);10(2,1);8(2,2);5(2,3);4(3,0);10(3,1);8(3,2);30(3,3);4(4,0);10(4,1);20(4,2);17(5,0)。
需要说明的是,横坐标是行标号,纵坐标是列标号。
将记录的列索引数据的位置信息进行比较,在两个列索引数据的位置信息满足列标号相同且行标号相邻且列索引数据相同时,将该两个列索引数据进行压缩。
例如:1(0,0)和1(1,0)的列标号相同、行标号相邻且列索引数据相同,因此1(0,0)和1(1,0)满足数据压缩要求,将1(0,0)和1(1,0)压缩成为一个列索引数据1,位置信息可以选择是(0,0),还可以选择是(1,0),一般选择是(0,0),这里不做限定。
因此,在对表2中的列索引数据再次进行压缩之后,得到表3所示的内容。
表3
步骤103:在对所述索引信息列表中每一行对应的列索引数据压缩处理执行完毕后,根据压缩处理后得到的列索引数据,生成针对所述索引信息列表的索引数组。
在步骤103中,根据压缩处理后得到的列索引数据以及列索引数据的位置信息,当记录的列索引数据的行标号相同、且列标号不相同时,按照列标号的排列顺序,依次建立列索引数据之间的父子关系;以及当记录的多个列索引数据满足列标号相同、且行标号不相同、但在索引信息列表中该多个列索引数据分别对应的相邻前一列的列索引数据相同时,建立该多个列索引数据与记录的一个所述相邻前一列的列索引数据之间的父子关系。
仍以步骤102中得到表3所示的内容为例进行说明。例如:针对第零行记录的列索引数据1和2,按照列索引数据的列标号的排列顺序,建立1和2之间的父子关系,其中,位于第零行第零列的列索引数据1是位于第零行第一列的列索引数据2的父节点,位于第零行第一列的列索引数据2是位于第零行第零列的列索引数据1的直接后继节点。
对于第一行第一列的列索引数据5,在列索引数据没有进行压缩之前,第一行第一列的列索引数据5对应的第一行第零列的列索引数据1,第一行第零列的列索引数据1被执行压缩之后,与第零行第零列的列索引数据1进行了合并,因此,第一行第一列的列索引数据5将与第零行第零列的列索引数据1之间建立父子关系。
其中,位于第零行第零列的列索引数据1是位于第一行第一列的列索引数据5的父节点,位于第一行第一列的列索引数据5是位于第零行第零列的列索引数据1的直接后继节点。
由此可见,第零行第零列的列索引数据1对应得到了两个子节点。
根据确定的记录得到的各个列索引数据之间的对应关系,生成针对索引信息列表对应的索引数组。
索引数组不仅方便减少了索引信息列表中索引数据的存储容量,还为后续通过压缩后的索引数据查找其他索引数据提供方便。
需要说明的是,在确定记录得到的列索引数据之间的对应关系后,可以建立索引信息树,通过树结构中父子关系更加明确各个列索引数据之间的关系。
步骤104:在确定记录得到的各个列索引数据之间的关系之后,记录索引数组中每一个索引数据的标识信息。
在步骤104中,首先,针对记录得到的列索引数据,确定该列索引数据对应的一级子节点的个数。
具体地,分别确定得到的列索引数据的一级子节点个数,即直接后继节点的个数。
仍以步骤102中得到表3所示的内容为例进行说明。例如:第零行第零列的列索引数据1的一级子节点个数为2;第零行第一列的列索引数据2的一级子节点个数为0;第一行第一列的列索引数据5的一级子节点个数为0;第二行第零列的列索引数据4的一级子节点个数为1;第二行第一列的列索引数据10的一级子节点个数为2;第二行第二列的列索引数据8的一级子节点个数为2;第二行第三列的列索引数据5的一级子节点个数为0;第三行第三列的列索引数据30的一级子节点个数为0;第四行第二列的列索引数据20的一级子节点个数为0;第五行第零列的列索引数据17的一级子节点个数为0。
其次,在确定该列索引数据对应的一级子节点的个数非零时,确定该列索引数据的第一个子节点的行标号,并建立该列索引数据在索引数组中的标识信息。
其中,所述标识信息包括列索引数据的内容、列索引数据所在列的列标号、一级子节点的个数以及第一个子节点的行标号。
仍以步骤102中得到表3所示的内容为例进行说明。例如:第零行第零列的列索引数据1的一级子节点个数为2,选择行标号小的列索引数据作为第一子节点,得到该列索引数据的标识信息为(1,0,2,0),或者记录为第零列(1,2,0)。
第二行第零列的列索引数据4的一级子节点个数为1,得到的该索引数据的标识信息为(4,0,1,2),或者记录为第零列(4,1,2)。
第二行第一列的列索引数据10的一级子节点个数为2,得到的该索引数据的标识信息为(10,1,2,2),或者记录为第一列(10,2,2)。
第二行第二列的列索引数据8的一级子节点个数为2,得到的该索引数据的标识信息为(8,2,2,2),或者记录为第二列(8,2,2)。
最后,在确定该列索引数据对应的一级子节点的个数为零时,建立该列索引数据在索引数组中的标识信息。
其中,所述标识信息包括列索引数据的内容、列索引数据所在列的列标号、空以及列索引数据所在行的行标号。
仍以步骤102中得到表3所示的内容为例进行说明。例如:第零行第一列的列索引数据2的一级子节点个数为0,得到该列索引数据的标识信息为(2,1,0,0),或者记录为第一列(2,0,0)。
第一行第一列的列索引数据5的一级子节点个数为0,得到该列索引数据的标识信息为(5,1,0,1),或者记录为第一列(5,0,1)。
第二行第三列的列索引数据5的一级子节点个数为0,得到该列索引数据的标识信息为(5,3,0,2),或者记录为第三列(5,0,2)。
第三行第三列的列索引数据30的一级子节点个数为0,得到该列索引数据的标识信息为(30,3,0,3),或者记录为第三列(30,0,3)。
第四行第二列的列索引数据20的一级子节点个数为0,得到该列索引数据的标识信息为(20,2,0,4),或者记录为第二列(20,0,4)。
第五行第零列的列索引数据17的一级子节点个数为0,得到该列索引数据的标识信息为(17,0,0,5),或者记录为第零列(17,0,5)。
由此可见,通过上述方式压缩索引信息列表中的数据,并建立了多个列索引数据之间的位置关系,这样不仅节省了索引信息存储的容量,还为后续查找索引数据提供方便。
通过本申请实施例一的方案,在得到一个数据文件的索引信息列表之后,按照所述索引信息列表中列索引数据的排列顺序,依次比较相邻两行中同一列的列索引数据是否相同;当相邻两行中同一列的列索引数据相同时,对相同的列索引数据进行压缩;当所述相邻两行中同一列的列索引数据不相同时,记录所述相邻两行中比较结果不相同的同一列的列索引数据以及对应的位置信息,并压缩所述相邻两行中比较结果不相同的同一列之后的其他列的列索引数据;在对所述索引信息列表中每一行对应的列索引数据压缩处理执行完毕后,根据压缩处理后得到的列索引数据,生成针对所述索引信息列表的索引数组,与现有技术相比,本申请实施例在得到数据文件的索引信息列表之后,通过比较列标号相同、行标号相邻的列索引数据是否相同的操作,确定了索引信息列表中相邻两行中同一列中存在的重复的列索引数据,以及确定了索引信息列表中相邻两行中同一列中首次出现的不同的列索引数据。在新生成的索引数组中,对相邻两行中同一列中存在的重复的列索引数据进行压缩,以及对相邻两行中同一列中首次出现的不同的列索引数据之后的列索引数据不进行存储,这样得到的索引信息列表对应的索引数组,每一行中保留的最后一个列索引数据说明了索引信息列表中该行与相邻其他行的最大区别,对该列索引数据之前的重复列索引数据进行压缩,并且又不在索引数组中存储其后的列索引数据,相对与索引信息列表,存储容量大大减小,同时索引数组中数据量较小,还保证了列索引数据的查找效率。
实施例二:
如图2所示,为本申请实施例二提供的一种索引数据搜索方法的流程示意图,本申请实施例二是与本申请实施例一在同一发明构思下的发明。所述方法包括:
步骤201:接收搜索请求消息。
其中,所述搜索请求消息中包含了至少一个搜索关键词以及该搜索关键词对应的列标号。
在步骤201中,接收来自用户或者其他设备的搜索请求消息,该搜索请求消息用于表示待搜索的行索引数据对应列标号以及搜索关键词。
例如:接收到的搜索请求消息中携带了{4,10,30,2}。
其中,关键词4对应的列标号为0;关键词10对应的列标号为1;关键词30对应的列标号为2;关键词2对应的列标号为3。
步骤202:根据接收到的搜索关键词对应的列标号,依次将搜索关键词与索引数组中列标号相同的列索引数据进行比较,确定首次出现的列索引数据不小于接收到的所述搜索关键词的列索引数据。
在步骤202中,在接收到搜索请求消息之后,按照以下步骤查找到需要确定的行索引数据:
步骤2021:确定搜索请求消息中每一个搜索关键词以及该搜索关键词的列标号。
例如:搜索请求消息中携带的{4,10,30,2},搜索关键词4的列标号为0,搜索关键词10的列标号为1,搜索关键词30的列标号为2,搜索关键词2的列标号为3。
步骤2022:选择一个搜索关键词,并根据选择的搜索关键词对应的列标号,从索引数组中查找到与选择的搜索关键词的列标号相同、且数据内容不小于所述搜索关键词的列索引数据。
具体地,在步骤2022中,选择一个搜索关键词4,对应的列标号0。
根据该搜索关键词对应的列标号,从压缩处理后的索引数组中,查找是否存在于该搜索关键词的列标号相同、且数据内容不小于该搜索关键词的列索引数据,若存在,则执行步骤2023;否则,返回搜索失败。
仍以申请实施例一中表4所示的内容为例。例如:从压缩处理后的索引数组中,查找列标号为0对应的列索引数据:1,4,17。
其中,不小于选择的搜索关键词4的列索引数据为4和17。
步骤2023:当查找到的列索引数据的数据内容大于所述搜索关键词的数据内容时,进一步判断查找到的列索引数据按照排列顺序是否是第一个大于所述搜索关键词的列索引数据,若是,则确定所述列索引数据为待搜索的索引数据。
步骤2024:当查找到的列索引数据等于所述搜索关键词时,进一步判断查找到的列索引数据是否存在第一级子节点,若不存在,则确定所述列索引数据为待搜索的索引数据,若存在,跳转执行判断所述第一级节点的数据内容是否大于下一个搜索关键词的数据内容。
实施例三:
如图3所示,为本申请实施例三提供的一种索引数据压缩的设备的结构示意图,本申请实施例三是与本申请实施例一和本申请实施例二在同一发明构思下的发明,所述设备包括:比较模块11、压缩模块12和索引数组生成模块13,其中:
比较模块11,用于在得到一个数据文件的索引信息列表之后,按照所述索引信息列表中列索引数据的排列顺序,依次比较相邻两行中同一列的列索引数据是否相同;
压缩模块12,用于当相邻两行中同一列的列索引数据相同时,对相同的列索引数据进行压缩;当所述相邻两行中同一列的列索引数据不相同时,记录所述相邻两行中比较结果不相同的同一列的列索引数据以及对应的位置信息,并压缩所述相邻两行中比较结果不相同的同一列之后的其他列的列索引数据;
索引数组生成模块13,用于在对所述索引信息列表中每一行对应的列索引数据压缩处理执行完毕后,根据压缩处理后得到的列索引数据,生成针对所述索引信息列表的索引数组。
在申请的另一个实施方式中,所述比较模块11,具体用于从所述索引信息列表的第一行索引数据开始,对相邻两行中同一列列索引数据执行以下操作,直至所述相邻两行中同一列的列索引数据不相同时,结束对所述相邻两行中同一列的列索引数据是否相同进行判断的操作:
从相邻两行的第一列索引数据开始,依次比较相邻两行中同一列的列索引数据是否相同。
在申请的另一个实施方式中,所述设备还包括:记录模块14,其中:
记录模块14,用于当比较结果是相邻两行中同一列的列索引数据相同时,记录一个列索引数据以及该列索引数据的位置信息,并继续触发所述比较模块执行判断所述相邻两行中下一列的列索引数据是否相同的操作,其中,所述列索引数据的位置信息包括列标号和行标号;
当比较结果是相邻两行中同一列的列索引数据不相同时,记录比较结果不相同的每一列的列索引数据以及位置信息,结束对所述相邻两行中下一列的列索引数据是否相同进行判断的操作。
在申请的另一个实施方式中,所述压缩模块12,具体用于根据记录的列索引数据的位置信息,判断列标号相同但行标号相邻对应的两个列索引数据是否相同;
在判断结果是列标号相同但行标号相邻对应的两个列索引数据相同时,记录所述列索引数据以及所述列索引数据的一个位置信息,其中,所述位置信息中包含了列标号和行标号,所述行标号包含了所述列索引数据对应的多个行标号。
在申请的另一个实施方式中,所述压缩模块12,具体用于确定所述相邻两行中比较结果不相同的同一列之后的其他列的列索引数据不在索引信息列表对应的索引数组中显示。
在申请的另一个实施方式中,所述索引数组生成模块13,具体用于当记录的列索引数据的行标号相同、且列标号不相同时,按照列标号的排列顺序,依次建立列索引数据之间的父子关系;
以及当记录的多个列索引数据满足列标号相同、且行标号不相同、但在索引信息列表中该多个列索引数据分别对应的相邻前一列的列索引数据相同时,建立该多个列索引数据与记录的一个所述相邻前一列的列索引数据之间的父子关系。
所述设备还包括:标识信息生成模块15,其中:
标识信息生成模块15,用于在建立记录的列索引数据之间的父子关系之后,针对记录得到的列索引数据,确定该列索引数据对应的一级子节点的个数;
在确定该列索引数据对应的一级子节点的个数非零时,确定该列索引数据的第一个子节点的行标号,并建立该列索引数据在索引数组中的标识信息,其中,所述标识信息包括列索引数据的内容、列索引数据所在列的列标号、一级子节点的个数以及第一个子节点的行标号;
在确定该列索引数据对应的一级子节点的个数为零时,建立该列索引数据在索引数组中的标识信息,其中,所述标识信息包括列索引数据的内容、列索引数据所在列的列标号、空以及列索引数据所在行的行标号。
需要说明的是,本申请实施例所述的设备可以是软件设备、也可以是硬件设备,本申请不做限定。
实施例四:
如图4所示,为本申请实施例四的一种索引数据搜索的设备的结构示意图,本申请实施例四是与本申请实施例一~三在同一发明构思下的发明,所述设备包括:接收模块21和搜索模块22,其中:
接收模块21,用于接收搜索请求消息,其中,所述搜索请求消息中包含了至少一个搜索关键词以及该搜索关键词对应的列标号;
搜索模块22,用于根据接收到的搜索关键词对应的列标号,依次将搜索关键词与索引数组中列标号相同的列索引数据进行比较,确定首次出现的列索引数据不小于接收到的所述搜索关键词的列索引数据。
所述搜索模块22,具体用于选择一个搜索关键词,并根据选择的搜索关键词对应的列标号,从索引数组中查找到与选择的搜索关键词的列标号相同、且数据内容不小于所述搜索关键词的列索引数据;
当查找到的列索引数据的数据内容大于所述搜索关键词的数据内容时,进一步判断查找到的列索引数据按照排列顺序是否是第一个大于所述搜索关键词的列索引数据,若是,则确定所述列索引数据为待搜索的索引数据;
当查找到的列索引数据等于所述搜索关键词时,进一步判断查找到的列索引数据是否存在第一级子节点,若不存在,则确定所述列索引数据为待搜索的索引数据,若存在,跳转执行判断所述第一级节点的数据内容是否大于下一个搜索关键词的数据内容。
需要说明的是,本申请实施例所述的设备可以是软件设备、也可以是硬件设备,本申请不做限定。
本领域的技术人员应明白,本申请的实施例可提供为方法、装置(设备)、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本发明实施例的方法、装置(设备)和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。