在跨分区数据库中查询数据的方法及跨分区查询装置与流程

文档序号:11830118阅读:344来源:国知局
在跨分区数据库中查询数据的方法及跨分区查询装置与流程
本发明涉及数据库领域,尤其涉及一种在跨分区数据库中查询数据的方法及跨分区查询装置。
背景技术
:随着各类IT应用场景,如:系统的集中化建设,海量用户的互联网应用等,需要处理的业务数据量越来越大,基于单个物理数据库以及在单个物理数据库基础上的各种软硬件纵向扩展(scaleup)技术已不能满足存储容量和计算性能的要求。因此发展了数据分区(sharding)技术,数据分区作为一种重要的横向扩展(scaleout)的数据库设计原则,将业务数据拆分到多个不同的物理数据库上,这样能有效缓解单一数据库的性能瓶颈、提高系统的整体数据处理能力。根据数据分区时的拆分依据的规则,数据分区分为垂直分区(或分库)和水平分区(或分表)两种类型。垂直分区是基于业务逻辑,以表为单位、将不同业务模块中使用的表拆分到不同物理数据库中。水平分区基于表中某个字段或多个字段的分区规则,如:哈希或范围选择,将一张表的数据拆分到不同物理数据库中。在业务逻辑复杂、单表数据超大的应用场景中,垂直分区和水平分区可能会混合使用,即先根据业务逻辑进行表之间的垂直分区,再针对数据量较大的表进行水平分区。数据分区技术在有效解决大数据量问题的同时,数据的分布式存储也带来了数据查询处理的复杂性。虽然可以基于业务逻辑进行垂直分区,并在垂直分区内部根据聚合进行水平分区、将联系紧密的数据拆分到同一分区中,实现绝大部分场景下的数据查询本地化,但是仍然存在需要跨分区访问数据的场景,特别是跨分区数据关联。目前,联邦数据库是一种提高可扩展性和管理应用程序的数据库层中的容量限制的方式,采用此方式,一个或多个表可以水平拆分到多个数据库中。由于同一个或多个表的数据存储在不同的物理数据库中,而SQL数据库不支持跨 物理数据库的关联操作。因此跨数据库的关联操作必须在应用程序中实现。例如,一个SQL请求需要关联两个数据库中数据,因此对两个数据库中数据的查询需要分别执行对每个数据库的单独查询,并在应用程序中对查询返回数据做最终的关联。为支持跨数据库查询操作,联邦数据库技术提供了扇出查询(Fan-outquery)机制。Fan-outquery包括两部分:成员查询(Memberquery)和汇总查询(Summaryquery),Memberquery指的是发送到所有查询相关数据库上的部分查询,Summaryquery指的是在Memberquery查询后处理,负责将Memberquery结果汇总为最终结果集。但是上述针对跨数据库的关联查询,至少存在的以下缺点:应用程序需要基于Fan-outquery机制编写复杂的查询SQL,处理各个数据库的查询以及汇总等细节,无法沿用原有的非跨数据库场景下的查询SQL,导致物理数据库的存储细节无法屏蔽,因此在查询过程中,可能需要获取到大量无用的数据,并且跨分区数据库访问,大量数据的交互也导致了网络负担中,并且无法使用非分区的SQL的逻辑。技术实现要素:针对上述问题,本发明的目的在于提供一种提高跨分区数据查询效率和成功率的跨分区数据查询数据方法及跨分区查询装置。第一方面,本发明提供一种在跨分区数据库中查询数据的方法,包括:接收查询请求,查询请求中包括查询条件,涉及关联操作的两表的标识和关联字段;根据涉及关联操作的两表的标识,查询涉及关联操作的两表各自所在的分区数据库的统计信息;根据统计信息和查询条件,向驱动表所在分区数据库发送查询驱动表请求,接收驱动表所在分区数据库返回的第一查询结果集,其中,涉及关联操作的两表中的一表为驱动表,另外一表为非驱动表,驱动表为涉及关联操作的两表中优先被查询的表;对第一查询结果集中的关联字段值进行去重,向非驱动表所在分区数据库发送结果集投递请求和去重后的关联字段值,以便于非驱动表所在分区数据库生成临时表数据,临时表数据包括去重后的关联字段值;向非驱动表所在分区数据库发送查询非驱动表请求,并接收非驱动表所在分区数据库返回的第二查询结果集,其中,第二查询结果集为非驱动表所在分区数据库根据非驱动表请求和临时表数据查询获得的。在第一方面的第一种可能的实现方式中,根据统计信息和查询条件,向驱动表所在分区数据库发送查询驱动表请求,接收驱动表所在分区数据库返回的第一查询结果集,具体的包括:根据统计信息和查询条件,利用预先给定的计算模型,分别计算出单独查询涉及关联操作的两表所消耗的资源,其中,消耗的资源较小的表为驱动表,向驱动表所在分区数据库发送查询驱动表请求,接收驱动表所在分区数据库返回的第一查询结果集。在第一方面的第二种可能的实现方式中,驱动表所在分区数据库具体包括2个以上的分区数据库,则向驱动表所在分区数据库发送查询驱动表请求,接收驱动表所在分区数据库返回的第一查询结果集,具体包括:向所有驱动表所在分区数据库发送查询驱动表请求,接收所有驱动表所在分区数据库返回的第一查询结果集或者根据查询条件;或者向符合查询条件的驱动表所在分区数据库发送查询驱动表请求,接收符合查询条件的驱动表所在分区数据库返回的第一查询结果集或者根据查询条件。结合第一方面的第二种可能的实现方式中,第一方面的第三种可能的实现方式中,还包括:按照哈希算法,存储第一查询结果。在第一方面的第二种可能的实现方式中,还包括:根据关联字段,将第一查询结果集和第二查询结果集进行关联,获得第三查询结果集。第二方面,本发明还提供一种跨分区查询装置,包括:接收模块,用于接收查询请求,查询请求中包括查询条件,涉及关联操作的两表的标识和关联字段;第一查询模块,用于根据涉及关联操作的两表的标识,查询涉及关联操作的两表各自所在的分区数据库的统计信息;第二查询模块,用于根据统计信息和查询条件,向驱动表所在分区数据库发送查询驱动表请求,接收驱动表所在分区数据库返回的第一查询结果集,其中,涉及关联操作的两表中的一表为驱动表,另外一表为非驱动表,驱动表为涉及关联操作的两表中优先被查询的表;临时表数据处理模块,用于对第一查询结果集中的关联字段值进行去重, 向非驱动表所在分区数据库发送结果集投递请求和去重后的关联字段值,以便于非驱动表所在分区数据库生成临时表数据,临时表数据包括去重后的关联字段值;第三查询模块,用于向非驱动表所在分区数据库发送查询非驱动表请求,并接收非驱动表所在分区数据库返回的第二查询结果集,其中,第二查询结果集为非驱动表所在分区数据库根据非驱动表请求和临时表数据查询获得的。在第二方面的第一种可能的实现方式,第二查询模块具体用于:根据统计信息和查询条件,利用预先给定的计算模型,分别计算出单独查询涉及关联操作的两表所消耗的资源,其中,消耗的资源较小的表为驱动表,向驱动表所在分区数据库发送查询驱动表请求,接收驱动表所在分区数据库返回的第一查询结果集。在第二方面的第二种可能的实现方式,驱动表所在分区数据库具体包括2个以上的分区数据库,则第二查询模块,具体用于:向所有驱动表所在分区数据库发送查询驱动表请求,接收所有驱动表所在分区数据库返回的第一查询结果集或者根据查询条件;或者向符合查询条件的驱动表所在分区数据库发送查询驱动表请求,接收符合查询条件的驱动表所在分区数据库返回的第一查询结果集或者根据查询条件。在第二方面的第三种可能的实现方式,还包括:存储模块,用于按照哈希算法,存储第一查询结果。在第二方面的第四种可能的实现方式,还包括:关联模块,用于根据关联字段,将第一查询结果集和第二查询结果集进行关联,获得第三查询结果集。本发明实施例的方案在跨分区数据库中进行数据查询时,首先在驱动表中查询,得到第一查询结果集,然后对第一查询结果集中的关联字段值进行去重,向非驱动表所在分区数据库发送结果集投递请求和去重后的关联字段值,这样在非驱动表所在分区数据库中可以生成包含了去重后的关联字段值的临时表数据,接着向非驱动表所在分区数据库发送查询非驱动表请求,并接收非驱动表所在分区数据库返回的第二查询结果集,由于第二查询结果集为非驱动表所在分区数据库根据非驱动表请求和临时表数据查询关联获得的,因此,跨分区数据库查询关联的处理过程放置在非驱动表的分区数据库中完成的,并且发送给非驱动表所在分区数据库的是被去重后的关联字段值,因此查询过程中,并无 需获得大量无用的数据,提高了跨分区数据库查询数据的效率和成功率。附图说明为了更清楚地说明本发明的技术方案,下面将对实施方式中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本发明实施例提供的一种在跨分区数据库中查询数据网络环境的结构示意图;图2是本发明实施例提供的一种跨分区查询装置的结构示意图;图3是本发明实施例提供的另一种跨分区查询装置的结构示意图;图4是本发明实施例提供的一种跨分区查询装置的结构示意图;图5是本发明实施例提供的一种在跨分区数据库中查询数据方法的流程示意图;图6是本发明实施例提供的另一种在跨分区数据库中查询数据方法的流程示意图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。本发明实施例提供了一种在跨分区数据库中查询数据的方法及跨分区查询装置,用于提高跨分区数据库中查询数据的效率和成功率,以下分别进行详细说明。为了便于理解本发明实施例,下面先对本发明实施例的数据库系统进行描述。图1为本发明实施例的一个网络环境示意图。应用程序102指可提供各种特定功能的计算机程序,包括不限于计费应用,互联网浏览器,多媒体播放器等。应用程序可通过通信网络103访问数据库。多个应用程序访问跨分区查询装置106。跨分区查询装置106接收应用程序对于数据库的数据的操作命令,连接并访问数据库。进一步地,跨分区查询装置106与多个物理数据库108相连 接。物理数据库108存储数据库中的数据,是结构化的数据集合。跨分区查询装置106可驱动物理数据库108,接收物理数据库返回的数据。跨分区查询装置106位于应用程序102和各类异构物理数据库108之间,向应用程序102提供透明的数据访问接口,屏蔽了各个物理数据库108的差别,支持垂直分区和水平分区,并提供多种数据分区策略满足不同业务要求。请参阅图2,图2是本发明实施例提供的一种跨分区查询装置的结构示意图,用于执行本发明实施例提供的跨分区数据库的查询数据的方法,如图2所示,该跨分区查询装置包括:至少一个处理器21,例如CPU,至少一个网络接口24或者其他用户接口23,存储器25,至少一个通信总线22。通信总线22用于实现这些组件之间的连接通信。其中,用户接口23可选的可以包括USB接口以及其他标准接口、有线接口。网络接口24可选的可以包括Wi-Fi接口以及其他无线接口。存储器25可能包含高速RAM存储器,也可能还包括非不稳定的存储器(non-volatilememory),例如至少一个磁盘存储器。存储器25可选的可以包含至少一个位于远离前述处理器21的存储装置。在一些实施方式中,存储器25存储了如下的元素,可执行模块或者数据结构,或者他们的子集,或者他们的扩展集:操作系统251,包含各种系统程序,用于实现各种基础业务以及处理基于硬件的任务;应用模块252,包含设备控制服务程序、设备识别服务程序等各种应用程序,用于实现各种应用业务。具体地,处理器21用于调用存储器25中存储的程序,执行以下操作:接收查询请求,查询请求中包括查询条件,涉及关联操作的两表的标识和关联字段;根据涉及关联操作的两表的标识,查询涉及关联操作的两表各自所在的分区数据库的统计信息;根据统计信息和查询条件,向驱动表所在分区数据库发送查询驱动表请求,接收驱动表所在分区数据库返回的第一查询结果集,其中,涉及关联操作的两表中的一表为驱动表,另外一表为非驱动表,驱动表为涉及关联操作的两表中优先被查询的表;对第一查询结果集中的关联字段值进行去重,向非驱动表所在分区数据库 发送结果集投递请求和去重后的关联字段值,以便于非驱动表所在分区数据库生成临时表数据,临时表数据包括去重后的关联字段值;向非驱动表所在分区数据库发送查询非驱动表请求,并接收非驱动表所在分区数据库返回的第二查询结果集,其中,第二查询结果集为非驱动表所在分区数据库根据非驱动表请求和临时表数据查询获得的。请参阅图3,图3是本发明实施例提供的另一种跨分区查询装置的的结构示意图,用于执行本发明实施例提供的的跨分区数据库的查询数据的方法,如图3所示,该跨分区查询装置包括:接收模块31,用于接收查询请求,查询请求中包括查询条件,涉及关联操作的两表的标识和关联字段;第一查询模块32,用于根据涉及关联操作的两表的标识,查询涉及关联操作的两表各自所在的分区数据库的统计信息;第二查询模块33,用于根据统计信息和查询条件,向驱动表所在分区数据库发送查询驱动表请求,接收驱动表所在分区数据库返回的第一查询结果集,其中,涉及关联操作的两表中的一表为驱动表,另外一表为非驱动表,驱动表为涉及关联操作的两表中优先被查询的表;临时表数据处理模块34,用于对第一查询结果集中的关联字段值进行去重,向非驱动表所在分区数据库发送结果集投递请求和去重后的关联字段值,以便于非驱动表所在分区数据库生成临时表数据,临时表数据包括去重后的关联字段值;第三查询模块35,用于向非驱动表所在分区数据库发送查询非驱动表请求,并接收非驱动表所在分区数据库返回的第二查询结果集,其中,第二查询结果集为非驱动表所在分区数据库根据非驱动表请求和临时表数据查询获得的。具体的,第二查询模块33具体用于:根据统计信息和查询条件,利用预先给定的计算模型,分别计算出单独查询涉及关联操作的两表所消耗的资源,其中,消耗的资源较小的表为驱动表,向驱动表所在分区数据库发送查询驱动表请求,接收驱动表所在分区数据库返回的第一查询结果集。具体的,驱动表所在分区数据库具体包括2个以上的分区数据库,则第二查询模块33,具体用于:向所有驱动表所在分区数据库发送查询驱动表请求,接收所有驱动表所在分区数据库返回的第一查询结果集或者根据查询条件;或 者向符合查询条件的驱动表所在分区数据库发送查询驱动表请求,接收符合查询条件的驱动表所在分区数据库返回的第一查询结果集或者根据查询条件。进一步地,如图4所示,跨分区查询装置,还包括:存储模块36,用于按照哈希算法,存储第一查询结果。进一步地,如图4所示,跨分区查询装置,还包括:关联模块37,用于根据关联字段,将第一查询结果集和第二查询结果集进行关联,获得第三查询结果集。为了更清楚的说明本发明实施例,下面将详细介绍跨分区查询装置执行上述实施例的操作过程。图5为本发明实施例跨分区数据库查询数据的方法实施例的流程图,具体包括:步骤501:跨分区查询装置接收查询请求,查询请求中包括查询条件,涉及关联操作的两表的标识和关联字段;步骤502:根据涉及关联操作的两表的标识,查询涉及关联操作的两表各自所在的分区数据库的统计信息;步骤503:根据统计信息和查询条件,向驱动表所在分区数据库发送查询驱动表请求,接收驱动表所在分区数据库返回的第一查询结果集,其中,涉及关联操作的两表中的一表为驱动表,另外一表为非驱动表,驱动表为涉及关联操作的两表中优先被查询的表;步骤504:对第一查询结果集中的关联字段值进行去重,向非驱动表所在分区数据库发送结果集投递请求和去重后的关联字段值,以便于非驱动表所在分区数据库生成临时表数据,临时表数据包括去重后的关联字段值;步骤505:向非驱动表所在分区数据库发送查询非驱动表请求,并接收非驱动表所在分区数据库返回的第二查询结果集,其中,第二查询结果集为非驱动表所在分区数据库根据非驱动表请求和临时表数据查询获得的。本发明实施例的方案在跨分区数据库中进行数据查询时,首先在驱动表中查询,得到第一查询结果集,然后对第一查询结果集中的关联字段值进行去重,向非驱动表所在分区数据库发送结果集投递请求和去重后的关联字段值,这样在非驱动表所在分区数据库中可以生成包含了去重后的关联字段值的临时表数据,接着向非驱动表所在分区数据库发送查询非驱动表请求,并接收非驱动表 所在分区数据库返回的第二查询结果集,由于第二查询结果集为非驱动表所在分区数据库根据非驱动表请求和临时表数据查询关联获得的,因此,跨分区数据库查询关联的处理过程放置在非驱动表的分区数据库中完成的,并且发送给非驱动表所在分区数据库的是被去重后的关联字段值,因此查询过程中,并无需获得大量无用的数据,提高了跨分区数据库查询数据的效率和成功率。请参考图6,为本发明实施例跨分区数据库查询数据的方法实施例的流程图,具体包括:步骤601:跨分区查询装置接收到应用程序发送查询请求,该查询请求具体是SQL语句,这里被称为原始SQL语句,并对接收到的查询请求进行语法和词法解析,从而获取到原始SQL语句所涉及的关联条件的语法树。其中,关联条件的语法树可以包括了涉及到关联操作的两表的标识、查询条件、两表的关联关系和关联字段等信息。这里的关联关系有自然连接,等值连接,笛卡尔连接等。查询条件可以具体是SQL语句的过滤表达式或条件表达式等。在本发明实施例中,涉及到关联操作的两表的标识具体为涉及关联操作的两表的表名或者ID。步骤602:根据上述涉及到关联操作的两表的标识,跨分区查询装置确定上述涉及到关联操作的两表是否为分区表,如果是分区表的话,确定上述关联操作的两表的各自的分区规则,根据上述涉及到关联操作的是否为分区表以及各自的分区规则,分析是否将简化后的SQL语句整体发送到数据库,由数据库进行关联操作。这里将简化后的SQL语句发送到数据库有以下几种场景:1,如果关联操作所涉及的两表均是非区分表,即这两表的全量数据都存储在每个物理数据库中,也就是说任一物理数据库中都存储这两个表的全量数据,则可将简化后的SQL语句作为整体发送到任一物理数据库进行关联处理。其中,简化后的SQL语句指的是为了查询处理后的SQL语句,通常这个简化后的SQL语句是简化的SQL语句,通常仅仅包含了查询语句,不包括排序,分组等等非查询指令。本发明可以通过多种方式查询关联的两表是否为非分区表,例如:从中间件保存的XML配置文件,获取关联的两表是否为非分区表,或者从缓存中存储的关联的两表的相关数据,从而确认是否为非分区表。2,如果关联操作所涉及的两表一个为分区表,如表1,另一个为非分区表, 如表2。并且表1的数据可能分布在所有分区数据库,则将简化后的SQL语句作为整体发送到表1的数据可能分布的所有分区数据库进行关联操作。3,如果关联操作所涉及的两表(如表3和表4)均为分区表,其中,关联字段包括两表所有分区字段且关联关系为等值连接,则可将简化后的SQL语句作为整体发送到表3和表4的数据可能存在的所有分区进行关联操作。4,除上述情况外,关联规则不能作为整体发送到各个物理数据库,此时执行步骤603。步骤603:跨分区查询装置根据涉及关联操作的两表的标识,查询涉及关联操作的两表各自所在的分区数据库的统计信息。并根据上述原始SQL的查询条件和涉及到关联操作的两表所在的各个分区数据库的统计信息,从上述涉及关联操作的两表中,确定其中一个表为驱动表,这里驱动表指的是涉及关联操作的两表中优先被查询的表,然后将查询的结果与其它表进行关联操作的表。其中,统计信息可以包括以下的一种或多种:分区数据库的表记录数、分区个数,字段信息、聚集度、直方图和网络传输代价。根据各个分区数据库的统计信息以及原始SQL的条件表达式,利用预先给定的计算模型,分别计算得出在分布式环境下,单独查询上述涉及关联操作的两表所消耗的资源,并选择资源消耗较小的表作为驱动表。步骤604:跨分区查询装置确定将第一查询结果集的发送到哪些非驱动表所在的分区数据库。根据关联关系以及非驱动表的分区规则,确定需要将第一查询结果集发送到哪些非驱动表所在分区数据库。如果非驱动表是按照哈希进行分区的,无法进行静态确定第一查询结果集发送的分区数据库,需要将第一查询结果集发送到非驱动表的所有分区数据库;如果非驱动表是按照数据范围顺序进行分区的,则可以根据条件表达式,静态地确定第一查询结果集发送的分区数据库。步骤605:跨分区查询装置将查询请求转换成查询驱动表请求,并将转换后的查询驱动表请求发送到上述驱动表所在分区数据库,这样就可以在驱动表所在分区数据库中执行查询操作,分区数据库在执行查询操作后向跨分区查询装置返回第一查询结果集。如果驱动表分布在多个分区数据库上,则需要将查询驱动表请求发送到驱动表所在的所有分区数据库,这样以便于中所有分区数据库并行执行查询操作。跨分区查询装置在内存中保存上述驱动表的所有分区数据库返回的第一查询结果集。另外,为了方便后续合并,跨分区查询装置还可以根据关联字段建立哈希表对查询结果集进行存储。如果查询结果集超过内存限制,则采用分批存储的执行方式。步骤606:跨分区查询装置对保存的第一查询结果集中的关联字段值进行去重,向非驱动表所在分区数据库发送结果集投递请求和去重后的关联字段值,以便于非驱动表所在分区数据库生成临时表数据。如果非驱动表存在多个分区数据库,则跨分区查询装置并发地向上述多个分区数据库发送结果集投递请求和去重后的关联字段值。其中,各个分区数据库可以预先创建临时表,比如,在数据库创建的时候就创建了临时表,则此时分区数据库接收到上述结果集投递请求和去重后的关联字段值时,在已创建的临时表中生成临时表数据。各个分区数据库也可以在接收到上述结果集投递请求和去重后的关联字段值时,创建临时表,并且在临时表中生成临时表数据。这里的临时表数据包括了去重后的关联字段值,由于临时表的数据是跟具体业务相关的,因此只有本身业务可以识别临时表的数据,其它的业务将不能识别上述临时表的数据。步骤607:跨分区查询装置向上述非驱动表所在分区数据库中发送查询非驱动表请求,在上述非驱动表所在分区数据库中执行非驱动表的查询过程,并且与临时表进行关联,并接收到上述非驱动表所在分区数据库返回的第二查询结果集。其中,第二查询结果集为非驱动表所在分区数据库根据非驱动表请求和临时表数据查询获得的。步骤608:跨分区查询装置接收返回第二查询结果集,根据关联字段,将第一查询结果集和第二查询结果集进行关联合并,获得第三查询结果集,并返回第三查询结果集到应用程序。下面用一个具体例子来说明上述跨分区数据库查询数据的方法,假设应用程序提交的原始查询SQL为:SELECTC.CUST_ID,C.NAME,O.ORDER_IDFROMCUSTOMERC,ORDEROWHEREC.BIRTHDAY=‘2014-08-25’ANDC.GENDER=‘F’ANDO.PRICE<300ANDC.CUST_ID=O.CUS1T_ID。跨分区查询装置接收到上述SQL语句后,对该SQL语句进行语法和词法解 析,从而获知该SQL语句涉及关联条件的语法树,具体来说,该SQL语句涉及到表CUSTOMER和表ORDER,跨分区查询装置获取到表CUSTOMER和表ORDER的基本信息,这些基本信息可以存储在跨分区查询装置本地,也可以存储在物理数据库中,然后由跨分区查询装置从物理数据库中获取到。其中,表CUSTOMER和表ORDER的基本信息如表1所示:CUSTOMERORDER分区字段CUST_IDORDER_ID分区规则哈希哈希分区个数84数据量125000*8=10000001000000*4表1跨分区查询装置对表CUSTOMER和表ORDER的基本信息进行分析,可以得到:表CUSTOMER和表ORDER分区都是分区表,但是表CUSTOMER和表ORDER分区的分区字段不同,因此无法将简化后的SQL语句整体发送到两表所在分区进行关联操作,存在跨分区关联操作。此时需要根据原始SQL语句的查询条件和涉及到关联操作的两表的分区所在的各个物理数据库的统计信息,从表CUSTOMER和表ORDER两者中,确定一个表为驱动表。跨分区查询装置根据表CUSTOMER和表ORDER的基本信息以及查询条件表达式“C.BIRTHDAY=’2014-08-25’ANDC.GENDER=‘F’”和“O.PRICE<300”,利用预先给定的计算模型,分别计算出单独查询表CUSTOMER和表ORDER所消耗的的资源,确定资源消耗较小的表为驱动表。由于表CUSTOMER的记录数小于表ORDER记录数,而由于“C.BIRTHDAY=’2014-08-25’”是查询一个确定的值,而“O.PRICE<300”是查询一个范围的值,因此“C.BIRTHDAY=’2014-08-25’”相比“O.PRICE<300”具有更好的选择性,且表ORDER分区是4个,比表CUSTOMER要少、第一查询结果集发送到表ORDER所导致的网络开销将较少,因此根据计算结果可以得到查询表CUSTOMER的所导致的资源消耗将小于查询表ORDER的所导致资源消耗,因此选择表CUSTOMER作为驱动表。跨分区查询装置确认表ORDER采用了哈希分区规则,无法静态选择将第一查询结果集发送到表ORDER的哪个分区数据库,因此需要将第一查询结果集发 送到表ORDER所有的分区数据库。此时跨分区查询装置将原始SQL语句转换成驱动表SQL语句,转换成得到如下形式:SELECTC.CUST_ID,C.NAMEFROMCUSTOMERCWHEREC.BIRTHDAY=‘2014-08-25’ANDC.GENDER=’F’,并将该转换后的SQL语句发送到表CUSTOMER所在8个分区数据库中,同时并发执行上述驱动表SQL查询操作。这样,由于查询的结果是分布在8个分区数据库中完成的,因此查询结果集比较小,并且查询结果集未超过存储内存限制,全部第一查询结果集返回后,根据关键字段,对第一查询结果集建立哈希表进行存储。此时跨分区查询装置按照原始SQL语句中的关联字段值,对保存的第一查询结果集的关联字段值进行去重,向非驱动表所在分区数据库发送结果集投递SQL语句和去重后的关联字段值,具体的,该结果集投递SQL具体为:INSERTINTOTEMP(F)VALUES(:PARAM)。各个非驱动表所在分区数据库并行执行结果集投递SQL,将去重后的关联字段值插入到表ORDER所在分区数据库的指定临时表,成为临时表的数据。跨分区查询装置将原始SQL转换成非驱动表查询SQL,并向非驱动表所在的分区数据库发送上述非驱动表查询SQL,具体的该非驱动表查询SQL为:SELECTO.CUST_ID,O.ORDER_IDFROMORDERO,TEMPTWHEREO.PRICE<300ANDO.CUST_ID=T.F这样就可以实现非驱动表所在分区数据库进行本地关联,并生成第二查询结果集,并将第二查询结果集发送到跨分区查询装置。然后跨分区查询装置采用哈希关联算法,将第一查询结果集和第二查询结果集进行最终的关联,得到最终的第三查询结果集,并向应用程序返回第三结果集。本方案实现通过计算表查询的综合成本选择驱动表,并通过批量投递结果集到非驱动表所在分区数据库的方式,实现网络开销的最小化。相比较已有技术方案中,将两表数据提取到数据中间件层完成关联的方式,极大减少网络开销。基于物理数据库临时表特性的实现,可以借助数据库能力有效隔离不同连接上的结果集投递操作,简化数据中间件层逻辑。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,的存储介质可为磁碟、光盘、只读存储记忆体(Read-OnlyMemory,ROM)或随机存取存储器(RandomAccessMemory,简称RAM)等。以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1