一种数据库查询、数据块划分方法和装置与流程

文档序号:14950725发布日期:2018-07-17 22:29阅读:274来源:国知局
本发明涉及数据库
技术领域
,特别是指一种数据库查询、数据块划分方法和装置。
背景技术
:随着数据量的增长和用户要求的查询延迟的不断降低,数据库的查询处理器面临巨大的挑战,它需要近乎实时地对大量的数据进行及时地处理。为了提高数据处理的速度,其中一个重要的技术是想办法忽略掉一些和查询无关的数据的扫描,提高查询处理速度。通过给每个数据块里包含的记录,维护一些描述性信息(即元信息),查询处理器可以忽略某些数据块的扫描,如果这些元信息表明,这个数据块不包含任何和查询有关的数据。但是,能否真正地忽略(也称为跳读)部分数据,依赖于数据的分块(也称为分区),和查询条件(过滤条件)的匹配程度。目前一种支持跳读技术的查询方法是基于水平划分的数据库表:在数据库中可以使用范围(range)或者哈希(hash)数据划分方法,实现负载均衡。也就是数据经过划分之后,我们可以维护划分得到的数据块的统计信息,比如某些查询字段的最大值、最小值、记录数量等,利用这些统计信息,查询处理器,可以忽略一些数据块,无需进行扫描。比如,当查询条件为“时间>=20170101and时间<=20170105”,那么“时间”字段的取值在这个范围之外的数据块,就可以被跳读(即忽略),不用扫描。这种方法实现的是比较粗粒度的数据划分,无法实现更精细化的跳读。另一种支持跳读技术的查询方法是基于物化视图选择方案的方法:所谓物化视图,是把查询的结果保存起来,下次查询到来的时候,如果查询条件完全一样,直接把先前的结果返回即可,不用再执行一遍查询,加快查询的处理。如果下次来的查询,如果查询条件和已有的查询(建立物化视图的那个查询)的查询条件不一样,但是根据判断,新的查询可以从物化视图中遴选一部分记录形成查询结果,物化视图仍然是有用的。物化视图选择,就是新查询来的时候,选择合适的物化视图,直接组为答案或者从已有物化视图过滤出答案。但是,物化视图需要付出相当大的存储成本,因为每个需要物化的查询都需要存储空间。技术实现要素:有鉴于此,本发明的目的在于提出一种数据库查询、数据块划分方法和装置,以便于查询时实现更精细化的跳读,提高查询效率,且付出的存储成本较小。基于上述目的本发明提供一种数据库查询方法,包括:将用户发送的查询条件与查询单元集合中各查询单元进行比较,根据比较结果生成查询向量;将所述查询向量分别与所述数据库中各数据块所对应的向量进行并操作,根据并操作结果选取向量;根据所述查询条件,在选取的向量所对应的数据块中进行查询,得到查询结果;其中,所述查询单元集合是预先由查询工作负载中分解出的查询单元组合而成的。其中,所述查询向量中的元素与所述查询单元集合中的查询单元一一对应,所述查询向量中的元素的取值,根据所述查询条件是否包含该元素所对应的查询单元的比较结果决定。其中,所述根据并操作结果选取向量,具体为:选取与所述查询向量执行并操作后得到的向量元素均为1的向量。本发明还提供一种数据块划分方法,包括:针对数据库中的每个元组,生成与该元组对应的元组向量;其中,所述元组向量中的元素与查询单元集合中的查询单元一一对应,且元素排序与所述查询向量中的元素排序一致;所述元组向量中元素的取值,根据该元组是否满足所述元素所对应的查询单元的情况决定;将元组向量相同的元组合并到同一数据块中,且将该数据块与该元组向量对应;其中,所述查询单元集合是预先由查询工作负载中分解出的查询单元组合而成的。进一步,在所述将元组向量相同的元组合并到同一数据块后,还包括:将相近的元组向量划分到同一向量组中;将同一向量组中各元组向量所对应的数据块进行合并;其中,合并后的数据块所对应的向量为所述相近的元组向量之间进行并操作后得到的向量。其中,所述将相近的元组向量划分到同一向量组中,具体包括:将每个元组向量单独划分到一个向量组中,作为初始划分得到的向量组;进行至少一次向量组合并;在一次向量组合并过程中:依据当前向量组的整体代价指标c(p)将相近的两个向量组合并,使得相近的元组向量划分到同一向量组中;其中,c(p)根据如下公式二计算:其中,n表示当前向量组的数量,c(pi)根据如下公式一计算:公式一中,d为查询单元集合中查询单元的数量,|pi|表示pi中的元组向量的模,wj是fj所涉及的查询条件的数量,fj为所述查询单元集合中的第j个查询单元,u(pi)j)为u(pi)的第j比特,其在pi所对应的任何一个元组,都不符合fj时取值为0,否则为1;其中,pi表示第i个向量组。本发明还提供一种数据库查询装置,包括:查询向量生成模块,用于将用户发送的查询条件与查询单元集合中各查询单元进行比较,根据比较结果生成查询向量;向量选取模块,用于将所述查询向量分别与所述数据库中各数据块所对应的向量进行并操作,根据并操作结果选取向量;数据查询模块,用于根据所述查询条件,在选取的向量所对应的数据块中进行查询,得到查询结果。其中,所述查询向量中的元素与所述查询单元集合中的查询单元一一对应,所述查询向量中的元素的取值,根据所述查询条件是否包含该元素所对应的查询单元的比较结果决定。较佳地,所述向量选取模块具体用于将所述查询向量分别与所述数据库中各数据块所对应的向量进行并操作,选取与所述查询向量执行并操作后得到的元素均为1的向量。进一步,所述装置还包括:数据块划分模块,用于针对所述数据库中的每个元组,生成与该元组对应的元组向量;将元组向量相同的元组合并到同一数据块中,且将该数据块与该元组向量对应;其中,所述元组向量中的元素与所述查询单元集合中的查询单元一一对应,且元素排序与所述查询向量中的元素排序一致;所述元组向量中元素的取值,根据该元组是否满足所述元素所对应的查询单元的情况决定。进一步,所述数据块划分模块还用于将相近的元组向量划分到同一向量组中;将同一向量组中各元组向量所对应的数据块进行合并;其中,合并后的数据块所对应的向量为所述相近的元组向量之间进行并操作后得到的向量。本发明还提供一种数据块划分装置,包括上述的数据块划分模块。本发明实施例的技术方案中,根据对查询工作负载的分解结果,并通过优化技术(比如聚类算法)自动完成元组到数据块的映射关系,并建立数据块所对应的向量以便于作为后续查询的索引,相比现有技术简单的范围分区或者哈希分区,或人为地制定数据块分区策略进行数据块划分,可以得到更加细致的数据块,且数据块的划分更为合理,更便于在后续基于此划分的数据块基础上实现精细化的跳读,提高查询效率。附图说明图1为本发明实施例提供的一种数据块划分方法的流程图;图2为本发明实施例提供的一种将相近的元组向量的元组向量对应的数据块进行合并的方法流程图;图3为本发明实施例提供的一种将相近的两个向量组合并的方法流程图;图4为本发明实施例提供的一种数据库查询方法的流程图;图5为本发明实施例提供的一种数据库查询装置的内部结构图。具体实施方式为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。本
技术领域
技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。需要说明的是,本发明实施例中所有使用“第一”和“第二”的表述均是为了区分两个相同名称非相同的实体或者非相同的参量,可见“第一”“第二”仅为了表述的方便,不应理解为对本发明实施例的限定,后续实施例对此不再一一说明。本发明的技术方案中,首先根据对查询工作负载的分解结果自动进行数据块划分,具体流程如图1所示,包括如下步骤:步骤s100:将查询工作负载进行分析,得到查询单元集合。查询工作负载(或称查询工作负载)是由查询构成的一个集合,一个数据库系统往往可以通过分析日志文件,把典型的查询工作负载构造出来。查询工作负载里的每个查询,包含一个查询条件,数据库的每个元组(记录),经过这个查询条件评估以后,可以确定该元组是否符合该查询条件。比如,查询过滤条件为“年龄>=30”,那么只有年龄大于等于30的元组符合查询条件,年龄小于30岁的元组不符合查询条件。在这里,我们假设查询条件是查询单元的合取式,一个查询单元中包括一个谓词;即查询条件由至少一个查询单元(谓词)通过“而且”的逻辑操作构成,比如查询条件“年龄>=30而且性别=’男’”由两个查询单元(谓词)构成,分别是“年龄>=30”和“性别=’男’”。查询工作负载分析,就是把这些合取式提取出来,比如某个查询工作负载由四个查询条件构成,分别用q1、q2、q3和q4,比如:q1:产品=’衣服’;q2:产品in(‘衣服’,‘衬衫’)而且销量>32万元;q3:产品=’衬衫’而且销量>21万元而且客户年龄>30;q4:客户年龄>30;通过频繁项集算法,计算查询工作负载中每个查询单元(谓词)的频繁程度;进而,将频繁程度高的k个查询单元(谓词)组成一个查询单元集合,其中k是一个可以由本领域技术人员指定的参数。更优地,本步骤中,在组成查询单元集合之前还可以对具有包含关系的查询条件做进一步的合并:通常一个查询条件一般包含多个查询单元(谓词),比如“产品=’衬衫’而且销量>21(万元)”包含两个查询单元(谓词),分别是“产品=’衬衫’”,“销量>21(万元)”。更优地,我们可以对单个的查询单元(谓词)进行进一步的分析,分析查询单元之间的一种微妙的包含关系,比如“销量>21(万元)”的记录集合是包含“销量>32(万元)”的记录集合的。这就类似于,年龄大于10岁的人群,包含了年龄大于30岁的人群。上述查询工作负载,经过对查询单元(谓词)的包含关系进行分析以后,形成了如下的改进的表示形式:q1:产品=’衣服’而且产品in(‘衣服’,‘衬衫’);q2:产品in(‘衣服’,‘衬衫’)而且销量>32万元而且销量>21万元;q3:产品=’衬衫’而且销量>21(万元)而且客户年龄>30而且产品in(‘衣服’,‘衬衫’);q4:客户年龄>30;其中,加底划线的是增加的谓词,但是增加这些谓词,不改变原来的查询条件的含义,但是把前文所述的包含关系给表达出来了,有利于更准确统计每个查询单元(谓词)的频率。在此基础上,通过频繁项集算法,计算经过包含关系分析的查询工作负载中每个查询单元(谓词)的频繁程度;进而,将频繁程度高的k个查询单元(谓词)组成一个查询单元集合。也就是说,它涵盖了查询工作负载中的最少k个查询单元(谓词)。步骤s101:针对数据库中的每个元组,生成与该元组对应的元组向量。本步骤中,对数据库的整个表格进行扫描,每扫描获取一个元组(记录)后,针对查询单元集合中的每个查询单元,判断该元组是否符合该查询单元,并记录判断结果;比如,该元组符合该查询单元,则记录判断结果为0;否则,记录判断结果为1。例如,数据库中包括如下表1中所示的6个元组,序号(id)分别为102~107。这些元组由若干字段构成,分别是元组的id、交易发生的时间、销售的产品类别、销售量等。表1描述id时间产品客户年龄销售量元组110209:15:00鞋子3515元组210309:16:00鞋子2022元组310409:17:00帽子2015元组410509:31:00衣服3610元组510609:34:00帽子3623元组610709:35:00衬衫2915查询单元集合中包括如下表2所示的3个查询单元:表2代号查询单元频率f1产品in(‘衣服’,‘衬衫’)4f2客户年龄>302f3销量>21(万元)2分别用上述的查询单元f1、f2、f3过滤上述元组1,也就是说,针对查询单元集合中的每个查询单元,判断元组1是否符合该查询单元,并记录判断结果;比如,元组1不符合f1(0),符合f2(1),不符合f3(0),从而得到的判断结果分别记录为:0、1、0。对于每个元组,将该元组是否符合查询单元集合的各查询单元的判断结果组成向量后,得到该元组的元组向量。比如,表3示出了元组1~元组6的元组向量。表3也就是说,元组的元组向量中的元素是与查询单元集合中的查询单元一一对应的,而元组向量中的元素的取值,根据该元组是否符合该元素所对应的查询单元的判断结果决定。步骤s102:将元组向量相同的元组合并到同一数据块中。本步骤中,可以将元组向量相同的元组合并于到同一数据块中,而该数据块是与该元组向量相对应的;进而还可以统计出该元组向量所对应的数据块中元组的数量,形成<元组向量,元组数量>对。在上述表3所示的举例中,所有的元组向量所对应的数据块中元组的数量都是1。更优地,为减少元组向量的数量,也就是减少划分的数据块的数量,节省维护数据块管理信息的空间,还可以执行如下步骤s103对数据块进行合并。步骤s103:将相近的元组向量的元组向量对应的数据块进行合并,具体方法流程如图2所述,包括如下步骤:步骤s201:将每个元组向量单独划分到一个向量组中,作为初始划分得到的向量组。比如,有m个元组向量,则将m个元组向量分别划分到p1,p2,…,pm向量组,其中,pi表示第i个向量组,第i个元组向量被划分到pi中。比如上述表3中的元组向量可分别划分到p1,p2,…,p6向量组中。上述<元组向量,元组数量>对中的元组数量决定每个划分的向量组中的元组向量所对应的元组数,同时也决定了划分向量组的个数。例如:上述例子中6个元组向量的元组数量均为1,即没有元组的向量是相同的,因此首先划分为6个向量组,每个组中包含1个元组向量。假设元组向量2对应的元组数量为2,且对应的元组分别为元组2和3,那么这两个元组均对应于同一个向量组。步骤s202:进行至少一次向量组合并。在一次向量组合并过程中,依据当前向量组的整体代价指标c(p)将相近的两个向量组合并,使得相近的元组向量划分到同一向量组中,具体划分方法流程,如图3所示,包括如下步骤:步骤s301:计算每个查询单元的权重值。具体地,第j个查询单元的权重值wj是fj所涉及的查询条件的数量,其中,fj为查询单元集合中的第j个查询单元。比如上述举例中,f2“客户年龄>30”涉及了查询条件q3和q4,所以w2是2。步骤s302:针对每个向量组,用各查询单元裁剪该向量组。具体地,用fj裁剪pi的过程为:如果pi所对应的任何一个元组,都不符合fj,从而确定裁剪结果u(pi)的第j比特,即u(pi)j)为0;否则,为1。步骤s303:合并相近的两个向量组,使得整体代价指标c(p)的变化最大。具体地,针对pi定义了一个重要代价指标c(pi)如下公式1所示,它表示pi中的元组向量对应有多少元组,能够在执行所有的查询的时候,可以被忽略掉。公式一中,d为查询单元集合中查询单元的数量,|pi|表示pi中的元组向量的模;该公式的含义为,当u(pi)j为1的时候,1-1=0,那么没有元组可以忽略,当为0的时候,1-0=1,那么该元组可以忽略。当前向量组的整体代价指标c(p)的计算如下公式二所示:公式二中,n表示当前向量组的数量。合并最有利的相近的两个向量组;所谓相近,就是合并了这两个向量组之后,c(p)的变化最大。在合并两个向量组,得到新的向量组后,可多次重复上述步骤s302-s303。从而通过整体代价指标,利用标准的凝聚层次聚类办法,可以把元组向量,分成一组一组的,从而也就将元组向量所对应的元组也划分为一组一组的。一个向量组中的元组向量所对应的元组可以划分到一个数据块中。将数据块所对应的向量组中各元组向量执行并操作后得到的向量,作为该数据块所对应的数据块向量。例如上述表3中的各元组可以划分为表4所示的向量组所对应的数据块中,第i个数据块所对应的数据块向量为u(pi)。表4例如表5所示,p1对应的向量组中,元组1的元组向量为(0,1,0),元组4的元组向量为(1,1,0),两者的并(union)操作结果为(1,1,0),所以p1对应的数据块所对应的向量为u(p1)=(1,1,0)。表5记录1010记录4110union操作0union1为11union1为10union0为0u(p1)110在数据库划分完毕后,可以记录划分的数据块的必要的管理信息,比如数据块的管理信息可以包括:数据块的块头header、块尾tail,描述性信息等;其中,描述性信息可以包括记录数量、数据块大小等信息。本发明实施例提供的根据对查询工作负载的分解结果自动进行数据块划分方法,相比现有技术人为地制定数据块分区策略进行数据块划分,可以得到更加细致的数据块,且数据块的划分更为合理,更便于后续查询过程中实现精细化的跳读,提高查询效率。基于根据上述方法预先划分的数据块,本发明实施例提供的一种数据库查询方法的流程,如图4所示,包括如下步骤:步骤s401:将用户发送的查询条件与查询单元集合中各查询单元进行比较,根据比较结果生成查询向量。本步骤中,生成的查询向量中的元素与所述查询单元集合中的查询单元一一对应,且查询向量中的元素排序与上述元组向量中的元素排序一致。所述查询向量中的元素的取值,根据所述查询条件是否包含该元素所对应的查询单元的比较结果决定。比如,查询条件包含某元素所对应的查询单元,则该元素取值0,否则取值为1。假设某个查询的查询条件为“产品in(‘衣服’,‘衬衫’)而且客户年龄>30”,那么我们查询f1、f2、f3,这个查询条件包含f1、f2,我们得到一个查询向量(0,0,1),前两个0对应f1和f2,最后一个1对应f3。步骤s402:将所述查询向量分别与所述数据库中各数据块所对应的向量进行并操作,根据并操作结果选取向量。具体地,将所述查询向量分别与所述数据库中各数据块所对应的向量进行并操作后,确定出并操作结果得到的各元素均为1的向量,并选取该向量。比如,把查询向量(0,0,1)和上述的u(p1)、u(p2)、u(p3)做并(union)操作,针对u(p1)的(0,0,1)和(1,1,0)的union操作为(1,1,1),针对u(p2)的(0,0,1)和(0,1,1)的union操作为(0,1,1),针对u(p3)的(0,0,1)和(1,0,0)的union操作为(1,0,1)。只有与u(p1)的union操作所得到的向量的所有bit为1,因此,选择u(p1)。步骤s403:根据所述查询条件,在选取的向量所对应的数据块中进行查询,得到查询结果。比如,在上述步骤中选择出u(p1)后,则只需在u(p1)所对应的数据块中进行查询,并返回查询结果。而u(p2)与u(p3)所对应的数据块则可跳读,提高查询效率。基于上述的方法,本发明实施例提供的一种数据库查询装置,结构如图5所示,包括:查询向量生成模块501、向量选取模块502、数据查询模块503。查询向量生成模块501用于将用户发送的查询条件与查询单元集合中各查询单元进行比较,根据比较结果生成查询向量;其中,所述查询向量中的元素与所述查询单元集合中的查询单元一一对应,所述查询向量中的元素的取值,根据所述查询条件是否包含该元素所对应的查询单元的比较结果决定。向量选取模块502用于将所述查询向量分别与所述数据库中各数据块所对应的向量进行并操作,根据并操作结果选取向量;具体地,向量选取模块502具体用于将所述查询向量分别与所述数据库中各数据块所对应的向量进行并操作,选取与所述查询向量执行并操作后得到的元素均为1的向量。数据查询模块503用于根据所述查询条件,在选取的向量所对应的数据块中进行查询,得到查询结果。进一步,本发明实施例提供的一种数据库查询装置还可以包括:数据块划分模块504。数据块划分模块504用于针对所述数据库中的每个元组,生成与该元组对应的元组向量;将元组向量相同的元组合并到同一数据块中;其中,所述元组向量中的元素与所述查询单元集合中的查询单元一一对应,且元素排序与所述查询向量中的元素排序一致;所述元组向量中元素的取值,根据该元组是否满足所述元素所对应的查询单元的情况决定。进一步,所述数据块划分模块504还用于将相近的元组向量划分到同一向量组中;将同一向量组中各元组向量所对应的数据块进行合并;其中,合并后的数据块所对应的向量为所述相近的元组向量之间进行并操作后得到的向量。数据块划分模块504将元组向量进行向量组划分的具体方法可参考上述图2、图3所示流程的各步骤中的方法,此处不再赘述。当然,上述的数据块划分模块也可包含于数据块划分装置中,而独立于上述数据库查询装置之外。本发明实施例的技术方案中,根据对查询工作负载的分解结果,并通过优化技术(比如聚类算法)自动完成元组到数据块的映射关系,并建立数据块所对应的向量以便于作为后续查询的索引,相比现有技术简单的范围分区或者哈希分区,或人为地制定数据块分区策略进行数据块划分,可以得到更加细致的数据块,且数据块的划分更为合理,更便于在后续基于此划分的数据块基础上实现精细化的跳读,提高查询效率。本
技术领域
技术人员可以理解,本发明包括涉及用于执行本申请中所述操作中的一项或多项的设备。这些设备可以为所需的目的而专门设计和制造,或者也可以包括通用计算机中的已知设备。这些设备具有存储在其内的计算机程序,这些计算机程序选择性地激活或重构。这样的计算机程序可以被存储在设备(例如,计算机)可读介质中或者存储在适于存储电子指令并分别耦联到总线的任何类型的介质中,所述计算机可读介质包括但不限于任何类型的盘(包括软盘、硬盘、光盘、cd-rom、和磁光盘)、rom(read-onlymemory,只读存储器)、ram(randomaccessmemory,随即存储器)、eprom(erasableprogrammableread-onlymemory,可擦写可编程只读存储器)、eeprom(electricallyerasableprogrammableread-onlymemory,电可擦可编程只读存储器)、闪存、磁性卡片或光线卡片。也就是,可读介质包括由设备(例如,计算机)以能够读的形式存储或传输信息的任何介质。本
技术领域
技术人员可以理解,可以用计算机程序指令来实现这些结构图和/或框图和/或流图中的每个框以及这些结构图和/或框图和/或流图中的框的组合。本
技术领域
技术人员可以理解,可以将这些计算机程序指令提供给通用计算机、专业计算机或其他可编程数据处理方法的处理器来实现,从而通过计算机或其他可编程数据处理方法的处理器来执行本发明公开的结构图和/或框图和/或流图的框或多个框中指定的方案。本
技术领域
技术人员可以理解,本发明中已经讨论过的各种操作、方法、流程中的步骤、措施、方案可以被交替、更改、组合或删除。进一步地,具有本发明中已经讨论过的各种操作、方法、流程中的其他步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。进一步地,现有技术中的具有与本发明中公开的各种操作、方法、流程中的步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本公开的范围(包括权利要求)被限于这些例子;在本发明的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本发明的不同方面的许多其它变化,为了简明它们没有在细节中提供。因此,凡在本发明的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本发明的保护范围之内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1