索引构建方法、查询方法及装置的制造方法【专利说明】索引构建方法、查询方法及装置【
技术领域:
】[0001]本发明涉及数据库
技术领域:
,尤其涉及一种索引构建方法、查询方法及装置。【【
背景技术:
】】[0002]在现有存储系统中,一种加快数据查询速度的常用而有效的方法是利用数据访问的局部性(DataLocality)来为常用的数据区间建立索引。然而,现有建立索引的方法都需要先验知识,即知道那些属性的数据访问频率高才能建立。同时,索引一旦建立完成,对索引进行更新也是一项异常繁重的工作;同时还伴随着索引与数据、索引与索引之间的一致性等问题。这些问题进一步制约了索引加速数据访问的灵活性和可扩展性,也提高了索引的使用成本。[0003]针对上述问题,出现了自适应索引技术(AdaptiveIndexing)。一种自适应索引技术具体为:根据用户的查询序列,将数据分裂成不同的数据片,并通过交换排序来逐步形成分片有序(即索引),进而为后续用户的查询提供加速条件。另一种自适应索引技术具体为:将每个记录数据视为孤立的数据点,随着用户查询请求的不断到来,符合用户查询需求的数据点自动聚合(Merging)在一起,逐步形成分片有序(即索引),进而为后续用户的查询提供加速条件。[0004]在上述自适应索引技术中,均需要挪动数据的物理位置。而在百TB级到PB级别的大型存储系统中,数据被切成多个数据块(DataBlock),分布在不同的存储节点上;而且,为了容错,每个数据块都多个副本。在这样的场景下移动数据需要跨越分布在不同网络区域的存储节点才能完成,而且需要同时修改多个副本,实现代价极高,可行性较差。【【
发明内容】】[0005]本发明的多个方面提供一种索引构建方法、查询方法及装置,用以为大数据存储系统创建索引,提高查询效率。[0006]本发明的一方面,提供一种索引构建方法,包括:[0007]获取用于查询第一数据文件的查询请求;[0008]从所述查询请求的查询条件中提取至少一个查询项;[0009]获取各查询项对应的数据行指示信息,所述数据行指示信息用于指示满足所述数据行指示信息对应查询项的数据所在的数据行;[0010]将所述各查询项以及所述各查询项对应的数据行指示信息对应存储在所述第一数据文件的索引文件。[0011]本发明的另一方面,提供一种查询方法,包括:[0012]接收当前用于查询第一数据文件的查询请求;[0013]从所述查询请求的查询条件中提取至少一个查询项;[0014]根据所述第一数据文件的索引文件中存储的已有查询项和所述已有查询项对应的数据行指示信息,对所述至少一个查询项中能够被改写的查询项进行改写;所述数据行指示信息用于指示满足所述已有查询项的数据所在的数据行;[0015]根据所述至少一个查询项中被改写的查询项和未被改写的查询项,在所述第一数据文件中进行查询,以获取待查询的数据。[0016]本发明的又一方面,提供一种搜索构建装置,包括:[0017]请求获取模块,用于获取用于查询第一数据文件的查询请求;[0018]提取模块,用于从所述查询请求的查询条件中提取至少一个查询项;[0019]信息获取模块,用于获取各查询项对应的数据行指示信息,所述数据行指示信息用于指示满足所述数据行指示信息对应查询项的数据所在的数据行;[0020]索引构建模块,用于将所述各查询项以及所述各查询项对应的数据行指示信息对应存储在所述第一数据文件的索引文件。[0021]本发明的又一方面,提供一种查询装置,包括:[0022]接收模块,用于接收当前用于查询第一数据文件的查询请求;[0023]提取模块,用于从所述查询请求的查询条件中提取至少一个查询项;[0024]改写模块,用于根据所述第一数据文件的索引文件中存储的已有查询项和所述已有查询项对应的数据行指示信息,对所述至少一个查询项中能够被改写的查询项进行改写;所述数据行指示信息用于指示满足所述已有查询项的数据所在的数据行;[0025]查询模块,用于根据所述至少一个查询项中被改写的查询项和未被改写的查询项,在所述第一数据文件中进行查询,以获取待查询的数据。[0026]由上述技术方案可知,本发明从查询请求的查询条件中提取查询项,获取用于指示满足查询项的数据所在数据行的数据行指示信息,进而将查询项及查询项对应的数据行指示信息作为该数据文件的索引存储到索引文件中,该索引构建过程不依赖于数据文件中的数据布局,因此不会破坏现有的数据布局,实现相对简单。另外,本发明在使用索引文件进行数据查询过程中,根据索引文件中存储的已有查询项和已有查询项对应的数据行指示信息,对当前查询条件中能够被改写的查询项进行改写,使得改写后的查询条件变得相对简单,可以减少IO次数,有利于提高查询效率。【【附图说明】】[0027]为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。[0028]图1为本发明一实施例提供的索引构建方法的流程示意图;[0029]图2为本发明另一实施例提供的查询方法的流程示意图;[0030]图3为本发明又一实施例提供的本发明与现有查询方法的效果对比示意图;[0031]图4为本发明又一实施例提供的本发明与业务同类系统的效果对比示意图;[0032]图5为本发明又一实施例提供的索引构建装置的结构示意图;[0033]图6为本发明又一实施例提供的查询装置的结构示意图;[0034]图7为本发明又一实施例提供的查询装置的结构示意图。【【具体实施方式】】[0035]为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。[0036]图1为本发明一实施例提供的索引构建方法的流程示意图。如图1所示,该方法包括:[0037]101、获取用于查询第一数据文件的查询请求。[0038]102、从查询请求的查询条件中提取至少一个查询项。[0039]103、获取各查询项对应的数据行指示信息,该数据行指示信息用于指示满足该数据行指示信息对应的查询项的数据所在的数据行。[0040]104、将上述各查询项以及各查询项对应的数据行指示信息对应存储在第一数据文件的索引文件中。[0041]本实施例提供的索引构建方法可用于为任意数据文件构建索引,为便于描述,本实施例将需要构建索引的数据文件称为第一数据文件,这里的"第一"既没有先后顺序的概念,也没有数量的概念。优选的,第一数据文件为以列为单位的列式存储文件。[0042]为加快对第一数据文件的查询速度,本实施例提供一种为第一数据文件构建索引的方法。为了在为第一数据文件构建索引的过程中不影响第一数据文件中数据的布局,例如不移动数据的物理位置,降低构建索引的代价,本实施例在构建索引过程中不依赖于第一数据文件的数据布局,而是通过从查询请求的查询条件中提取查询项,获取用于指示满足查询项的数据所在数据行的数据行指示信息,将查询项和查询项对应的数据行指示信息作为索引形成第一数据文件的索引文件,使得索引构建过程不依赖于第一数据文件的数据布局,克服现有自适应索引技术存在的缺陷,降低索引构建的代价。[0043]具体的,本实施例根据用户行为特征与习惯,基于用户的查询请求构建索引,因此,首先需要获取用于查询第一数据文件的查询请求。[0044]索引构建的目的是为了满足用户快速查询数据的需求。不同需求层次的用户,其对查询速度的要求有所不同,这意味着,可以为不同需求层次的用户构建与其需求相适应的索引。例如,如果一个用户需要关注近期的数据,而所构建的索引未及时更新,则用户将无法快速查询到所需数据。构建不同层次的索引,所需的作为原材料的查询请求在时效性、规模上也有所不同。[0045]在一可选实施方式中,可以预先设定一时间段,记为第一指定时间段,例如可以是一个月、三个月甚至更长时间。可以获取第一指定时间段内不同用户请求查询第一数据文件的查询请求,这些查询请求可构成以查询序列。在该查询序列中,包括历史查询请求,也包括当前查询请求。根据这些查询请求可以采用离线方式进行索引构建,这种方式更加适用于查询次数较少,对时效性和查询速度要求均不是很高的应用场景。[0046]在一可选实施方式中,可以预先设定一时间段,记为第二指定时间段,例如可以是一个周、三天或五天等较短时间。可以获取第二指定时间段内不同用户请求查询第一数据文件的查询请求,这些查询请求可构成以查询序列。在该查询序列中,包括历史查询请求,也包括当前查询请求。根据这些查询请求可以采用离线方式进行索引构建,这种方式更加适用于查询次数相对较多,对时效性和查询速度要求较高的应用场景。[0047]在一可选实施方式中,可以获取当前用户请求查询第一数据文件的查询请求,根据这些查询请求可以采用在线方式实时进行索引构建,这种方式更加适用于需要实时查询数据的应用场景。[0048]另外,根据第一数据文件面向用户的不同,上述查询请求可以来自不同用户,也可以来自同一用户。[0049]无论是哪种需求层次,在获取查询请求之后,可以从查询请求的查询条件中提取至少一个查询项。在本实施例中,查询请求一般是由各种数据库语言编写的数据库语句,以SQL为例,一种查询请求可以是类似select….fromtablewhere···.的结构。其中,select后面的"......"表示待查询数据,而where后面的"......"表示查询条件。例如,select···.fromtablewhereC2>0这一查询请求中的查询条件为C2>0,表示需要获取第二列数据大于0的数据。[0050]-般情况下,查询条件会由逻辑运算符连接多个简单的条件构成。常见的逻辑运算符包括:and(逻辑与)、or(逻辑或)、not(逻辑非)等。例如,假设一查询请求为:selectcount(*)asresultfromtablewhereClcontains'A'andC2>0,其中,查询条件为:C1contains'A'andC2>0,逻辑运算符为"and"。[0051]基于上述,一种提取查询项的方式可以是:将查询条件中的逻辑运算符作为分隔符,提取查询条件中被分隔符分割出的各部分作为查询项。例如,以上述查询条件为例,则可以将"and"作为当前第1页1 2 3 4 5