一种数据查询的方法和装置
技术领域
本发明涉及计算机技术领域,特别涉及一种数据查询的方法和装置。
背景技术
随着计算机技术的不断发展,数据库技术也随之得到了飞快的发展。RDF(Resource Description Framework,资源描述框架)数据是数据库中一种非常常用的数据,一个RDF数据由主体、谓词、客体组成,例如,北京大学位于北京,其中,北京大学是主体,位于是谓词,北京是客体。数据查询是数据库中一种非常常用的处理。
G-Store算法是一种非常常用的数据库查询算法。在该算法中,可以对数据库中所有三元组中客体和谓词进行编码(一般为哈希编码),将谓词和客体的编码串联,并对同一主体对应的所有串联的编码进行“按位或”运算,得到的编码作为该主体的编码。然后将所有主体的编码作为叶子节点建立位向量查询树,具体可以基于预设的位向量查询树的层数和叶子节点数确定各层聚类的类数目,对主体的编码进行聚类,将同一类的编码进行“按位或”运算得到该类的编码,作为该类中各节点的上一级节点的编码,然后对所有上一级节点的编码再进行聚类,依此类推,直到将某级所有节点的编码进行“按位或”运算得到根节点。
在进行查询时,例如查询年龄(谓词)为50岁(客体)的主体,可以先对查询条件对应的谓词与客体的组合进行与上述方式同样的编码(得到的编码暂称作目标编码),然后在位向量查询树中从上至下查询,先判断根节点是否能够覆盖该目标编码(第一编码覆盖第二编码是指第二编码中为1的位对应的第一编码中相应位的数值都为1),如果能够覆盖则在第二级节点中查询编码能够覆盖该目标编码的节点,然后在查询到的节点的下级节点中查询编码能够覆盖该目标编码的节点,依此类推,直到在所有叶子节点对应的编码中,查询到能够覆盖目标编码的编码。最后,通过后验证算法,在查询到的编码中,确定最终与查询条件对应的编码,进而得到查询结果进行反馈。
在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
基于上述算法,在进行数值型数据的范围查询时,例如查询年龄在40-50岁的主体,需要对数值范围条件内的所有数值分别进行上述过程的查询,进而将所有查询结果进行合并,采用这种处理方式,如果范围很大,则处理量会非常的巨大,从而,进行数据查询的效率较低。
发明内容
为了解决现有技术的问题,本发明实施例提供了一种数据查询的方法和装置。所述技术方案如下:
第一方面,提供了一种数据查询的方法,所述方法包括:
基于预设编码算法,确定数据库中的数值型数据对应的编码,其中,所述预设编码算法包括根据预设层数,对所述数值型数据对应的数值范围进行多层二分处理,并根据所述数值型数据在每层划分出的各数值范围中所属的数值范围,确定所述数值型数据对应的编码;
根据所述数据库中各数值型数据对应的编码,建立位向量查询树;
当接收到携带有数值范围条件的查询请求时,基于所述预设编码算法,分别确定所述数值范围条件中上限的数值型数据对应的第一编码以及下限的数值型数据对应的第二编码;
根据所述位向量查询树,以及所述第一编码和所述第二编码进行按位与处理得到的第三编码,查询所述数据库中符合所述查询请求的数值型数据。
第二方面,提供了一种数据查询的装置,所述装置包括:
编码模块,用于基于预设编码算法,确定数据库中的数值型数据对应的编码,其中,所述预设编码算法包括根据预设层数,对所述数值型数据对应的数值范围进行多层二分处理,并根据所述数值型数据在每层划分出的各数值范围中所属的数值范围,确定所述数值型数据对应的编码;
建树模块,用于根据所述数据库中各数值型数据对应的编码,建立位向量查询树;
所述编码模块,用于当接收到携带有数值范围条件的查询请求时,基于所述预设编码算法,分别确定所述数值范围条件中上限的数值型数据对应的第一编码以及下限的数值型数据对应的第二编码;
查询模块,用于根据所述位向量查询树,以及所述第一编码和所述第二编码进行按位与处理得到的第三编码,查询所述数据库中符合所述查询请求的数值型数据。
本发明实施例提供的技术方案带来的有益效果是:
本发明实施例中,基于预设编码算法,确定数据库中的数值型数据对应的编码,其中,预设编码算法包括根据预设层数,对数值型数据对应的数值范围进行多层二分处理,并根据数值型数据在每层划分出的各数值范围中所属的数值范围,确定数值型数据对应的编码,根据数据库中各数值型数据对应的编码,建立位向量查询树,当接收到携带有数值范围条件的查询请求时,基于上述预设编码算法,分别确定该数值范围条件中上限的数值型数据对应的第一编码以及下限的数值型数据对应的第二编码,根据上述位向量查询树,以及第一编码和第二编码进行按位与处理得到的第三编码,查询数据库中符合上述查询请求的数值型数据。这样,在位向量查询树中只需要进行第三编码的查询,无需在位向量查询树中分别对数值范围条件内的所有数值进行查询,从而,可以提高数据查询的效率。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种数据查询的方法流程图;
图2a、2b、2c是本发明实施例提供的编码过程的示意图;
图3是本发明实施例提供的位向量查询树的示意图;
图4是本发明实施例提供的一种数据查询的装置结构示意图;
图5是本发明实施例提供的一种服务器的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
实施例一
本发明实施例提供了一种数据查询的方法,如图1所示,该方法的处理流程可以包括如下的步骤:
步骤101,基于预设编码算法,确定数据库中的数值型数据对应的编码,其中,预设编码算法包括根据预设层数,对数值型数据对应的数值范围进行多层二分处理,并根据数值型数据在每层划分出的各数值范围中所属的数值范围,确定数值型数据对应的编码。
步骤102,根据数据库中各数值型数据对应的编码,建立位向量查询树。
步骤103,当接收到携带有数值范围条件的查询请求时,基于上述预设编码算法,分别确定该数值范围条件中上限的数值型数据对应的第一编码以及下限的数值型数据对应的第二编码。
步骤104,根据上述位向量查询树,以及第一编码和第二编码进行按位与处理得到的第三编码,查询数据库中符合上述查询请求的数值型数据。
本发明实施例中,基于预设编码算法,确定数据库中的数值型数据对应的编码,其中,预设编码算法包括根据预设层数,对数值型数据对应的数值范围进行多层二分处理,并根据数值型数据在每层划分出的各数值范围中所属的数值范围,确定数值型数据对应的编码,根据数据库中各数值型数据对应的编码,建立位向量查询树,当接收到携带有数值范围条件的查询请求时,基于上述预设编码算法,分别确定该数值范围条件中上限的数值型数据对应的第一编码以及下限的数值型数据对应的第二编码,根据上述位向量查询树,以及第一编码和第二编码进行按位与处理得到的第三编码,查询数据库中符合上述查询请求的数值型数据。这样,在位向量查询树中只需要进行第三编码的查询,无需在位向量查询树中分别对数值范围条件内的所有数值进行查询,从而,可以提高数据查询的效率。
实施例二
本发明实施例提供了一种数据查询的方法,该方法的执行主体为数据库服务器。该方法可以是针对数值型数据的范围查询方法,该方法所针对的数值型数据可以是三元组的客体,也可以是独立的数据,本实施例中主要以数值型数据是三元组的客体为例进行方案的说明,其它情况与之类似,不再累述。在数据库中可以包含有大量的三元组,这些三元组中可能存在一些三元组的客体为数值型数据,如身高的数值、年龄的数值等。
下面将结合具体实施方式,对图1所示的处理流程进行详细的说明,内容可以如下:
步骤101,基于预设编码算法,确定数据库中的数值型数据对应的编码,其中,预设编码算法包括根据预设层数,对数值型数据对应的数值范围进行多层二分处理,并根据数值型数据在每层划分出的各数值范围中所属的数值范围,确定数值型数据对应的编码。
其中,多层二分处理是对数值范围进行多次二分的处理,具体可以将数值范围在其中点处分成两半得到两个数值范围,此即为第二层,再将第二层的两个数值范围分别在其中点处分成两半得到四个数值范围,此即为第三层,依此类推。可见第k层的数值范围的数目为2k。
在实施中,预设编码算法是对任意一个数值型数据进行编码的方法,其编码过程可以如下:
可以预先确定该数值型数据对应的数值范围,该数值范围可以由技术人员根据实际需求预先设置,也可以将其设置为数据库中的实际数据的数值范围,例如,如果数据库中存储的不是三元组而是独立的数据,那么可以将数据库中所有数值型数据中最大值和最小值之间的数值范围,作为这些数值型数据对应的数值范围。另外,上述预设层数可以是固定数值,或者,还可以根据预设的范围查询精度,来预先设置多层二分处理的层数k,范围查询精度可以认为是范围查询的最小区间长度L,相应的层数可以通过下面公式计算得到:
其中,vStart、vEnd分别为数值范围的下限和上限。通过式(1)就可以基于范围查询精度计算出不同数值范围对应的预设层数,并进行存储。
在对数值型数据进行编码时,可以对该数值型数据对应的数值范围进行预设层数的多层二分处理,具体的,将该数值范围作为第一层,将该数值范围在其中点处分成两半得到两个数值范围,此即为第二层,再将第二层的两个数值范围分别在其中点处分成两半得到四个数值范围,此即为第三层,依此类推,知道第k层,分层的结果可以如图2a、2b、2c所示,图中以4层为例。同时,根据该数值型数据在每层划分出的各数值范围中所属的数值范围,确定数值型数据对应的编码,具体确定编码的方式在后面内容中会有详细说明。
可选的,对于数值型数据为三元组的客体的情况,可以对应各谓词设置不同的数值范围,相应的,上述对数值型数据对应的数值范围进行多层二分处理,可以如下:确定数值型数据对应的谓词,并获取预先存储的确定出的谓词所对应的数值范围;根据预设层数,对数值范围进行多层二分处理。
在实施中,可以预先设置并存储每个谓词对应的数值范围,用于表示该谓词所对应的客体的可能的数值范围,例如,谓词年龄对应的数值范围可以为0-150,谓词身高对应的数值范围可以为10-260,等等。谓词和数值范围可以采用对应关系表的形式存储。在编码时,当前的数值型数据为某三元组的客体,可以先确定其所属的三元组的谓词,然后在上述对应关系表中,查找该谓词对应的数值范围。进而,可以根据预设层数,对该数值范围进行多层二分处理。
可选的,在步骤101之前还可以预先存储不同谓词对应的数值范围,相应的存储方式可以多种多样,以下给出了其中几种可行的存储方式:
方式一,存储数据库中每个谓词对应的预设的数值范围。
在实施中,可以由技术人员预先对数据库中的每个谓词设置其对应的数值范围,可以根据谓词对应的客体的数值特点进行设置。对于小部分的谓词,比如经纬度,身高,年龄等具有先验的知识,知道这些谓词的有其确定的值域范围。对于大部分的谓词,比如GDP、售价等,不能直接确定其值域区间,则需要估算一个值域范围,存储到对应关系表中。
方式二,确定数据库中的每个谓词对应的属于数值型数据的所有客体的数值范围,作为对应的谓词的数值范围进行存储。
在实施中,对于数据库中的每个谓词,可以获取该谓词对应的所有属于数值型数据的客体,找到这些客体的最大值和最小值,以确定这些客体的数值范围,作为该谓词对应的数值范围,进而将每个谓词和对应的数值范围存储到对应关系表中。
可选的,在步骤101中,对于根据数值型数据在每层划分出的各数值范围中所属的数值范围确定所述数值型数据对应的编码的处理,可以由多种多样的处理方法,以下给出了其中几种可行的处理方法:
处理一
对于每层划分出的各数值范围,将数值型数据所属的数值范围的编码设置为1,将其它数值范围的编码设置为0,并将各数值范围的编码按数值范围的顺序连接,得到每层对应的编码;将每层对应的编码按照层的顺序连接,得到该数值型数据对应的编码。
在实施中,可以从第一层开始编码,也可以从第二层或其它层开始编码。以数值范围是[-180,180]、预设层数k为4、待编码的数值型数据为89为例,参见图2a。第一层的数值范围为[-180,180],89属于该数值范围,所以该数值范围对应的编码可以为1,第一层对应的编码为1。第二层包括两个数值范围,分别为[-180,0)、[0,180],89属于[0,180],所以[0,180]对应的编码可以为1,[-180,0)对应的编码可以为0,那么按两个数值范围的先后顺序将0、1连接,则得到第二层对应的编码为01。同理可得第三层对应的编码为0010,第四层对应的编码为00000100。最后可以把这4层对应的4个编码,按照由上层到下层的顺序连接,该数值型数据对应的编码为101001000000100。
处理二
对于每层划分出的各数值范围,将数值型数据所属的数值范围和其相邻的前一个数值范围的编码设置为1,将其它数值范围的编码设置为0,并将各数值范围的编码按数值范围的顺序连接,得到每层对应的编码;将每层对应的编码按照层的顺序连接,得到数值型数据对应的编码。
在实施中,可以从第一层开始编码,也可以从第二层或其它层开始编码。以数值范围是[-180,180]、预设层数k为4、待编码的数值型数据为89为例,参见图2b。第一层的数值范围为[-180,180],89属于该数值范围,所以该数值范围对应的编码可以为1,第一层对应的编码为1。第二层包括两个数值范围,分别为[-180,0)、[0,180],89属于[0,180],所以[0,180]对应的编码可以为1,[-180,0)对应的编码可以为1,那么按两个数值范围的先后顺序将1、1连接,则得到第二层对应的编码为11。同理可得第三层对应的编码为0110,第四层对应的编码为00001100。最后可以把这4层对应的4个编码,按照由上层到下层的顺序连接,该数值型数据对应的编码为111011000001100。
处理三
对于每层划分出的各数值范围,将数值型数据所属的数值范围和其相邻的后一个数值范围的编码设置为1,将其它数值范围的编码设置为0,并将各数值范围的编码按数值范围的顺序连接,得到每层对应的编码;将每层对应的编码按照层的顺序连接,得到数值型数据对应的编码。
在实施中,可以从第一层开始编码,也可以从第二层或其它层开始编码。以数值范围是[-180,180]、预设层数k为4、待编码的数值型数据为89为例,参见图2c。第一层的数值范围为[-180,180],89属于该数值范围,所以该数值范围对应的编码可以为1,第一层对应的编码为1。第二层包括两个数值范围,分别为[-180,0)、[0,180],89属于[0,180],所以[0,180]对应的编码可以为1,[-180,0)对应的编码可以为0,那么按两个数值范围的先后顺序将0、1连接,则得到第二层对应的编码为01。同理可得第三层对应的编码为0011,第四层对应的编码为00000110。最后可以把这4层对应的4个编码,按照由上层到下层的顺序连接,该数值型数据对应的编码为101001100000110。
可选的,可以对上述的编码进行压缩,相应的,在处理一~处理三中,将每层对应的编码按照层的顺序连接得到数值型数据对应的编码的处理,可以具体如下:将每层对应的编码按照层的顺序连接,得到过渡编码;基于散列算法,将过渡编码中预设位数以后的编码,散列到过渡编码中预设位数内的数值为0的编码位上,得到数值型数据对应的编码。
其中,过渡编码可以为数值型数据对应的完整的未经过压缩的编码。
在实施中,数据库服务器可以存储一个预设位数u。基于上述内容,将每层对应的编码按照层的顺序连接,可以得到数值型数据对应的完整的没有经过压缩的编码,该编码可称作过渡编码。然后,可以基于散列算法对过渡编码进行压缩。在基于散列算法进行压缩的过程中,不会改变过渡编码前u位中的1,会将过渡编码中u位以后的编码进行压缩,并将压缩码散列到前u位中数值为0的位上,得到最终的经过压缩的编码。此经过压缩的编码即可以作为数值型数据对应的编码。
步骤102,根据数据库中各数值型数据对应的编码,建立位向量查询树。
其中,建立位向量查询树的处理过程中需要进行多个编码按位或的运算,按位或是指,将多个位数相同的编码中相对应编码位的数值进行“或”运算,得到结果编码中相应编码位的数值,简单的说,对于某个编码位,如果多个编码中存在任意一个编码在该编码位的数值为1,这按位或运算的结果编码中该编码位的数值为1,否则结果编码中该编码位的数值为0。例如,1001和1010进行按位或运算的结果为1011。
在实施中,对于上述数值型数据为独立数据的情况,可以直接根据数据库中各数值型数据对应的编码,建立位向量查询树。
对于上述数值型数据为三元组的客体的情况,除了进行上述对客体的编码,还可以对谓词进行编码,对谓词编码的算法多种多样,可以任意选择,例如,可以采用哈希算法等。然后,对于每个三元组,可以确定其谓词和客体的组合编码,具体可以将谓词的编码和客体的编码顺序连接得到组合编码,也可以将谓词的编码和客体的编码进行按位或运算得到组合编码。进而,可以将数据库中同一主体对应的组合编码进行按位或运算,得到的编码作为该主体的编码。再后,将所有主体的编码作为叶子节点建立位向量查询树,具体可以基于预设的位向量查询树的层数m和叶子节点数q确定各层聚类的类数目,对叶子节点的编码进行聚类,将同一类的编码进行按位或运算得到该类的总编码,作为该类中所有节点的上一级节点的编码,然后对得到的所有上一级节点的编码再进行聚类,依此类推,直到将某级所有节点的编码进行按位或运算得到根节点。这样,就可以得到所有节点的编码,以建立起位向量查询树。
例如,以m为4、q为1000为例,参见图3的位向量查询树示意图,可以设置根节点的下一层(即第二层)的节点数为10,再下一层(即第三层)的节点数为100,最下层的叶子节点数为1000,此时,可以设置叶子节点的编码进行聚类的类数目为100,这样聚类并进行按位或运算后,可以得到100个编码,分别作为第三层的各节点的编码,此时,可以设置第三层节点的编码进行聚类的类数目为10,这样聚类并进行按位或运算后,可以得到10个编码,分别作为第二层的各节点的编码,此时,可以对第二层各节点的编码进行按位或运算,得到根节点(即第一层的节点)的编码。
步骤103,当接收到携带有数值范围条件的查询请求时,基于上述预设编码算法,分别确定该数值范围条件中上限的数值型数据对应的第一编码以及下限的数值型数据对应的第二编码。
其中,数值范围条件可以为查询请求所查询的数值范围的信息,可以包括上限和下限,该上限和下限均可以为数值型数据。
在实施中,对于上述数值型数据为独立数据的情况,用户或技术人员可以通过其终端输入数值范围条件,进而向数据库服务器发送携带此数值范围条件的查询请求。
对于上述数值型数据为三元组的客体的情况,用户或技术人员可以通过其终端输入谓词和数值范围条件,例如,用户查询数据库中年龄在20-30岁的人,其中,谓词为年龄,数值范围条件为20-30,此查询请求可以查询符合条件的主体。然后,终端向服务器发送的查询请求中除了携带有数值范围条件,还可以携带有上限的数值型数据和下限的数值型数据对应的谓词。
对于上述两种情况,数据库服务器接收到查询请求后,可以解析查询请求获取其中的上限和下限,进而,可以采用上述预设编码算法,对上限的数值型数据进行编码,得到第一编码,对下限的数值型数据进行编码,得到第二编码。相应的编码过程可以参见步骤101中的相关内容,此处不再累述。
上述对数据库中各数值型数据、上限的数值型数据和下限的数值型数据进行编码的编码位数可以相同。
步骤104,根据上述位向量查询树,以及第一编码和第二编码进行按位与处理得到的第三编码,查询数据库中符合上述查询请求的查询结果。
其中,按位与一种运算方法,具体算法是,将多个位数相同的编码中相对应编码位的数值进行“与”运算,得到结果编码中相应编码位的数值,简单的说,对于某个编码位,如果多个编码中存在任意一个编码在该编码位的数值为0,这按位或运算的结果编码中该编码位的数值为0,否则结果编码中该编码位的数值为1。例如,1001和1010进行按位或运算的结果为1000。
在实施中,可以先将第一编码和第二编码进行按位与运算得到的第三编码。后续的处理分为以下几种情况分别说明。
情况一,对于上述数值型数据为独立数据的情况,可以使用第三编码在上述位向量查询树中进行查询。此时,可以查询到能够覆盖第三编码的对应叶子节点的编码,其中,编码a覆盖编码b是指编码b中为1的编码位对应的编码a中相应编码位的数值都为1。因为查询到的编码能够覆盖第三编码,所以可以近似认为如果查询到的编码对应的数据为数值型数据,则该数值型数据在上述数值范围条件的范围内。
情况二,对于上述数值型数据为三元组的客体的情况,如果上述谓词和客体的组合编码是通过按位或运算的方式得到,则可以使用第三编码在上述位向量查询树中进行查询,可以查询到能够覆盖第三编码的对应叶子节点的编码。因为查询到的对应叶子节点的编码为数据库中某主体的编码,且能够覆盖第三编码,又主体的编码可以覆盖客体的编码,所以可以近似的认为查询到的编码对应的主体在数据库中所对应的某个属于数值型数据的客体在上述数值范围条件的范围内。
情况三,对于上述数值型数据为三元组的客体的情况,如果上述谓词和客体的组合编码是通过顺序连接的方式得到,则可以采用与数据库中谓词编码相同的编码方式,对查询请求中的谓词进行编码,然后将谓词和第三编码顺序连接得到第四编码,进而可以使用第四编码在上述位向量查询树中进行查询,可以查询到能够覆盖第四编码的对应叶子节点的编码。因为查询到的对应叶子节点的编码为数据库中某主体的编码,且能够覆盖第四编码,又主体的编码可以覆盖谓词与客体的组合编码,所以可以近似的认为查询到的编码对应的主体在数据库中所对应的某个属于数值型数据的客体在上述数值范围条件的范围内。然后,对于上述几种情况查询到的编码,可以通过后验证算法,在查询到的编码中,确定最终与查询条件对应的编码。对于情况一,最终确定出的编码所对应的数据为某数值型数据,该数值型数据即为查询结果,可以将其反馈给查询请求的发送方。对于情况二和情况三,最终确定出的编码所对应的数据为数据库中的某主体,该主体即为查询结果,可以将其反馈给查询请求的发送方。
本发明实施例中,基于预设编码算法,确定数据库中的数值型数据对应的编码,其中,预设编码算法包括根据预设层数,对数值型数据对应的数值范围进行多层二分处理,并根据数值型数据在每层划分出的各数值范围中所属的数值范围,确定数值型数据对应的编码,根据数据库中各数值型数据对应的编码,建立位向量查询树,当接收到携带有数值范围条件的查询请求时,基于上述预设编码算法,分别确定该数值范围条件中上限的数值型数据对应的第一编码以及下限的数值型数据对应的第二编码,根据上述位向量查询树,以及第一编码和第二编码进行按位与处理得到的第三编码,查询数据库中符合上述查询请求的数值型数据。这样,在位向量查询树中只需要进行第三编码的查询,无需在位向量查询树中分别对数值范围条件内的所有数值进行查询,从而,可以提高数据查询的效率。
实施例三
基于相同的技术构思,本发明实施例还提供了一种数据查询的装置,如图4所示,该装置包括:
编码模块410,用于基于预设编码算法,确定数据库中的数值型数据对应的编码,其中,所述预设编码算法包括根据预设层数,对所述数值型数据对应的数值范围进行多层二分处理,并根据所述数值型数据在每层划分出的各数值范围中所属的数值范围,确定所述数值型数据对应的编码;
建树模块420,用于根据所述数据库中各数值型数据对应的编码,建立位向量查询树;
所述编码模块410,用于当接收到携带有数值范围条件的查询请求时,基于所述预设编码算法,分别确定所述数值范围条件中上限的数值型数据对应的第一编码以及下限的数值型数据对应的第二编码;
查询模块430,用于根据所述位向量查询树,以及所述第一编码和所述第二编码进行按位与处理得到的第三编码,查询所述数据库中符合所述查询请求的数值型数据。
可选的,所述数值型数据为三元组的客体;所述查询请求中还携带有所述上限的数值型数据和所述下限的数值型数据对应的谓词;
所述编码模块410,用于:
确定所述数值型数据对应的谓词,并获取预先存储的确定出的谓词所对应的数值范围;
根据预设层数,对所述数值范围进行多层二分处理。
可选的,所述装置还包括存储模块,用于:
存储所述数据库中每个谓词对应的预设的数值范围;或者,
确定所述数据库中的每个谓词对应的属于数值型数据的所有客体的数值范围,作为对应的谓词的数值范围进行存储。
可选的,所述编码模块410,用于:
对于每层划分出的各数值范围,将所述数值型数据所属的数值范围的编码设置为1,将其它数值范围的编码设置为0,并将所述各数值范围的编码按数值范围的顺序连接,得到每层对应的编码;
将每层对应的编码按照层的顺序连接,得到所述数值型数据对应的编码。
可选的,所述编码模块410,用于:
对于每层划分出的各数值范围,将所述数值型数据所属的数值范围和其相邻的前一个数值范围的编码设置为1,将其它数值范围的编码设置为0,并将所述各数值范围的编码按数值范围的顺序连接,得到每层对应的编码;将每层对应的编码按照层的顺序连接,得到所述数值型数据对应的编码;或者,
对于每层划分出的各数值范围,将所述数值型数据所属的数值范围和其相邻的后一个数值范围的编码设置为1,将其它数值范围的编码设置为0,并将所述各数值范围的编码按数值范围的顺序连接,得到每层对应的编码;将每层对应的编码按照层的顺序连接,得到所述数值型数据对应的编码。
可选的,所述编码模块,用于:
将每层对应的编码按照层的顺序连接,得到过渡编码;
基于散列算法,用于将所述过渡编码中预设位数以后的编码,散列到所述过渡编码中预设位数内的数值为0的编码位上,得到所述数值型数据对应的编码。
本发明实施例中,基于预设编码算法,确定数据库中的数值型数据对应的编码,其中,预设编码算法包括根据预设层数,对数值型数据对应的数值范围进行多层二分处理,并根据数值型数据在每层划分出的各数值范围中所属的数值范围,确定数值型数据对应的编码,根据数据库中各数值型数据对应的编码,建立位向量查询树,当接收到携带有数值范围条件的查询请求时,基于上述预设编码算法,分别确定该数值范围条件中上限的数值型数据对应的第一编码以及下限的数值型数据对应的第二编码,根据上述位向量查询树,以及第一编码和第二编码进行按位与处理得到的第三编码,查询数据库中符合上述查询请求的数值型数据。这样,在位向量查询树中只需要进行第三编码的查询,无需在位向量查询树中分别对数值范围条件内的所有数值进行查询,从而,可以提高数据查询的效率。
需要说明的是:上述实施例提供的数据查询的装置在数据查询时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的数据查询的装置与数据查询的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
实施例四
图5是本发明实施例提供的服务器1900的结构示意图,该服务器1900可以用作上述数据库服务器。该服务器1900可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(central processing units,CPU)1922(例如,一个或一个以上处理器)和存储器1932,一个或一个以上存储应用程序1942或数据1944的存储介质1930(例如一个或一个以上海量存储设备)。其中,存储器1932和存储介质1930可以是短暂存储或持久存储。存储在存储介质1930的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对统计服务器中的一系列指令操作。更进一步地,中央处理器1922可以设置为与存储介质1930通信,在数据查询服务器上执行存储介质1930中的一系列指令操作。
服务器1900还可以包括一个或一个以上电源1926,一个或一个以上有线或无线网络接口1950,一个或一个以上输入输出接口1958,一个或一个以上键盘1956,和/或,一个或一个以上操作系统1941,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等等。
服务器1900可以包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行所述一个或者一个以上程序包含用于进行以下操作的指令:
基于预设编码算法,确定数据库中的数值型数据对应的编码,其中,所述预设编码算法包括根据预设层数,对所述数值型数据对应的数值范围进行多层二分处理,并根据所述数值型数据在每层划分出的各数值范围中所属的数值范围,确定所述数值型数据对应的编码;
根据所述数据库中各数值型数据对应的编码,建立位向量查询树;
当接收到携带有数值范围条件的查询请求时,基于所述预设编码算法,分别确定所述数值范围条件中上限的数值型数据对应的第一编码以及下限的数值型数据对应的第二编码;
根据所述位向量查询树,以及所述第一编码和所述第二编码进行按位与处理得到的第三编码,查询所述数据库中符合所述查询请求的数值型数据。
可选的,所述数值型数据为三元组的客体;所述查询请求中还携带有所述上限的数值型数据和所述下限的数值型数据对应的谓词;
所述根据预设层数,对所述数值型数据对应的数值范围进行多层二分处理,包括:
确定所述数值型数据对应的谓词,并获取预先存储的确定出的谓词所对应的数值范围;
根据预设层数,对所述数值范围进行多层二分处理。
可选的,所述基于预设编码算法,确定数据库中的数值型数据对应的编码之前,还包括:
存储所述数据库中每个谓词对应的预设的数值范围;或者,
确定所述数据库中的每个谓词对应的属于数值型数据的所有客体的数值范围,作为对应的谓词的数值范围进行存储。
可选的,所述根据所述数值型数据在每层划分出的各数值范围中所属的数值范围,确定所述数值型数据对应的编码,包括:
对于每层划分出的各数值范围,将所述数值型数据所属的数值范围的编码设置为1,将其它数值范围的编码设置为0,并将所述各数值范围的编码按数值范围的顺序连接,得到每层对应的编码;
将每层对应的编码按照层的顺序连接,得到所述数值型数据对应的编码。
可选的,所述根据所述数值型数据在每层划分出的各数值范围中所属的数值范围,确定所述数值型数据对应的编码,包括:
对于每层划分出的各数值范围,将所述数值型数据所属的数值范围和其相邻的前一个数值范围的编码设置为1,将其它数值范围的编码设置为0,并将所述各数值范围的编码按数值范围的顺序连接,得到每层对应的编码;将每层对应的编码按照层的顺序连接,得到所述数值型数据对应的编码;或者,
对于每层划分出的各数值范围,将所述数值型数据所属的数值范围和其相邻的后一个数值范围的编码设置为1,将其它数值范围的编码设置为0,并将所述各数值范围的编码按数值范围的顺序连接,得到每层对应的编码;将每层对应的编码按照层的顺序连接,得到所述数值型数据对应的编码。
可选的,所述将每层对应的编码按照层的顺序连接,得到所述数值型数据对应的编码,包括:
将每层对应的编码按照层的顺序连接,得到过渡编码;
基于散列算法,将所述过渡编码中预设位数以后的编码,散列到所述过渡编码中预设位数内的数值为0的编码位上,得到所述数值型数据对应的编码。
本发明实施例中,基于预设编码算法,确定数据库中的数值型数据对应的编码,其中,预设编码算法包括根据预设层数,对数值型数据对应的数值范围进行多层二分处理,并根据数值型数据在每层划分出的各数值范围中所属的数值范围,确定数值型数据对应的编码,根据数据库中各数值型数据对应的编码,建立位向量查询树,当接收到携带有数值范围条件的查询请求时,基于上述预设编码算法,分别确定该数值范围条件中上限的数值型数据对应的第一编码以及下限的数值型数据对应的第二编码,根据上述位向量查询树,以及第一编码和第二编码进行按位与处理得到的第三编码,查询数据库中符合上述查询请求的数值型数据。这样,在位向量查询树中只需要进行第三编码的查询,无需在位向量查询树中分别对数值范围条件内的所有数值进行查询,从而,可以提高数据查询的效率。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。