用于搜索数据库的方法和装置制造方法

文档序号:6501028阅读:118来源:国知局
用于搜索数据库的方法和装置制造方法
【专利摘要】本发明提供一种用于搜索数据库的方法和装置。该方法包括:基于搜索条件中设定的数据条目之间的连接条件,分组所述数据条目;以及基于所述数据条目的所述分组执行所述搜索。本发明可以有效地并且高效地解决对于现有的MapReduce查询处理系统而言共同的问题,从而特别适合于大集群系统中的大数据集分析。
【专利说明】用于搜索数据库的方法和装置

【技术领域】
[0001]本发明的实施方式涉及数据库领域,更具体地,涉及一种用于搜索数据库的方法和装置。

【背景技术】
[0002]随着数据库技术的不断发展,对数据库的搜索/查询技术的要求也日益提升。在实践中,MapReduce(映射-合并)框架已经被广泛作为对在大集群系统中的大数据分析的有效方法。MapReduce应用开发要求开发人员将应用程序逻辑编码为由MapReduce公开的简单接口(即map和reduce函数)。尽管这样的map和reduce接口提供了极高的编程灵活性,但它们非常难以实现、优化和维护,尤其是对于在实际生产中涉及到的复杂和非无关紧要的数据分析作业而言。从关系数据库技术(即,SQL)的成功可以明显看出,如果数据处理程序以如下声明式查询语言(declarative query language)进行编写,则程序开发和优化将非常高效和有效,前述声明式查询语言隐藏了实现细节并且可以进行修改以加以优化。在这种情况下,用户可以直接编写声明性查询,该查询继而将被转换成待由MapReduce平台(例如,Hadoop)执行的MapReduce程序(作业)序列。
[0003]近来,已经提出了若干声明式语言并且集成到了基于MapReduce的系统,诸如PigLatin/Pig, HiveQL/Hive。在这些系统中,用户直接编写声明式查询,其随后被转换成待由MapReduce平台(例如Hadoop)执行的MapReduce程序(作业)序列。这些语言极大地改进了 MapReduce应用开发人员的生产率。然而,它们的效果和影响受到两个主要问题的限制。一方面,到目前为止在查询转换过程期间,仅已经开发出一些非常专门化的优化技术。因而,实践中,观察到针对许多查询而自动转换的MapReduce程序与由有经验的程序员编写的手工优化的程序相比总是极度低效。例如,现有的语言转换器采用本地化的一个操作-一个作业方法,其简单地用预备好的MapReduce程序来代替查询图中的每个操作。另一方面,现有的MapReduce语言提供用于操作数据集合体的有限的句法,主要以公知的关系连接(join)和GROUP BY的形式。这样,这些语言允许用户能够将定制的MapReduce脚本插入到他们的查询语言中。这实际上削弱了使用声明式语言的益处并且可能引起次优的、易出错的并且难以维护的代码。


【发明内容】

[0004]为了解决现有技术中存在的上述问题,本说明书提出如下方案。
[0005]根据本发明的一个方面,提出一种搜索数据库的方法,包括:基于搜索条件中设定的数据条目之间的连接条件,分组所述数据条目;以及基于所述数据条目的所述分组执行所述搜索。
[0006]在本发明的可选实现中,所述基于搜索条件中设定的数据条目之间的连接条件,分组所述数据条目进一步包括通过以下中的至少一种来变换所述搜索条件的步骤:从所述搜索条件中去除模式、重写规则以及去除嵌套。
[0007]在本发明的可选实现中,所述分组还基于所述搜索条件中设定的所述数据条目的值之间的依赖关系进行。
[0008]在本发明的可选实现中,所述搜索条件包括SQL查询语句。
[0009]在本发明的可选实现中,所述数据库中的数据项的类型包括以下中的一个:记录类型^111,...^11:如>、序列类型[t]、集合类型{t}、以及映射类型{(tl,t2)};其中,η是自然数,tl,...,tn是递归定义类型,Al,...,An是组件名,并且映射类型{(tl,t2)}将类型tl的关键字绑定到类型t2。
[0010]在本发明的可选实现中,所述SQL查询语句包括如下形式:
[0011]SELECT[DISTINCT]es
[0012]FROM pfl in efl,..., pfn in efn
[0013][WHERE ej
[0014][GROUP BY pg:eg [HAVING eh]]
[0015][ORDER BY ej
[0016]其中,[]中的语句为可选语句;并且其中,61?1,...,6&,6:3、61?、6!;、和6。是任意表达式;FR0M子句中的pfl,...,Pfn中的每个是模式,efl,...,efn中的每个是返回序列、集合或者关键字-值配对映射的表达式,“pin e”形式表示模式P匹配e中的每个元素,并将其模式变量绑定到元素中的对应值;GR0UP BY子句中的pg: %形式表示将查询结果划分成组,从而每个组内的成员具有相同值eg,模式Pg绑定到跨每个组共同的GROUP BY值。
[0017]在本发明的可选实现中,基于所述数据条目的所述分组执行所述搜索进一步包括以下中的一个或多个:设置新的查询变量以关联到所述查询语句中的每个SELECT表达式;去除所述SQL查询语句中的所有连接和过滤谓词;以及用单个绑定来替代每个SELECT表达式中的FROM部分,所述单个绑定使用元组模式来绑定直接嵌套的SELECT表达式的查询变量和FROM部分的变量。
[0018]在本发明的可选实现中,所述搜索基于映射-合并方式并行进行。
[0019]在本发明的可选实现中,在针对所述搜索的所述映射-合并方式多于一种时,评估所述映射-合并方式中每种所述映射-合并方式的开销,并且选择开销最小的映射-合并方式作为实际搜索方式。
[0020]在本发明的可选实现中,所述映射-合并方式包括以下步骤中的一个或多个:减少由映射-合并作业读取输入数据和写入输出数据的I/o开销、将彼此独立的多个映射-合并作业组合成单个映射-合并作业、以及在产品-消费者作业对中至少一个作业是仅映射的,或者两个作业共享同一映射关键字时组合所述产品-消费者作业对。
[0021]在本发明的可选实现中,所述映射-合并方式包括使用如下形式的执行方式:
[0022]REPEAT v = e STEP body [limit η]
[0023]其中,V是需要重复的变量,e的类型是某一类型T的集合{T},body的类型是{(T,布尔型)},η为自然数;并且其中,所述REPEAT语句表示首先将v绑定到e的值,然后重复计算body,并且从之前的重复计算中将新值赋予V,如果重复的次数变为η、或者当所有由body返回的布尔型都为假时,则停止所述执行。
[0024]根据本发明的另一方面,提出一种搜索数据库的装置,包括:分组装置,被配置为基于搜索条件中设定的数据条目之间的连接条件,分组所述数据条目;以及执行装置,被配置为基于所述数据条目的所述分组执行所述搜索。
[0025]在本发明的可选实现中,所述分组装置进一步包括通过以下装置中的至少一个:模式去除装置,被配置为从所述搜索条件中去除模式;查询简化装置,被配置为重写规则;以及嵌套去除装置,被配置为去除嵌套。
[0026]在本发明的可选实现中,所述分组装置还基于所述搜索条件中设定的所述数据条目的值之间的依赖关系进行所述分组。
[0027]在本发明的可选实现中,所述搜索条件包括SQL查询语句。
[0028]在本发明的可选实现中,所述数据库中的数据项的类型包括以下中的一个:记录类型^111,...^11:如>、序列类型[t]、集合类型{t}、以及映射类型{(tl,t2)};其中,η是自然数,tl,...,tn是递归定义类型,Al,...,An是组件名,并且映射类型{(tl,t2)}将类型tl的关键字绑定到类型t2。
[0029]在本发明的可选实现中,所述SQL查询语句包括如下形式:
[0030]SELECT[DISTINCT]es
[0031]FROM pfl in efl,..., pfn in efn
[0032][WHERE ej
[0033][GROUP BY pg:
[0034][ORDER BY ej
[0035]其中,[]中的语句为可选语句;并且其中,efl,..., efn, es、ew、eg、和e。是任意表达式;FR0M子句中的pfl,...,Pfn中的每个是模式,efl,...,efn中的每个是返回序列、集合或者关键字-值配对映射的表达式,“pin e”形式表示模式P匹配e中的每个元素,并将其模式变量绑定到元素中的对应值;GR0UP BY子句中的pg: %形式表示将查询结果划分成组,从而每个组内的成员具有相同值eg,模式Pg绑定到跨每个组共同的GROUP BY值。
[0036]在本发明的可选实现中,所述执行装置进一步包括以下装置中的一个或多个:新变量设置装置,被配置为设置新的查询变量以关联到所述查询语句中的每个SELECT表达式;去除装置,被配置为去除所述SQL查询语句中的所有连接和过滤谓词;以及替代装置,被配置为用单个绑定来替代每个SELECT表达式中的FROM部分,所述单个绑定使用元组模式来绑定直接嵌套的SELECT表达式的查询变量和FROM部分的变量。
[0037]在本发明的可选实现中,所述执行装置基于映射-合并方式并行进行所述搜索。
[0038]在本发明的可选实现中,用于搜索数据库的装置还包括:评估-选择装置,被配置为在针对所述搜索的所述映射-合并的方案多于一种时,评估所述映射-合并方式中每种所述映射-合并方式的开销,并且选择开销最小的映射-合并方式作为实际搜索方式。
[0039]在本发明的可选实现中,所述执行装置进一步包括以下装置中的一个或多个:作业压缩装置,被配置为减少由映射-合并作业读取输入数据和写入输出数据的I/o开销;水平合并装置,被配置为将彼此独立的多个映射-合并作业组合成单个映射-合并作业;以及垂直合并装置,被配置为在产品-消费者作业对中至少一个作业是仅映射的,或者两个作业共享同一映射关键字时组合所述产品-消费者作业对。
[0040]在本发明的可选实现中,所述映射-合并方式包括使用如下形式的执行方式:
[0041]REPEAT v = e STEP body[limit η]
[0042]其中,V是需要重复的变量,e的类型是某一类型T的集合{T},body的类型是{(T,布尔型)},η为自然数;并且其中,所述REPEAT语句表示首先将v绑定到e的值,然后重复计算body,并且从之前的重复计算中将新值赋予V,如果重复的次数变为η、或者当所有由body返回的布尔型都为假时,则停止所述执行。
[0043]通过本发明的上述各种实现,可以在任何位置都允许SQL的嵌套的查询和用户定义的函数(UDF)、允许对分组数据的操作、支持自定义筛选器/聚集作为UDF以及支持声明式递归。此外,根据本发明所提供的查询优化框架还有效地将用扩展的SQL编写的声明式查询转换成MapReduce作业的优化的流。

【专利附图】

【附图说明】
[0044]通过参考附图阅读下文的详细描述,本发明实施方式的上述以及其他目的、特征和优点将变得明显。在附图中,以示例性而非限制性的方式示出了本发明的若干实施方式,其中相同的参考标号表示相同或相似的元素。
[0045]图1示出了根据本发明实施方式的用于搜索数据库的方法100的流程图;
[0046]图2示出了根据本发明一个实施方式的、针对特定示例所生成的查询图;
[0047]图3图示了 MapReduce作业的计算流程;
[0048]图4图示了根据本发明的查询优化器的架构400 ;
[0049]图5示出了了根据本发明示例性实施方式的用于搜索数据库的装置图500 ;
[0050]图6示出了适于用来实现本发明实施方式的示例性计算系统600的框图。

【具体实施方式】
[0051]为了更为充分和灵活地利用SQL语言的特点以及更为清楚地阐述本发明的各种实现方式,首先对现有的SQL数据模型进行扩展。例如,可以利用除了基本类型(布尔型,整型,字符串型,等)和元组(tl,...tn)之外的如下附加类型对SQL的数据模型进行扩展:
[0052]记录:〈Al:tl,..., An: tn> ;
[0053]序列:[t];
[0054]集合:{t};
[0055]映射:{(tl,t2)};
[0056]其中,tl, t2,…,tn是(递归定义)类型,并且Al,…,An是组件名。此外,映射(tl,t2)将类型tl的关键字绑定到类型t2。
[0057]本领域技术人员应当理解,上述对SQL数据模型的扩展是为了更为充分地利用SQL语言的特点,而不能作为对本发明的各种实现方式的限制。实际上,基本的SQL数据模型也完全适合于本发明的各种实现方式。
[0058]由此,在本发明的系统中,可以将SQL查询扩展如下:
[0059]SELECT[DISTINCT]es
[0060]FROM pfl in efl,..., pfn in efn
[0061][WHERE ej
[0062][GROUP BY pg:eg [HAVING eh]]
[0063][ORDER BY ej
[0064]其中,如本领域技术人员所熟悉,[]中的语句为可选语句。此外,efl,...,efn,es、ew、eg、和e。是任意表达式,其可以包含其它的嵌套的SELECT查询;FROM子句包含“p in e”形式的查询绑定,其中,P是模式,并且e是返回集合体(即序列、集合或者关键字-值配对映射)的表达式。模式P匹配集合体e中的每个元素,将其模式变量绑定到元素中的对应值。换而言之,这一查询绑定指定了集合体e上的迭代(一次指定一个元素),使得模式P与当前集合体元素相匹配。例如,以下查询
[0065]SELECT (n, mn)
[0066]FR0M〈name:n, manager:m>in Employees,
[0067]<name:mn>in m
[0068]在Employees上迭代,并且针对每个employee记录,其用模式〈name:η,manager:m>匹配记录,这一匹配将变量η和m分别绑定到记录组件name和manager,并且忽略掉其余内容。
[0069]GROUP BY子句采用形式p:e以将查询结果划分成分组,从而每个群组的成员具有相同值e。模式P绑定到跨每个组共同的GR0UPBY值。因而,GROUP BY操作提升了在FROM子句中定义的、从类型T到集合{T}的所有非GROUP BY模式变量,这表明每个这样的变量必须包含多个值,群组的每个成员一个值。
[0070]ORDER BY子句在可选的GROUP BY之后通过e。值来排序查询结果。
[0071]利用上述扩展SQL,可以声明性地表达如后文所出现的任意MapReduce作业。
[0072]一般而言,MapReduce作业对于任意类型的α , β , r和k,使用map函数m和reduce函数r将类型为{a}的数据集合s转换成类型为{ β }的数据集合,m和r的类型为:
[0073]m: α — {(κ,y )}r: (κ , { y }) — β
[0074]其中,映射函数m将类型为α的值从输入数据集合变换成类型为{(κ,Υ)}的中间关键字/值配对。Reduce函数r将与同一关键字类型κ相关联的中间配对合并,并且产生类型为β的值的集合,该集合被并入到MapReduce结果中。上述MapReduce作业等同于:
[0075]

【权利要求】
1.一种搜索数据库的方法,包括: 基于搜索条件中设定的数据条目之间的连接条件,分组所述数据条目;以及 基于所述数据条目的所述分组执行所述搜索。
2.根据权利要求1所述的方法,其中,所述基于搜索条件中设定的数据条目之间的连接条件,分组所述数据条目进一步包括通过以下中的至少一种来变换所述搜索条件的步骤: 从所述搜索条件中去除模式、重写规则以及去除嵌套。
3.根据权利要求1所述的方法,其中,所述分组还基于所述搜索条件中设定的所述数据条目的值之间的依赖关系进行。
4.根据权利要求1-3中任一所述的方法,其中,所述搜索条件包括SQL查询语句。
5.根据权利要求4所述的方法,其中,所述数据库中的数据项的类型包括以下中的一个: 记录类型<Al:tl,...,An:tn>、序列类型[t]、集合类型{t}、以及映射类型{(tl,t2)}; 其中,η是自然数,tl,...,tn是递归定义类型,Al,..., An是组件名,并且映射类型{(tl,t2)}将类型tl的关键字绑定到类型t2。
6.根据权利要求5所述的方法,其中,所述SQL查询语句包括如下形式:
SELECT[DISTINCT] es
FROM pfl in efl,..., pfn in efn
[WHERE ew]
[GROUP BY pg:eg [HAVING eh]]
[ORDER BY ej 其中,[]中的语句为可选语句; 并且其中,efl,..., efn, es、ew、eg、和e。是任意表达式; FROM子句中的pfl,...,Pfn中的每个是模式,efl,...,efn中的每个是返回序列、集合或者关键字-值配对映射的表达式,“P in e”形式表示模式P匹配e中的每个元素,并将其模式变量绑定到元素中的对应值; GROUP BY子句中的pg: %形式表示将查询结果划分成组,从而每个组内的成员具有相同值eg,模式pg绑定到跨每个组共同的GROUP BY值。
7.根据权利要求6所述的方法,其中,基于所述数据条目的所述分组执行所述搜索进一步包括以下中的一个或多个: 设置新的查询变量以关联到所述查询语句中的每个SELECT表达式; 去除所述SQL查询语句中的所有连接和过滤谓词;以及 用单个绑定来替代每个SELECT表达式中的FROM部分,所述单个绑定使用元组模式来绑定直接嵌套的SELECT表达式的查询变量和FROM部分的变量。
8.根据权利要求1-3中任一所述的方法,其中,所述搜索基于映射-合并方式并行进行。
9.根据权利要求8所述的方法,其中,在针对所述搜索的所述映射-合并方式多于一种时,评估所述映射-合并方式中每种所述映射-合并方式的开销,并且选择开销最小的映射-合并方式作为实际搜索方式。
10.根据权利要求8所述的方法,其中,所述映射-合并方式包括以下步骤中的一个或多个: 减少由映射-合并作业读取输入数据和写入输出数据的I/o开销、将彼此独立的多个映射-合并作业组合成单个映射-合并作业、以及在产品-消费者作业对中至少一个作业是仅映射的,或者两个作业共享同一映射关键字时组合所述产品-消费者作业对。
11.根据权利要求8所述的方法,其中,所述映射-合并方式包括使用如下形式的执行方式:
REPEAT V = e STEP body[limit η] 其中,V是需要重复的变量,e的类型是某一类型T的集合{T},body的类型是{(T,布尔型)},n为自然数; 并且其中,所述REPEAT语句表示首先将V绑定到e的值,然后重复计算body,并且从之前的重复计算中将新值赋予V,如果重复的次数变为η、或者当所有由body返回的布尔型都为假时,则停止所述执行。
12.一种搜索数据库的装置,包括: 分组装置,被配置为基于搜索条件中设定的数据条目之间的连接条件,分组所述数据条目;以及 执行装置,被配置为基于所述数据条目的所述分组执行所述搜索。
13.根据权利要求12所述的装置,其中,所述分组装置进一步包括通过以下装置中的至少一个: 模式去除装置,被配置为从所述搜索条件中去除模式; 查询简化装置,被配置为重写规则;以及 嵌套去除装置,被配置为去除嵌套。
14.根据权利要求12所述的装置,其中,所述分组装置还基于所述搜索条件中设定的所述数据条目的值之间的依赖关系进行所述分组。
15.根据权利要求12-14中任一所述的装置,其中,所述搜索条件包括SQL查询语句。
16.根据权利要求15所述的装置,其中,所述数据库中的数据项的类型包括以下中的一个: 记录类型<Al:tl,...,An:tn>、序列类型[t]、集合类型{t}、以及映射类型{(tl,t2)}; 其中,η是自然数,tl,...,tn是递归定义类型,Al,...,An是组件名,并且映射类型{(tl, t2)}将类型tl的关键字绑定到类型t2。
17.根据权利要求16所述的装置,其中,所述SQL查询语句包括如下形式:
SELECT[DISTINCT] es
FROM pfl in efl,..., pfn in efn
[WHERE ew]
[GROUP BY pg:eg [HAVING eh]]
[ORDER BY ej 其中,[]中的语句为可选语句;并且其中,efl,..., efn, es、ew、eg、和e。是任意表达式; FROM子句中的pfl,...,Pfn中的每个是模式,efl,...efn中的每个是返回序列、集合或者关键字-值配对映射的表达式,“P in e”形式表示模式P匹配e中的每个元素,并将其模式变量绑定到元素中的对应值; GROUP BY子句中的pg: %形式表示将查询结果划分成组,从而每个组内的成员具有相同值eg,模式pg绑定到跨每个组共同的GROUP BY值。
18.根据权利要求17所述的装置,其中,所述执行装置进一步包括以下装置中的一个或多个: 新变量设置装置,被配置为设置新的查询变量以关联到所述查询语句中的每个SELECT表达式; 去除装置,被配置为去除所述SQL查询语句中的所有连接和过滤谓词;以及 替代装置,被配置为用单个绑定来替代每个SELECT表达式中的FROM部分,所述单个绑定使用元组模式来绑定直接嵌套的SELECT表达式的查询变量和FROM部分的变量。
19.根据权利要求12-14中任一所述的装置,其中,所述执行装置基于映射-合并方式并行进行所述搜索。
20.根据权利要求19所述的装置,还包括: 评估-选择装置,被配置 为在针对所述搜索的所述映射-合并的方案多于一种时,评估所述映射-合并方式中每种所述映射-合并方式的开销,并且选择开销最小的映射-合并方式作为实际搜索方式。
21.根据权利要求19所述的装置,其中,所述执行装置进一步包括以下装置中的一个或多个: 作业压缩装置,被配置为减少由映射-合并作业读取输入数据和写入输出数据的I/O开销; 水平合并装置,被配置为将彼此独立的多个映射-合并作业组合成单个映射-合并作业;以及 垂直合并装置,被配置为在产品-消费者作业对中至少一个作业是仅映射的,或者两个作业共享同一映射关键字时组合所述产品-消费者作业对。
22.根据权利要求19所述的装置,其中,所述映射-合并方式包括使用如下形式的执行方式:
REPEAT V = e STEP body[limit η] 其中,V是需要重复的变量,e的类型是某一类型T的集合{T},body的类型是{(T,布尔型)},n为自然数; 并且其中,所述REPEAT语句表示首先将V绑定到e的值,然后重复计算body,并且从之前的重复计算中将新值赋予V,如果重复的次数变为η、或者当所有由body返回的布尔型都为假时,则停止所述执行。
【文档编号】G06F17/30GK104050202SQ201310095688
【公开日】2014年9月17日 申请日期:2013年3月15日 优先权日:2013年3月15日
【发明者】曹逾, 周宝曜, 陈齐彦, 陈波, 孙宇熙 申请人:伊姆西公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1