索引构建方法、查询方法及装置.pdf

上传人:e2 文档编号:6334460 上传时间:2019-06-02 格式:PDF 页数:23 大小:1.58MB
返回 下载 相关 举报
摘要
申请专利号:

CN201510887819.9

申请日:

2015.12.07

公开号:

CN105550225A

公开日:

2016.05.04

当前法律状态:

实审

有效性:

审中

法律详情:

实质审查的生效IPC(主分类):G06F 17/30申请日:20151207|||公开

IPC分类号:

G06F17/30

主分类号:

G06F17/30

申请人:

百度在线网络技术(北京)有限公司

发明人:

覃安; 谭待

地址:

100085 北京市海淀区上地十街10号百度大厦

优先权:

专利代理机构:

北京鸿德海业知识产权代理事务所(普通合伙) 11412

代理人:

袁媛

PDF下载: PDF下载
内容摘要

本发明提供一种索引构建方法、查询方法及装置。在索引构建过程中,从查询请求的查询条件中提取查询项,获取用于指示满足查询项的数据所在数据行的数据行指示信息,将查询项及对应的数据行指示信息作为索引存储到索引文件中,由于不依赖于数据文件中的数据布局,因此不会破坏现有的数据布局,实现相对简单。另外,在使用索引文件进行数据查询过程中,根据索引文件中存储的已有查询项和已有查询项对应的数据行指示信息,对当前查询条件中能够被改写的查询项进行改写,使得改写后的查询条件变得相对简单,可以减少IO次数,有利于提高查询效率。

权利要求书

1.一种索引构建方法,其特征在于,包括:
获取用于查询第一数据文件的查询请求;
从所述查询请求的查询条件中提取至少一个查询项;
获取各查询项对应的数据行指示信息,所述数据行指示信息用于指示满足
所述数据行指示信息对应查询项的数据所在的数据行;
将所述各查询项以及所述各查询项对应的数据行指示信息对应存储在所述
第一数据文件的索引文件。
2.根据权利要求1所述的方法,其特征在于,所述从所述查询请求的查询
条件中提取至少一个查询项,包括:
以所述查询条件中的逻辑运算符为分隔符,提取所述查询条件中被所述分
隔符分割出的各部分作为所述查询项。
3.根据权利要求1所述的方法,其特征在于,所述各查询项包括数据列的
名称、运算符以及目标数值;
所述获取各查询项对应的数据行指示信息,包括:
根据所述各查询项中数据列的名称,从所述第一数据文件中读取所述各查
询项对应的数据列;
根据所述各查询项中的运算符和目标数值,确定所述各查询项对应的数据
列中满足相应查询项的数据所在的数据行;
根据所述各查询项对应的数据列中满足相应查询项的数据所在的数据行,
生成所述各查询项对应的数据行指示信息。
4.根据权利要求3所述的方法,其特征在于,所述将所述各查询项以及所
述各查询项对应的数据行指示信息对应存储在所述第一数据文件的索引文件,
包括:
将所述各查询项中对应相同数据列的查询项以及所述对应相同数据列的查
询项对应的数据行指示信息存储在所述索引文件的同一区域内;
其中,在同一区域内,所述对应相同数据列的查询项以及所述对应相同数
据列的查询项对应的数据行指示信息按照目标数值的大小依次存储。
5.根据权利要求3所述的方法,其特征在于,所述将所述各查询项以及所
述各查询项对应的数据行指示信息对应存储在所述第一数据文件的索引文件之
前,包括:
对于每个查询项,判断所述查询项中的运算符是否属于关系运算符;
当所述查询项中的运算符属于关系运算符时,判断所述查询项中的运算符
是否属于预先规定的可以存储到所述索引文件中的运算符;
若判断结果为否,则对所述查询项以及所述查询项对应的数据行指示信息
进行取反操作,以获得取反后的查询项以及所述取反后的查询项对应的数据行
指示信息。
6.根据权利要求1-5任一项所述的方法,其特征在于,所述将所述各查询
项以及所述各查询项对应的数据行指示信息对应存储在所述第一数据文件的索
引文件之前,还包括:
根据所述各查询项中运算符和/或目标数值的类型,确定所述各查询项适用
的逻辑存储结构;
所述将所述各查询项以及所述各查询项对应的数据行指示信息对应存储在
所述第一数据文件的索引文件,包括:
按照所述各查询项适用的逻辑存储结构,将所述各查询项以及所述各查询
项对应的数据行指示信息存储到所述第一数据文件的索引文件。
7.一种查询方法,其特征在于,包括:
接收当前用于查询第一数据文件的查询请求;
从所述查询请求的查询条件中提取至少一个查询项;
根据所述第一数据文件的索引文件中存储的已有查询项和所述已有查询项
对应的数据行指示信息,对所述至少一个查询项中能够被改写的查询项进行改
写;所述数据行指示信息用于指示满足所述已有查询项的数据所在的数据行;
根据所述至少一个查询项中被改写的查询项和未被改写的查询项,在所述
第一数据文件中进行查询,以获取待查询的数据。
8.根据权利要求7所述的方法,其特征在于,所述根据所述第一数据文件
的索引文件中存储的已有查询项和所述已有查询项对应的数据行指示信息,对
所述至少一个查询项中能够被改写的查询项进行改写,包括:
对于所述至少一个查询项中的每个查询项,将所述查询项在所述索引文件
中进行匹配;
若在所述索引文件中匹配到与所述查询项相同的已有查询项,则根据所述
匹配到的已有查询项对应的数据行指示信息对所述查询项进行改写。
9.根据权利要求8所述的方法,其特征在于,若在所述索引文件中未匹配
到与所述查询项相同的已有查询项,所述方法还包括:
在所述查询项表示数值范围时,判断在所述索引文件中是否能够匹配到数
据范围被所述查询项包含或包含所述查询项的已有查询项;
若判断结果为是,则根据所述匹配到的已有查询项表示的数值范围和所述
查询项表示的数值范围,将所述查询项拆分为可改写部分和不可改写部分,并
根据所述匹配到的已有查询项对应的数据行指示信息对所述可改写部分进行,
将所述不可改写部分作为新的查询项。
10.根据权利要求9所述的方法,其特征在于,还包括:
若判断结果为否,则获取所述查询项对应的数据行指示信息,并将所述查
询项以及所述查询项对应的数据行指示信息对应存储到所述索引文件。
11.一种索引构建装置,其特征在于,包括:
请求获取模块,用于获取用于查询第一数据文件的查询请求;
提取模块,用于从所述查询请求的查询条件中提取至少一个查询项;
信息获取模块,用于获取各查询项对应的数据行指示信息,所述数据行指
示信息用于指示满足所述数据行指示信息对应查询项的数据所在的数据行;
索引构建模块,用于将所述各查询项以及所述各查询项对应的数据行指示
信息对应存储在所述第一数据文件的索引文件。
12.根据权利要求11所述的装置,其特征在于,所述提取模块具体用于:
以所述查询条件中的逻辑运算符为分隔符,提取所述查询条件中被所述分
隔符分割出的各部分作为所述查询项。
13.根据权利要求11所述的装置,其特征在于,所述各查询项包括数据列
的名称、运算符以及目标数值;
所述信息获取模块具体用于:
根据所述各查询项中数据列的名称,从所述第一数据文件中读取所述各查
询项对应的数据列;
根据所述各查询项中的运算符和目标数值,确定所述各查询项对应的数据
列中满足相应查询项的数据所在的数据行;
根据所述各查询项对应的数据列中满足相应查询项的数据所在的数据行,
生成所述各查询项对应的数据行指示信息。
14.根据权利要求13所述的装置,其特征在于,所述索引构建模块具体用
于:
将所述各查询项中对应相同数据列的查询项以及所述对应相同数据列的查
询项对应的数据行指示信息存储在所述索引文件的同一区域内;
其中,在同一区域内,所述对应相同数据列的查询项以及所述对应相同数
据列的查询项对应的数据行指示信息按照目标数值的大小依次存储。
15.根据权利要求13所述的装置,其特征在于,所述索引构建模块还用于:
对于每个查询项,判断所述查询项中的运算符是否属于关系运算符;
当所述查询项中的运算符属于关系运算符时,判断所述查询项中的运算符
是否属于预先规定的可以存储到所述索引文件中的运算符;
若判断结果为否,则对所述查询项以及所述查询项对应的数据行指示信息
进行取反操作,以获得取反后的查询项以及所述取反后的查询项对应的数据行
指示信息。
16.根据权利要求11-15任一项所述的装置,其特征在于,所述索引构建
模块具体用于:
根据所述各查询项中运算符和/或目标数值的类型,确定所述各查询项适用
的逻辑存储结构;
按照所述各查询项适用的逻辑存储结构,将所述各查询项以及所述各查询
项对应的数据行指示信息存储到所述第一数据文件的索引文件。
17.一种查询装置,其特征在于,包括:
接收模块,用于接收当前用于查询第一数据文件的查询请求;
提取模块,用于从所述查询请求的查询条件中提取至少一个查询项;
改写模块,用于根据所述第一数据文件的索引文件中存储的已有查询项和
所述已有查询项对应的数据行指示信息,对所述至少一个查询项中能够被改写
的查询项进行改写;所述数据行指示信息用于指示满足所述已有查询项的数据
所在的数据行;
查询模块,用于根据所述至少一个查询项中被改写的查询项和未被改写的
查询项,在所述第一数据文件中进行查询,以获取待查询的数据。
18.根据权利要求17所述的装置,其特征在于,所述改写模块具体用于:
对于所述至少一个查询项中的每个查询项,将所述查询项在所述索引文件
中进行匹配;
若在所述索引文件中匹配到与所述查询项相同的已有查询项,则根据所述
匹配到的已有查询项对应的数据行指示信息对所述查询项进行改写。
19.根据权利要求18所述的装置,其特征在于,所述改写模块还用于:
若在所述索引文件中未匹配到与所述查询项相同的已有查询项,当所述查
询项表示数值范围时,判断在所述索引文件中是否能够匹配到数据范围被所述
查询项包含或包含所述查询项的已有查询项;
若判断结果为是,则根据所述匹配到的已有查询项表示的数值范围和所述
查询项表示的数值范围,将所述查询项拆分为可改写部分和不可改写部分,并
根据所述匹配到的已有查询项对应的数据行指示信息对所述可改写部分进行,
将所述不可改写部分作为新的查询项。
20.根据权利要求19所述的装置,其特征在于,还包括:
更新模块,用于在判断结果为否时,获取所述查询项对应的数据行指示信
息,并将所述查询项以及所述查询项对应的数据行指示信息对应存储到所述索
引文件。

说明书

索引构建方法、查询方法及装置

【技术领域】

本发明涉及数据库技术领域,尤其涉及一种索引构建方法、查询方法及
装置。

【背景技术】

在现有存储系统中,一种加快数据查询速度的常用而有效的方法是利用
数据访问的局部性(DataLocality)来为常用的数据区间建立索引。然而,
现有建立索引的方法都需要先验知识,即知道那些属性的数据访问频率高才
能建立。同时,索引一旦建立完成,对索引进行更新也是一项异常繁重的工
作;同时还伴随着索引与数据、索引与索引之间的一致性等问题。这些问题
进一步制约了索引加速数据访问的灵活性和可扩展性,也提高了索引的使用
成本。

针对上述问题,出现了自适应索引技术(AdaptiveIndexing)。一种自
适应索引技术具体为:根据用户的查询序列,将数据分裂成不同的数据片,
并通过交换排序来逐步形成分片有序(即索引),进而为后续用户的查询提
供加速条件。另一种自适应索引技术具体为:将每个记录数据视为孤立的数
据点,随着用户查询请求的不断到来,符合用户查询需求的数据点自动聚合
(Merging)在一起,逐步形成分片有序(即索引),进而为后续用户的查
询提供加速条件。

在上述自适应索引技术中,均需要挪动数据的物理位置。而在百TB级
到PB级别的大型存储系统中,数据被切成多个数据块(DataBlock),分
布在不同的存储节点上;而且,为了容错,每个数据块都多个副本。在这样
的场景下移动数据需要跨越分布在不同网络区域的存储节点才能完成,而且
需要同时修改多个副本,实现代价极高,可行性较差。

【发明内容】

本发明的多个方面提供一种索引构建方法、查询方法及装置,用以为大
数据存储系统创建索引,提高查询效率。

本发明的一方面,提供一种索引构建方法,包括:

获取用于查询第一数据文件的查询请求;

从所述查询请求的查询条件中提取至少一个查询项;

获取各查询项对应的数据行指示信息,所述数据行指示信息用于指示满
足所述数据行指示信息对应查询项的数据所在的数据行;

将所述各查询项以及所述各查询项对应的数据行指示信息对应存储在
所述第一数据文件的索引文件。

本发明的另一方面,提供一种查询方法,包括:

接收当前用于查询第一数据文件的查询请求;

从所述查询请求的查询条件中提取至少一个查询项;

根据所述第一数据文件的索引文件中存储的已有查询项和所述已有查询项
对应的数据行指示信息,对所述至少一个查询项中能够被改写的查询项进行改
写;所述数据行指示信息用于指示满足所述已有查询项的数据所在的数据行;

根据所述至少一个查询项中被改写的查询项和未被改写的查询项,在所
述第一数据文件中进行查询,以获取待查询的数据。

本发明的又一方面,提供一种搜索构建装置,包括:

请求获取模块,用于获取用于查询第一数据文件的查询请求;

提取模块,用于从所述查询请求的查询条件中提取至少一个查询项;

信息获取模块,用于获取各查询项对应的数据行指示信息,所述数据行指
示信息用于指示满足所述数据行指示信息对应查询项的数据所在的数据行;

索引构建模块,用于将所述各查询项以及所述各查询项对应的数据行指
示信息对应存储在所述第一数据文件的索引文件。

本发明的又一方面,提供一种查询装置,包括:

接收模块,用于接收当前用于查询第一数据文件的查询请求;

提取模块,用于从所述查询请求的查询条件中提取至少一个查询项;

改写模块,用于根据所述第一数据文件的索引文件中存储的已有查询项和
所述已有查询项对应的数据行指示信息,对所述至少一个查询项中能够被改写
的查询项进行改写;所述数据行指示信息用于指示满足所述已有查询项的数据
所在的数据行;

查询模块,用于根据所述至少一个查询项中被改写的查询项和未被改写
的查询项,在所述第一数据文件中进行查询,以获取待查询的数据。

由上述技术方案可知,本发明从查询请求的查询条件中提取查询项,获
取用于指示满足查询项的数据所在数据行的数据行指示信息,进而将查询项
及查询项对应的数据行指示信息作为该数据文件的索引存储到索引文件中,
该索引构建过程不依赖于数据文件中的数据布局,因此不会破坏现有的数据
布局,实现相对简单。另外,本发明在使用索引文件进行数据查询过程中,
根据索引文件中存储的已有查询项和已有查询项对应的数据行指示信息,对
当前查询条件中能够被改写的查询项进行改写,使得改写后的查询条件变得
相对简单,可以减少IO次数,有利于提高查询效率。

【附图说明】

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有
技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的
附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造
性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明一实施例提供的索引构建方法的流程示意图;

图2为本发明另一实施例提供的查询方法的流程示意图;

图3为本发明又一实施例提供的本发明与现有查询方法的效果对比示意
图;

图4为本发明又一实施例提供的本发明与业务同类系统的效果对比示意
图;

图5为本发明又一实施例提供的索引构建装置的结构示意图;

图6为本发明又一实施例提供的查询装置的结构示意图;

图7为本发明又一实施例提供的查询装置的结构示意图。

【具体实施方式】

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发
明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,
显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于
本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获
得的所有其他实施例,都属于本发明保护的范围。

图1为本发明一实施例提供的索引构建方法的流程示意图。如图1所示,
该方法包括:

101、获取用于查询第一数据文件的查询请求。

102、从查询请求的查询条件中提取至少一个查询项。

103、获取各查询项对应的数据行指示信息,该数据行指示信息用于指
示满足该数据行指示信息对应的查询项的数据所在的数据行。

104、将上述各查询项以及各查询项对应的数据行指示信息对应存储在
第一数据文件的索引文件中。

本实施例提供的索引构建方法可用于为任意数据文件构建索引,为便于
描述,本实施例将需要构建索引的数据文件称为第一数据文件,这里的“第
一”既没有先后顺序的概念,也没有数量的概念。优选的,第一数据文件为
以列为单位的列式存储文件。

为加快对第一数据文件的查询速度,本实施例提供一种为第一数据文件
构建索引的方法。为了在为第一数据文件构建索引的过程中不影响第一数据
文件中数据的布局,例如不移动数据的物理位置,降低构建索引的代价,本
实施例在构建索引过程中不依赖于第一数据文件的数据布局,而是通过从查
询请求的查询条件中提取查询项,获取用于指示满足查询项的数据所在数据
行的数据行指示信息,将查询项和查询项对应的数据行指示信息作为索引形
成第一数据文件的索引文件,使得索引构建过程不依赖于第一数据文件的数
据布局,克服现有自适应索引技术存在的缺陷,降低索引构建的代价。

具体的,本实施例根据用户行为特征与习惯,基于用户的查询请求构建
索引,因此,首先需要获取用于查询第一数据文件的查询请求。

索引构建的目的是为了满足用户快速查询数据的需求。不同需求层次的
用户,其对查询速度的要求有所不同,这意味着,可以为不同需求层次的用
户构建与其需求相适应的索引。例如,如果一个用户需要关注近期的数据,
而所构建的索引未及时更新,则用户将无法快速查询到所需数据。构建不同
层次的索引,所需的作为原材料的查询请求在时效性、规模上也有所不同。

在一可选实施方式中,可以预先设定一时间段,记为第一指定时间段,
例如可以是一个月、三个月甚至更长时间。可以获取第一指定时间段内不同
用户请求查询第一数据文件的查询请求,这些查询请求可构成以查询序列。
在该查询序列中,包括历史查询请求,也包括当前查询请求。根据这些查询
请求可以采用离线方式进行索引构建,这种方式更加适用于查询次数较少,
对时效性和查询速度要求均不是很高的应用场景。

在一可选实施方式中,可以预先设定一时间段,记为第二指定时间段,
例如可以是一个周、三天或五天等较短时间。可以获取第二指定时间段内不
同用户请求查询第一数据文件的查询请求,这些查询请求可构成以查询序列。
在该查询序列中,包括历史查询请求,也包括当前查询请求。根据这些查询
请求可以采用离线方式进行索引构建,这种方式更加适用于查询次数相对较
多,对时效性和查询速度要求较高的应用场景。

在一可选实施方式中,可以获取当前用户请求查询第一数据文件的查询
请求,根据这些查询请求可以采用在线方式实时进行索引构建,这种方式更
加适用于需要实时查询数据的应用场景。

另外,根据第一数据文件面向用户的不同,上述查询请求可以来自不同
用户,也可以来自同一用户。

无论是哪种需求层次,在获取查询请求之后,可以从查询请求的查询条
件中提取至少一个查询项。在本实施例中,查询请求一般是由各种数据库语
言编写的数据库语句,以SQL为例,一种查询请求可以是类似select….from
tablewhere….的结构。其中,select后面的“……”表示待查询数据,而
where后面的“……”表示查询条件。例如,select….fromtablewhereC2>0
这一查询请求中的查询条件为C2>0,表示需要获取第二列数据大于0的数
据。

一般情况下,查询条件会由逻辑运算符连接多个简单的条件构成。常见
的逻辑运算符包括:and(逻辑与)、or(逻辑或)、not(逻辑非)等。例
如,假设一查询请求为:selectcount(*)asresultfromtablewhereC1
contains‘A’andC2>0,其中,查询条件为:C1contains‘A’andC2>0,
逻辑运算符为“and”。

基于上述,一种提取查询项的方式可以是:将查询条件中的逻辑运算符
作为分隔符,提取查询条件中被分隔符分割出的各部分作为查询项。例如,
以上述查询条件为例,则可以将“and”作为分隔符,则由“and”分割出的
“C1contains‘A’”和“C2>0”均为查询项。

在此说明,若查询条件未包括任何逻辑运算符,意味着该查询条件本身
只包含一部分,可以直接将查询条件作为查询项。例如,select….fromtable
whereC2>0这一查询请求中的查询条件为C2>0,该C2>0即为一查询项。

由上述可见,本实施例的查询项一般包括:数据列的名称、运算符和目
标数值。例如,查询项“C1contains‘A’”中,C1表示数据列的名称,contains
为运算符,而‘A’为目标数值;相应的,查询项“C2>0”中,C2表示数据列
的名称,>为运算符,而0为目标数值。

值得说明的是,本实施例并不限定查询项中运算符的类型,例如可以是
算术运算符、连接运算符、关系运算符、赋值运算符和逻辑运算符等中任意
适于作为查询条件的运算符。

基于上述查询项的数据格式,一种获取各查询项对应的数据行指示信息
的方式包括:

根据各查询项中数据列的名称,从第一数据文件中读取各查询项对应的
数据列,亦即该数据列的名称所标识的数据列,例如查询项“C1contains‘A’”
对应的数据列即为C1列,查询项“C2>0”对应的数据列即为C2列;

在读取各查询项对应的数据列之后,可以根据各查询项中的运算符和目
标数值,确定各查询项对应的数据列中满足相应查询项的数据所在的数据行;
之后,根据各查询项对应的数据列中满足相应查询项的数据所在的数据行,
生成各查询项对应的数据行指示信息。例如,以C2列为例,假设C2列包
括:0,3,4,0,-1,-1,9,分别对应第1行至第7行,则可以确定满足查询项
“C2>0”的数据所在的数据行为第2行、第3行和第7行,于是可以生成
用于指示满足查询项“C2>0”的数据所在的数据行为第2行、第3行和第
7行的数据行指示信息。例如,该数据行指示信息可以是二进制序列
0110001,其中取值为1的位代表满足查询项“C2>0”的数据所在的数据
行。

在获得各查询项以及各查询项对应的数据行指示信息之后,可以将各查
询项以及各查询项对应的数据行指示信息作为索引存储到第一数据文件的索
引文件中。

在一可选实施方式中,索引文件以数据列为依据对各查询项以及各查询
项对应的数据行指示信息进行组织管理,即将对应相同数据列的查询项以及
查询项对应的数据行指示信息存储在同一区域内。优选的,可以按照数据列
的编号由大到小的顺序,对对应各数据列的查询项及查询项对应的数据行指
示信息进行存储。另外,在同一区域内,对应相同数据列的查询项及查询项
对应的数据行指示信息可以按照目标数值的大小依次存储。基于这种有序有
规则的索引存储方式,在查询索引文件的过程中,可以首先根据数据列确定
对应的存储区域,然后在所确定的区域内进行查找,这样可以减少查询范围,
有利于提高索引文件的使用效率。

基于上述,一种将各查询项以及各查询项对应的数据行指示信息对应存
储在第一数据文件的索引文件的实施方式包括:

首先,从各查询项中,确定对应相同数据列的查询项,并从各查询项对
应的数据行指示信息中,确定对应相同数据列的查询项对应的数据行指示信
息;

将各查询项中对应相同数据列的查询项以及对应相同数据列的查询项
对应的数据行指示信息存储在索引文件的同一区域内;

在同一区域内,对应相同数据列的查询项以及对应相同数据列的查询项
对应的数据行指示信息按照目标数值的大小依次存储。

以如下表1所示为第一数据文件,则按照上述方式存储查询项及查询项
对应的数据行指示信息后,可以得到如下表2所示的索引文件,但不限于此。

表1

C1
C2
A:B
0
A
3
B
4
B:C
0
A:B:C
-1
C:D
-1
C
9

表2



在表2中,左侧3列是存储数据列C2的区域,右侧两列是存储数据列
C1的区域。在存储数据列C2的区域中,各查询项是按照目标数值由小到大
的顺序依次进行存储的。

在一可选实施方式中,为了进一步规范索引文件,提高索引文件的使用
效率,预先规定了包含关系运算符的查询项的存储规则,即对于包含关系运
算符的查询项只能按照预设的规则进行存储。

具体存储规则为:对于关系运算符中具有取反关系的运算符,规定按照
其中一种运算符进行存储。下面进行具体说明:

对于关系运算符中的大于“>”与小于等于“<=”,两者满足取反关系,
即对“>”取反可以得到“<=”,本实施例规定只能按照“>”的方式进行存
储;意味着,对于包含“<=”的查询项需要通过取反操作转换成包含“>”
的查询项进行存储;

对于关系运算符中的等于“==”与不等于“!=”,两者满足取反关系,
即对“==”取反可以得到“!=”,本实施例规定只能按照“==”的方式进行
存储;意味着,对于包含“!=”的查询项需要通过取反操作转换成包含“==”
的查询项进行存储;

对于关系运算符中的小于“<”与大于等于“>=”,两者满足取反关系,
即对“<”取反可以得到“>=”,本实施例规定只能按照“>=”的方式进行
存储;意味着,对于包含“<”的查询项需要通过取反操作转换成包含“>=”
的查询项进行存储。

基于上述,在将各查询项以及各查询项对应的数据行指示信息对应存储
在第一数据文件的索引文件之前,需要对各查询项以及各查询项对应的数据
行指示信息进行预处理或修正处理。

具体的,对于每个查询项,需要判断该查询项中的运算符是否属于关系
运算符;

如果判断出该查询项中的运算符不属于关系运算符,则结束对该查询项
的预处理操作,可以直接将该查询项和该查询项对应的数据行指示信息存储
到第一数据文件的索引文件中;

如果判断出该查询项中的运算符属于关系运算符,则需要进一步判断该
运算符是否属于预先规定的可以存储到索引文件中的运算符;如果该查询项
中的运算符属于预先规定的可以存储到索引文件中的运算符,例如上述规定
的“>”、“>=”或“==”,则可以结束对该查询项的预处理操作;如果该
查询项中的运算符不属于预先规定的可以存储到索引文件中的运算符,例如
可能是“<=”、“!=”或“<”,则可以对该查询项以及该查询项对应的数
据行指示信息进行取反操作,以获得取反后的查询项及取反后的查询项对应
的数据行指示信息。

举例说明,结合上述表1所示第一数据文件,假设一查询项为C2<=5,
查询项“C2<=5”对应的数据行指示信息为一二进制序列“1111110”,经
上述判断发现该查询项“C2<=5”中的运算符为“<=”,其属于关系运算符
但不属于预设规定可以存储到索引文件中的运算符,于是对查询项“C2<=5”
进行取反操作,获得取反后的查询项“C2>5”,并对查询项“C2<=5”对应
的数据行指示信息“1111110”进行取反操作,获得取反后的查询项“C2>5”
对应的数据行指示信息“0000001”。

在获得取反后的查询项以及取反后的查询项对应的数据行指示信息后,
将取反后的查询项以及取反后的查询项对应的数据行指示信息存储到索引文
件中,如表2中的查询项“C2>5”所在一列。

在一可选实施方式中,考虑到查询项中运算符的类型较多,导致查询项
的类型较多。而数据的逻辑存储结构一定程度上会影响数据的查询效率,因
此对于不同类型的查询项,在作为索引被存储到索引文件中时可以使用与其
相适应的逻辑存储结构,以便于提高数据查询效率。

基于上述,在将各查询项以及各查询项对应的数据行指示信息对应存储
在第一数据文件的索引文件之前,可以根据各查询项中运算符和/或目标数值
的类型,确定各查询项适用的逻辑存储结构。例如,若查询项中的运算符属
于算术类型,例如运算符是+(加法符号)、-(减法符号)、*(乘法符号)、
/(除法符号)、>、<、>=、<=、==或!=等,一般可以采用位图(bit-map)
这种逻辑存储结构,也就是说,bit-map这种逻辑存储结构,一般适用于算
术类型的查询项;若查询项中的运算符属于集合类型,例如运算符是in或
contain(包含)、notin或notcontain(不包含)、within(在…中)等,
一般可以采用倒排索引这种逻辑存储结构,也就是说,倒排索引这种逻辑存
储结构一般适用于集合类型的查询项;若查询项中的目标数值属于数值型,
例如浮点类型或区间类型,一般可以采用二叉树这种逻辑存储结构,也就是
说,二叉树这种逻辑存储结构一般适用于涉及区间范围或浮点类型的查询项。

值得说明的是,随着时间的变化,查询项的类型会越来越多,而查询项
的类型与逻辑存储结构之间的映射关系也会不断积累和增长。

基于上述,在将各查询项以及各查询项对应的数据行指示信息对应存储
在第一数据文件的索引文件的过程中,可以按照各查询项适用的逻辑存储结
构,将各查询项以及各查询项对应的数据行指示信息存储到第一数据文件的
索引文件中。

进一步,在生成第一数据文件的索引文件之后,可以通过IO接口将索
引文件写入独立于第一数据文件的磁盘介质上。

值得说明的是,在实际应用中,第一数据文件可能会被切成多个数据块
(DataBlock),分布在不同的存储节点上。相应的,第一数据文件的索引
文件也可以被切分成对应各数据块的索引文件片段,分布在不同的磁盘介质
上。在实际使用时,优选的,可以只加载相应数据块对应的索引文件片段到
内存中,而无需加载所有索引文件片段。

另外,在列式存储系统中,为了加强第一数据文件的可靠性,一般会为
第一数据文件存储多个副本,例如三个副本,并且不同副本一般存储在不同
存储节点上。与此相类似,独立于第一数据文件的索引文件也可以存储多个,
例如三个副本,这样可以降低因更新索引过程的宕机、或者磁盘损坏等因素
导致索引文件损坏的概率。其中,多个索引文件可以互相校验数据之间的一
致性。在实际使用过程中,只有一个索引文件加载到内存,用于加快索引的
查询速度。

进一步,用户会不断的对第一数据文件进行查询,这意味着新的查询请
求(具体来说是新的查询项)会不断出现,因此,还可以不断地对索引文件
进行更新。这里的更新包括淘汰已过时或已失效的查询项及其对应的数据行
指示信息,添加新的查询项及其对应的数据行指示信息,以及对新的查询项
和已有查询项进行合并等等。其中,在对查询项进行淘汰过程中,可以采用
近期最少使用(LeastRecentlyUsed,LRU)策略。

以上述表1所示第一数据文件为例,结合实际查询请求详细说明构架索
引文件的过程:

假设构建索引文件使用的查询请求依次包括Q0、Q1、Q2和Q3,其中:

Q0:select……fromtablewhereC2>0;

Q1:select……fromtablewhereC2>5;

Q2:select……fromtablewhereC1contains‘A’;

Q3:select……fromtablewhereC2>0andC2<=5;

假设初始阶段,第一数据文件的索引文件为空(null);当获取到Q0
时,从Q0中提取出查询项“C2>0”,确定满足查询项“C2>0”的数据所
在的数据行,然后生成数据行指示信息,将查询项“C2>0”以及对应的数据
行指示信息存储到索引文件中,此时的索引文件如下表3所示。在该实例中

使用bit-map这一数据存储结构。表3

C2>0
0
1
1
0
0
0
1

接下来,获取到Q1,从Q1中提取出查询项“C2>5”,确定满足查询
项“C2>5”的数据所在的数据行,然后生成数据行指示信息,将查询项“C2>5”
以及对应的数据行指示信息存储到索引文件中,此时的索引文件如下表4所
示。

表4

C2>0
C2>5
0
0
1
0
1
0
0
0
0
0
0
0
1
1

接下来,获取到Q2,从Q2中提取出查询项“C1contains‘A’”,确定
满足查询项“C1contains‘A’”的数据所在的数据行,然后生成数据行指示
信息,将查询项“C1contains‘A’”以及对应的数据行指示信息存储到索引
文件中,此时的索引文件如下表5所示。

表5

C2>0
C2>5
C1包含(contain)‘A’
0
0
1
1
0
1
1
0
0
0
0
0
0
0
1
0
0
0
1
1
0

接下来,获取到Q3,从Q3中提取出查询项“C2>0”和“C2<=5”,
确定满足查询项“C2>0”的数据所在的数据行,然后生成数据行指示信息,
将查询项“C2>0”以及对应的数据行指示信息存储到索引文件中,此时,会
发现查询项“C2>0”及对应的数据行指示信息已经存在于索引文件中,故可
以将其丢弃。而关于查询项“C2<=5”,确定满足查询项“C2<=5”的数据
所在的数据行,然后生成数据行指示信息,将查询项“C2<=5”以及对应的
数据行指示信息存储到索引文件中,由于查询项“C2<=5”不符合预设的存
储要求,于是可以对查询项“C2<=5”及对应的数据行指示信息进行取反操
作,从而获得查询项“C2>5”以及对应的数据行指示信息,此时会发现查询
项“C2>5”以及对应的数据行指示信息已经存在于索引文件中,于是可以将
其丢弃。在处理完Q0、Q1和Q2之后可以得到如表5所示的索引文件。

另外,在上述处理Q3的过程中可以发现,随着索引文件中查询项及其
对应的数据行指示信息的不断逐渐增多,有可能会出现重复的查询项及数据
行指示信息,为了节约处理资源,提高构建索引的效率,可以在获取各查询
项对应的数据行指示信息之前,先将提取到的各查询项在已构建的索引文件
中进行匹配,如果在索引文件中匹配到该查询项,则结束对该查询项的处理
并进入对下一个查询项的处理过程;如果在索引文件中未匹配到该查询项,
则继续执行获取该查询项对应的数据行指示信息以及后续操作。

进一步,有可能对查询项进行取反操作之后,与索引文件中已有的查询
项存在重复,为了节约处理资源,提高构建索引的效率,可以在获取各查询
项对应的数据行指示信息之前,可以对提取到的各查询项进行取反操作,将
取反后的查询项在索引文件中进行匹配;如果在索引文件中匹配到该取反后
的查询项,则结束对该查询项的处理并进入对下一个查询项的处理过程;如
果在索引文件中未匹配到该取反后的查询项,则继续执行获取该查询项对应
的数据行指示信息以及后续操作。

关于本实施例中的查询项和查询项对应的数据行指示信息在作为索引
时是否能够提高查询速度,以及在应用过程中对索引文件进行更新的过程将
在下面实施例中进行描述。

图2为本发明另一实施例提供的查询方法的流程示意图。如图2所示,
该方法包括:

201、接收当前用于查询第一数据文件的查询请求。

202、从查询请求的查询条件中提取至少一个查询项。

203、根据第一数据文件的索引文件中存储的已有查询项和已有查询项
对应的数据行指示信息,对至少一个查询项中能够被改写的查询项进行改写;
所述数据行指示信息用于指示满足已有查询项的数据所在的数据行。

204、根据至少一个查询项中被改写的查询项和未被改写的查询项,在
第一数据文件中进行查询,以获取待查询的数据。

本实施例的执行可基于前述各方法实施例给出的索引文件。关于相关数
据的定义或解释可参见前述实施例中的描述,在此不再赘述。

在此说明,可以预先构建索引文件,然后基于所构建的索引文件进行数
据查询;或者,也可以将构建索引文件的过程与数据查询过程糅合在一起,
即基于已构建的索引文件进行数据查询,并在数据查询过程中不断完善索引
文件。

在本实施例中,假设在获取当前用于查询第一数据文件的查询请求之
前,已经存在索引文件,该索引文件可以是预先离线形成的,也可以是在之
前的数据查询过程中在线形成的。则基于索引文件的数据查询过程具体如下:
首先,接收当前用于查询第一数据文件的查询请求。在现有技术中,当拿到
查询请求后,会直接根据查询请求中的查询条件,去第一数据文件中读取查
询条件涉及的各列数据,当将所需的各列数据读取到内存之后,再进行数据
筛选等处理,最终获得所需的数据。这会涉及大量IO操作,导致数据查询
效率较低。而本实施例并不像现有技术那样直接去第一数据文件中读取数据,
而是从查询请求的查询条件中提取至少一个查询项,然后根据第一数据文件
的索引文件中存储的已有查询项和已有查询项对应的数据行指示信息,对至
少一个查询项中能够被改写的查询项进行改写,然后根据至少一个查询项中
被改写的查询项和未被改写的查询项,在第一数据文件中进行查询,以获得
待查询数据。

上述数据行指示信息用于指示满足已有查询项的数据所在的数据行。对
于以列为单位进行存储的列式存储系统中,如果知道了待查询数据所在的数
据行,进一步加上其它条件,可以将待查询数据锁定在较小的数据范围内,
甚至可以确定数据的精确位置(所在行和所在列),这与读取所有可能的数
据相比,有利于减少IO操作,有利于提高查询效率。

上述能够被改写的查询项是指能够利用索引文件中存储的已有查询项
和已有查询项对应的数据行指示信息进行改写的查询项。而数据行指示信息
指示出满足已有查询项的数据所在的数据行,这意味着被改写后的查询项所
对应的数据查询范围将极大缩小,有利于减少IO操作,提高查询效率。

关于上述步骤202,其具体实施方式,与构建索引文件过程中的相应步
骤相同,可参见前述实施例中相应部分的描述,在此不再赘述。

在一可选实施方式中,上述步骤203具体可采用以下实施方式实现:

对于至少一个查询项中每个查询项,可以将该查询项在索引文件中进行
匹配;

如果在索引文件中匹配到与该查询项相同的已有查询项,则根据所述匹
配到的已有查询项对应的数据行指示信息对该查询项进行改写。例如,可以
将该查询项改写为待查询项数据行等于所述匹配到的已有查询项对应的数据
行指示信息所指示的数据行。与改写前的查询项相比,改写后的查询项直接
给出待查询数据所在的数据行,其能够极大的减少数据范围。

举例说明,以上述表1所示第一数据文件为例,并结合上述表5所示索
引文件,则假设接收到查询请求Q4:selectcount(*)asresultfromtable
whereC1contains‘A’andC2>0,从Q4中提取查询项“C1contains‘A’”
和查询项“C2>0”,通过将两个查询项在表5所示的索引文件中进行比较,
发现表5中已经存在这两个查询项,意味着这两个查询项可以被改写,于是
根据表5所示索引文件中的已有查询项及其对应的数据行指示信息对这两个
查询项进行改写。例如,可以将查询项“C2>0”改写为行号(line)=0110001,
将查询项“C1contains‘A’”改写为line=1100100。这里直接使用数据行指
示信息表示所指示的数据行,但不限于此。与“C2>0”这一查询条件相比,
改写后的查询项明确限定了待查询数据所在的数据行,可以直接从第2、3
和7行中读取待查询数据,数据范围较小,IO操作的次数相对较少,查询效
率较高。

在上述举例的查询请求中,不存在未被改写的查询项,则可以直接根据
各被改写的查询项在第一数据文件中进行查询,以获得待查询数据。例如,
可以将各被改写的查询项按照原来的逻辑运算关系进行组合,以形成新的查
询条件,使用新的查询条件到第一数据文件中进行查询。例如,将由查询项
“C2>0”改写的line=0110001与由查询项“C1contains‘A’”改写的
line=1100100进行与运算,从而获得新的查询条件为line=0100000,从而
将待查询数据限定在第2行数据中。

进一步,假设接收到查询请求Q5:select……fromtablewhereC2>0
andC2<=5,从Q5中提取查询项“C2>0”和查询项“C2<=5”,通过将两
个查询项在表5所示的索引文件中进行比较,发现表5中已经存在查询项
“C2>0”,意味着查询项“C2>0”属于可改写的查询项;而表5中不存在
查询项“C2<=5”,但是查询项“C2<=5”取反后得到的查询项“C2>5”存
在于表5中,这意味着查询项“C2<=5”实际上也属于可改写的查询项。

在上述分析中发现,在将查询项在索引文件中进行匹配之前,可以判断
该查询项中的运算符是否属于关系运算符;当该查询项中的运算符属于关系
运算符时,进一步判断该查询项中的运算符是否属于预先规定的可以存储到
索引文件中的运算符;若判断结果为否,即该查询项中的运算符不属于预先
规定的可以存储到索引文件中的运算符,则可以先对该查询项进行取反操作,
以获得取反后的查询项,然后将取反后的查询项在索引文件中进行匹配,以
判断该查询项是否可以被改写。

在经过上述匹配操作后,发现查询项“C2>0”和查询项“C2<=5”都属
于可改写的查询项,于是根据表5所示索引文件中的已有查询项及其对应的
数据行指示信息对这两个查询项进行改写。例如,可以将查询项“C2>0”改
写为行号(line)=0110001,将查询项“C2<=5”改写为line=1111110。这
里直接使用数据行指示信息表示所指示的数据行,但不限于此。与“C2>0”
这一查询条件相比,改写后的查询项明确限定了待查询数据所在的数据行,
可以直接从第2、3和7行中读取待查询数据,数据范围较小,IO操作的次
数相对较少,查询效率较高。

在上述举例的查询请求中,不存在未被改写的查询项,则可以直接根据
各被改写的查询项在第一数据文件中进行查询,以获得待查询数据。例如,
可以将各被改写的查询项按照原来的逻辑运算关系进行组合,以形成新的查
询条件,使用新的查询条件到第一数据文件中进行查询。例如,将由查询项
“C2>0”改写的line=0110001与由查询项“C2<=5”改写的line=1111110
进行与运算,从而获得新的查询条件为line=0110000,从而将待查询数据限
定在第2和3行数据中。

进一步,若未在索引文件中匹配到与查询项相同的已有查询项,则当查
询项表示数值范围时,可以进一步判断在索引文件中是否能够匹配到数据范
围被查询项包含或包含查询项的已有查询项;如果判断结果为是,意味着能
够匹配到数值范围被查询项包含或包含该查询项的已有查询项,则可以将该
查询项拆分为可改写部分和不可改写部分,并根据所述匹配到的已有查询项
对应的数据行指示信息对该可改写部分进行改写,将不可改写部分作为新的
查询项。例如,可以将所述可改写部分改写为待查询数据行等于匹配到的已
有查询项对应的数据行指示信息所指示的数据行。

结合上述表1所示第一数据文件和表5所示索引文件为例,以查询项
“C2>3”为例,在表5中不存在查询项“C2>3”,但是发现数值范围被查
询项“C2>3”包含的已有查询项“C2>5”,于是将查询项“C2>3”拆分为
可改写部分“C2>5”和不可改写部分“3<C2<=5”,并将可改写部分“C2>5”
改写为:line=0000001,而不可改写部分“3<C2<=5”作为新的查询项。与
查询项“C2>3”相比,“3<C2<=5”限定的数据范围相对较小,再加上改
写一部分限定的line=0000001可以进一步缩小数据范围,从而有利于减少
IO操作,提高查询效率。

值得说明的是,在上述举例中,由于索引文件是按照“>”或“>=”的
方式进行存储,所以需要获取数值范围被查询项包含的已有查询项;若索引
文件是按照“<”或“<=”的方式进行存储,则需要获取数值范围包含查询
项的已有查询项。

进一步,若未能在索引文件中匹配到数值范围被查询项包含或包含该查
询项的已有查询项,则意味着该查询项是新的查询项,属于不可改写的查询
项,可以将该查询项保持原样,同时,在数据查询过程中可以获取该查询项
对应的数据行指示信息,然后将该查询项以及该查询项对应的数据行指示信
息对应存储到索引文件中,从而实现对索引文件的更新。关于更新索引文件
的过程,可参见前述索引构建方法实施例的描述,其实质相同,在此不再赘
述。

为了更加清楚地说明本发明的有益效果,本发明发明人分别对本发明与
现有查询方法在真实场景(ad-hoc查询频繁的Gunir系统)中进行了测试,
并得到如图3所示的效果对比示意图。在图3中,横坐标表示随着时间逐渐
递增的查询请求的数量,而纵坐标表示单次查询消耗的时间,单位为毫秒
(milli-seconds)。在图3中,下面一条线表示本发明,上面一条线表示现
有查询方法。通过图3可以看出:在查询速度上,本发明明显优于现有查询
方法,另外,随着查询请求的不断增多,索引文件不断被更新完善,使得查
询速度进一步提高,并最终取向收敛。

另外,本发明发明人还采用国际上通用的TPC-Hbenchmark对本发明
和业界同类系统(MySQL系统中的w/B-Tree方案)进行了对比测试,得到
如图4所示的效果对比示意图。在图4中,横坐标表示随着时间逐渐递增的
查询请求的数量,而纵坐标表示单次查询消耗的时间,单位为毫秒
(milli-seconds)。在图4中,下面一条线表示本发明,上面一条线表示业
务同类系统。通过图4可以看出:在查询速度上,本发明明显优于业界同类
系统,另外,随着查询请求的不断增多,索引文件不断被更新完善,使得查
询速度进一步提高,并最终取向收敛。

需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表
述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描
述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同
时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属
于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有
详述的部分,可以参见其他实施例的相关描述。

图5为本发明又一实施例提供的索引构建装置的结构示意图。如图5所
示,该装置包括:请求获取模块51、提取模块52、信息获取模块53和索引
构建模块54。

请求获取模块51,用于获取用于查询第一数据文件的查询请求。

提取模块52,用于从所述查询请求的查询条件中提取至少一个查询项。

信息获取模块53,用于获取各查询项对应的数据行指示信息,所述数据行
指示信息用于指示满足所述数据行指示信息对应查询项的数据所在的数据行。

索引构建模块54,用于将所述各查询项以及所述各查询项对应的数据行
指示信息对应存储在所述第一数据文件的索引文件。

在一可选实施方式中,提取模块52具体用于:

以所述查询条件中的逻辑运算符为分隔符,提取所述查询条件中被所述
分隔符分割出的各部分作为所述查询项。

在一可选实施方式中,各查询项包括数据列的名称、运算符以及目标数
值。基于此,信息获取模块53具体用于:

根据所述各查询项中数据列的名称,从所述第一数据文件中读取所述各查
询项对应的数据列;

根据所述各查询项中的运算符和目标数值,确定所述各查询项对应的数据
列中满足相应查询项的数据所在的数据行;

根据所述各查询项对应的数据列中满足相应查询项的数据所在的数据
行,生成所述各查询项对应的数据行指示信息。

在一可选实施方式中,索引构建模块54具体用于:

将所述各查询项中对应相同数据列的查询项以及所述对应相同数据列
的查询项对应的数据行指示信息存储在所述索引文件的同一区域内;

其中,在同一区域内,所述对应相同数据列的查询项以及所述对应相同
数据列的查询项对应的数据行指示信息按照目标数值的大小依次存储。

在一可选实施方式中,索引构建模块54还用于:在将所述各查询项以
及所述各查询项对应的数据行指示信息对应存储在所述第一数据文件的索引
文件之前,执行以下操作:

对于每个查询项,判断所述查询项中的运算符是否属于关系运算符;

当所述查询项中的运算符属于关系运算符时,判断所述查询项中的运算
符是否属于预先规定的可以存储到所述索引文件中的运算符;

若判断结果为否,则对所述查询项以及所述查询项对应的数据行指示信
息进行取反操作,以获得取反后的查询项以及所述取反后的查询项对应的数
据行指示信息。

具体的,索引构建模块54用于将取反后的查询项以及所述取反后的查
询项对应的数据行指示信息存储到索引文件中。

在一可选实施方式中,索引构建模块54具体用于:

根据所述各查询项中运算符和/或目标数值的类型,确定所述各查询项适用
的逻辑存储结构;

按照所述各查询项适用的逻辑存储结构,将所述各查询项以及所述各查
询项对应的数据行指示信息存储到所述第一数据文件的索引文件。

本实施例提供的索引构建装置,从查询请求的查询条件中提取查询项,
获取用于指示满足查询项的数据所在数据行的数据行指示信息,进而将查询
项及查询项对应的数据行指示信息作为该数据文件的索引存储到索引文件
中,该索引构建过程不依赖于数据文件中的数据布局,因此不会破坏现有的
数据布局,实现相对简单,为提高查询效率提供了条件。

图6为本发明又一实施例提供的查询装置的结构示意图。如图6所示,
该查询装置包括:接收模块61、提取模块62、改写模块63和查询模块64。

接收模块61,用于接收当前用于查询第一数据文件的查询请求。

提取模块62,用于从所述查询请求的查询条件中提取至少一个查询项。

改写模块63,用于根据所述第一数据文件的索引文件中存储的已有查询项
和所述已有查询项对应的数据行指示信息,对所述至少一个查询项中能够被改
写的查询项进行改写;所述数据行指示信息用于指示满足所述已有查询项的数
据所在的数据行。

查询模块64,用于根据所述至少一个查询项中被改写的查询项和未被改写
的查询项,在所述第一数据文件中进行查询,以获取待查询的数据。

在一可选实施方式中,改写模块63具体用于:

对于所述至少一个查询项中的每个查询项,将所述查询项在所述索引文
件中进行匹配;

若在所述索引文件中匹配到与所述查询项相同的已有查询项,则根据所
述匹配到的已有查询项对应的数据行指示信息对所述查询项进行改写。

在一可选实施方式中,改写模块63还用于:

若在所述索引文件中未匹配到与所述查询项相同的已有查询项,当所述查
询项表示数值范围时,判断在所述索引文件中是否能够匹配到数据范围被所述
查询项包含或包含所述查询项的已有查询项;

若判断结果为是,则根据所述匹配到的已有查询项表示的数值范围和所
述查询项表示的数值范围,将所述查询项拆分为可改写部分和不可改写部分,
并根据所述匹配到的已有查询项对应的数据行指示信息对所述可改写部分进
行,将所述不可改写部分作为新的查询项。

在一可选实施方式中,如图7所示,该查询装置还包括:更新模块64。

更新模块64,用于在上述判断结果为否时,获取所述查询项对应的数据行
指示信息,并将所述查询项以及所述查询项对应的数据行指示信息对应存储到
所述索引文件。

本实施例提供的查询装置,可基于前述实施例提供的索引文件进行数据
查询,在使用索引文件进行数据查询过程中,根据索引文件中存储的已有查
询项和已有查询项对应的数据行指示信息,对当前查询条件中能够被改写的
查询项进行改写,使得改写后的查询条件变得相对简单,可以减少IO次数,
有利于提高查询效率。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描
述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应
过程,在此不再赘述。

在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和
方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示
意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可
以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个
系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间
的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合
或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作
为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,
或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或
者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元
中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一
个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加
软件功能单元的形式实现。

上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机
可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指
令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)
或处理器(processor)执行本发明各个实施例所述方法的部分步骤。而前述
的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、
随机存取存储器(RandomAccessMemory,RAM)、磁碟或者光盘等各种
可以存储程序代码的介质。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其
限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术
人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或
者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技
术方案的本质脱离本发明各实施例技术方案的精神和范围。

索引构建方法、查询方法及装置.pdf_第1页
第1页 / 共23页
索引构建方法、查询方法及装置.pdf_第2页
第2页 / 共23页
索引构建方法、查询方法及装置.pdf_第3页
第3页 / 共23页
点击查看更多>>
资源描述

《索引构建方法、查询方法及装置.pdf》由会员分享,可在线阅读,更多相关《索引构建方法、查询方法及装置.pdf(23页珍藏版)》请在专利查询网上搜索。

本发明提供一种索引构建方法、查询方法及装置。在索引构建过程中,从查询请求的查询条件中提取查询项,获取用于指示满足查询项的数据所在数据行的数据行指示信息,将查询项及对应的数据行指示信息作为索引存储到索引文件中,由于不依赖于数据文件中的数据布局,因此不会破坏现有的数据布局,实现相对简单。另外,在使用索引文件进行数据查询过程中,根据索引文件中存储的已有查询项和已有查询项对应的数据行指示信息,对当前查询条。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1