首页> 中国专利> 一种针对多数据库表的跨库分页查询方法

一种针对多数据库表的跨库分页查询方法

摘要

本发明提供一种针对多数据库表的跨库分页查询方法,属于数据查询技术领域。该方法用于对多个数据库中的多数据库表进行数据查询,首先判断在缓存中是否存储有对应查询指令的反映查询记录情况的统计信息;如果判断为“没有”,将该指令按查询任务拆分为多个子任务,并行地执行该多个子任务,从而返回多个子任务对应的查询记录的总的条数并生该统计信息,将其存储在缓存中;如果判断为“有”,根据所述统计信息获知预计的查询记录对应的子任务并且并行执行该对应的子任务。该方法查询效率高,安全性好,适用于多数据库表跨库分页查询。

著录项

  • 公开/公告号CN104572676A

    专利类型发明专利

  • 公开/公告日2015-04-29

    原文格式PDF

  • 申请/专利权人 中国银联股份有限公司;

    申请/专利号CN201310483564.0

  • 发明设计人 唐真;周继恩;汤茂安;李伟;

    申请日2013-10-16

  • 分类号G06F17/30;

  • 代理机构中国专利代理(香港)有限公司;

  • 代理人唐立

  • 地址 200135 中国上海市浦东新区含笑路36号银联大厦

  • 入库时间 2023-12-18 08:25:28

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-11-17

    授权

    授权

  • 2015-05-27

    实质审查的生效 IPC(主分类):G06F17/30 申请日:20131016

    实质审查的生效

  • 2015-04-29

    公开

    公开

说明书

技术领域

本发明属于数据查询技术领域,涉及针对多数据库表的跨库分页查询方法。

背景技术

随着大数据时代的来临,针对海量数据的查询越来越不容易,其查询的效率也备受关注。

以银行业金融行业为例,随着银行卡产业的高速发展,每日的跨行交易总量已经突破了三千万笔,传统一个数据库单张表的方式,已经远远不能满足数据库运维的需求,拆分数据库表和拆分数据库是必然的选择。因此,各种交易数据会以多个数据库、每个数据库对应多张数据库表的形式来存储。

目前针对多张位于不同数据库的数据库表的查询中,比较通用方法的有以下几种。

第一种,为多张数据库表创建视图,通过访问视图来达到对多张数据库表的访问。针对每张数据库表数据量不是特别大、表不是特别多情况,创建视图是一种简单可行的方案。但是在每张数据库表的数据量比较大且数据库表张数比较多的情况(例如:每张表数据量超过3千万,366张数据表)下,即使创建了索引,通过视图访问也会效率十分低下,甚至出现不可访问的情况。

第二中,通过创建nickname(昵称)的方式,将跨数据库查询转换成单库查询。采用nickname后,不能完全实现数据库之间相互独立,存在潜在的安全隐患。在银行、金融等对数据安全要求比较高的行业,已经禁止采用nickname。即使在安全性要求较低的数据查询领域采用nickname,也只能解决跨库访问的问题,仍然面临数据库表张数过多的问题。

有鉴于此,有必要提出一种新型的针对多数据库表的跨库查询方法。

发明内容

本发明的目的在于,提高多数据库表跨库查询的查询效率。

为实现以上目的或者其他目的,本发明提供以下技术方案。

按照本发明的一方面,提供一种数据分页查询方法,其中,每页查询记录的输出对应一次查询,对M个数据库中的N张数据库表进行数据查询的指令对应至少一页查询,其中M和N为整数,M≥2,N≥M,每个数据库至少对应一张数据库表;

所述数据分页查询方法包括以下步骤:

    接收到需要对M个数据库中的N张数据库表进行数据查询的所述指令;

    判断在缓存中是否存储有对应该指令的反映查询记录情况的统计信息,从而判断该指令在缓存的数据存储周期内是否是第一次接收;

    如果缓存中没有存储所述统计信息,执行以下步骤:

    S110,将该指令按查询任务拆分为F个子任务,每个子任务对应一个数据库的一张或多张数据库表的查询,其中F为整数,N≥F≥M;

    S120,并行地执行F个子任务;

S130,在执行完成后返回所有F个子任务对应的查询记录的总的条数G,并返回第一前Q条查询记录,其中,Q为分页查询时每页输出的查询记录的条数,G≥Q;

S140,生成所述统计信息并将该统计信息存储至所述缓存,所述统计信息包括每个子任务对应的查询记录的条数;

S150,将第一前Q条查询记录输出以输出第一页查询结果;

如果缓存中存储有所述统计信息,执行以下步骤:

S210,根据所述统计信息获知预计的查询记录对应的一个或多个子任务;

S220,并行执行所述F个子任务中的该一个或多个子任务;

S230,返回第二前Q条查询记录并将该Q条查询记录按一页查询结果输出。

按照本发明一实施例的数据分页查询方法,其中,所述第一或第二前Q条查询记录为对应于多个子任务所返回的查询记录时,合并该多个子任务所返回的查询记录。

按照本发明还一实施例的数据分页查询方法,其中,基于所述总的条数G以及每页输出的查询记录的条数Q,如果G大于Q,则返回所述接收步骤,并在所述判断步骤中判断为缓存中存储有所述统计信息,以重复执行所述步骤S210至S230,从而总共输出K页查询结果,其中K为将G除以Q的结果向上取整得到的整数。

在之前所述任一实施例中,优选地,所述指令为SQL指令,所述SQL指令按消息摘要算法5(MD5)处理以得出其MD5摘要信息。

在之前所述任一实施例中,具体地,所述统计信息被表述为以下格式:

<MD5(SQL),(<Split0,F1>,<Split1, F2>,…,<Split(F-1), FF>)>;

其中,MD5(SQL)为SQL指令的MD5摘要信息,Split0至Split(F-1)依次表示拆分形成的第一子任务至第F子任务,F1至FF依次表示第一子任务至第F子任务分别所对应的查询记录的条数。

在之前所述任一实施例中,优选地,在所述判断步骤,根据接收的SQL指令的MD5摘要信息与统计信息中的MD5摘要信息是否向对应来判断是否存储有对应该SQL指令的反映查询记录的统计信息。

在之前所述任一实施例中,优选地,所述缓存的数据存储周期不超过一天。

在之前所述任一实施例中,优选地,F=M,每个子任务对应一个数据库的一张或多张数据库表的查询。

按照本发明的又一方面,提供一种数据分页查询装置,其中,每页查询记录的输出对应一次查询,对M个数据库中的N张数据库表进行数据查询的指令对应至少一页查询,其中M和N为整数,M≥2,N≥M,每个数据库至少对应一张数据库表;

所述数据分页查询装置包括以下部件:

指令接收部件,用于接收到需要对M个数据库中的N张数据库表进行数据查询的所述指令;

    统计信息判断部件,用于判断在缓存中是否存储有对应该指令的反映查询记录情况的统计信息,从而判断该指令在缓存的数据存储周期内是否是第一次接收;

    第一部件,在缓存中没有存储所述统计信息的情况下用于执行以下步骤:

    S110,将该指令按查询任务拆分为F个子任务,每个子任务对应一个数据库的一张或多张数据库表的查询,其中F为整数,N≥F≥M;

    S120,并行地执行F个子任务;

S130,在执行完成后返回所有F个子任务对应的查询记录的总的条数G,并返回第一前Q条查询记录,其中,Q为分页查询时每页输出的查询记录的条数,G≥Q;

S140,生成所述统计信息并将该统计信息存储至所述缓存,所述统计信息包括每个子任务对应的查询记录的条数;

S150,将第一前Q条查询记录输出以输出第一页查询结果;

第二部件,在缓存中存储有所述统计信息的情况下用于执行以下步骤:

S210,根据所述统计信息获知预计的查询记录对应的一个或多个子任务;

S220,并行执行所述F个子任务中的该一个或多个子任务;

S230,返回第二前Q条查询记录并将该Q条查询记录按一页查询结果输出。

按照本发明一实施例的数据分页查询装置,其中,所述第一或第二前Q条查询记录为对应于多个子任务所返回的查询记录时,合并该多个子任务所返回的查询记录

本发明的技术效果是,通过将查询任务拆分并行查询,并将反映查询记录情况的统计信息在缓存中存储,因此,在跨库分页查询时,其后针对该查询指令的某页的查询可以实现定位查询,最大限度地减少对数据库的访问,大大提高分页查询的效率,适用于多数据库表的跨库分页查询。并且,数据库之间在查询过程中也相互独立,能保证跨库查询的安全性。该数据分页查询方法通用性强,适用于多种数据库场景查询。

附图说明

从结合附图的以下详细说明中,将会使本发明的上述和其他目的及优点更加完整清楚,其中,相同或相似的要素采用相同的标号表示。

图1是按照本发明一实施例的针对多数据库表的跨库分页查询方法的流程示意图。

图2是按照本发明一实施例的SQL指令拆分示意图。

图3是按照本发明又一实施例的SQL指令拆分示意图。

具体实施方式

下面介绍的是本发明的多个可能实施例中的一些,旨在提供对本发明的基本了解,并不旨在确认本发明的关键或决定性的要素或限定所要保护的范围。容易理解,根据本发明的技术方案,在不变更本发明的实质精神下,本领域的一般技术人员可以提出可相互替换的其他实现方式。因此,以下具体实施方式以及附图仅是对本发明的技术方案的示例性说明,而不应当视为本发明的全部或者视为对本发明技术方案的限定或限制。

图1所示为按照本发明一实施例的针对多数据库表的跨库分页查询方法的流程示意图。在该实施例中,以每个四个数据库(数据库A、B、C、D)为例进行示例性地说明,每个数据库中至少对应有一张数据库表。需要理解是,数据库个数、每个数据库的数据库表的张数不是限制性的,但是,在需要查询的数据库越多、查询的数据库表的张数越多的情况下,越能体现本发明的分页查询方法的效率优势。

并且,该实施例的数据分页查询方法可以以SQL(结构化查询语言)的程序模块来实现,该程序接口可以输入调用者(该程序模块的调用者)的SQL指令以及所需查询的页数、分页查询时每页输出的查询记录的条数Q等参数。在该实施例中,以Q=10示例进行说明。

在该实施例的程序模块中,包括Reducer(分拆/合并)模块以及多个Split(表示子任务)模块。

如图1所示,首先步骤S10,接收到需要执行4库查询的SQL指令,此时,每个数据库至少需要查询一张数据库表。需要理解的是,在进行多页查询时,每页对应的SQL指令是相同的,只是所需查询的页数不相同。

在该实施例中,SQL指令按消息摘要算法5(Message Digest Algorithm 5,MD5)处理以得出其MD5摘要信息。因此,在其后的S20步骤中,可以以该MD5摘要信息为关键特征在缓存中查询统计信息(统计信息将在其后说明)。

进一步,步骤S20,判断该SQL指令在缓存中是否有统计信息。统计信息反映每个该SQL指令的查询记录情况,在该实施例中,如其后中所定义,统计信息将反映每个Split的查询记录情况。在缓存中,数据的存储周期是相对较短的,例如在银行卡行业一般不超过一天,因此,统计信息在一天的数据存储周期中,可以基于该统计信息来判断接收的SQL指令是否与该统计信息相对应(统计信息与SQL指令之间的具体对应查询方法将在其后介绍),如果不对应,表示该SQL指令在缓存中不存在相应的统计信息,从而可以判断该SQL指令在缓存的数据存储周期内不是第一次接收。

如果判断为否,进入步骤S110至步骤S150,以完成第一页查询并形成相应的统计信息存储在缓存中。

步骤S110,将SQL指令按不同的数据库拆分成4个Split。SQL指令的拆分是按查询任务来实现的,不同的数据库至少对应一个Split,每个Split可以对应一个数据库中一张或多张数据库表的查询。

图2所示为按照本发明一实施例的SQL指令拆分示意图。在该实施例中,Reducer(简化模块)将SQL指令拆分成Split0、Split1、Split2和Split3四个子任务,分别对应数据库A、数据库B、数据库C、数据库D中的一张或多张数据库表的查询,这样,查询任务被差分,每个子任务的查询速度将更快。

图3所示为按照本发明又一实施例的SQL指令拆分示意图。在该实施例中,数据库D中对应需要查询的数据库表的张数可能较多,需要拆分成多个子任务,因此,Split3和Split4两个子任务对应数据库D中的多个数据库表的查询。在其他实施例中,其他数据库也可以对应多个子任务,子任务的个数在大于或等于跨库的数据库个数的情况下,其个数不是限制性的。

继续如图1所示,步骤S120,并行执行4个Split。这样,每个Split可在相应数据库的相应数据库表中查询,查询速度相对较快。

进一步,步骤S130,在每个Split执行完成后,返回查询记录的总的条数和前10条查询记录。在该实施例中,查询记录的总的条数G可能不够返回10条查询记录,如果不够,则表示一页查询即可结束该指令的查询任务,所有查询记录将返回至Reducer;如果G大于10,则表示需要多页(即多次)查询才可完成该指令的查询任务。具体的查询次数K等于将G除以10的结果向上取整得到的整数,例如,如果总的条数为22,K=22/10=3。

进一步,步骤S140,Reducer记录该SQL指令的统计信息,其包含每个Split返回的查询记录的条数。在该实施例中,统计信息被表述为如下格式:

<MD5(SQL),(<Split0,5>,<Split1,6>,<Split2,17>,<Split3, 8>)>;

在该统计信息中,还反映了每个子任务对应的查询记录的条数,例如,Split0对应的5条查询记录,Split1对应的6条查询记录,Split2对应的17条查询记录,Split3对应的8条查询记录;总的条数为36条,该总的条数信息也包括在统计信息中。

在该统计信息中,MD5(SQL)为该SQL指令的MD5摘要信息,以其来标识统计信息,因此,在每个SQL指令输入并生成其相应的MD5摘要信息时,在一实施例中,在步骤S20中可以基于MD5摘要信息来判断统计信息与SQL指令之间是否具体对应。

进一步,步骤S145,判断是否是查询第一页。

在该实施例中,有可能直接跳过第一页查询,例如,用户输入SQL指令是需要直接得到第二页查询记录(直接跳过第一页查询记录)。如果判断为“是”,则进入步骤S150;如果判断为“否”,则进入步骤S210来进一步得到第一页之后的其他页查询记录。

进一步,步骤S150,Reducer合并相应Split0和Split1返回的查询记录,输出第一页查询结果。在该实施例中,将Split0返回的全部查询记录(5条)以及Split1返回的查询记录的前5条合并,从而可以输出10条查询记录,也即第一页查询结果。

如果在步骤S20中判断为“是”,表示该次查询对应的SQL指令在缓存的数据存储周期内不是第一次接收,因此,之前对该SQL指令进行的步骤S110至步骤S140的结果可以继续至少部分地被利用。

步骤S210,根据统计信息判断SQL查询需要相应执行的Split。

在该实施例中,以第二页查询为例,基于步骤S140的统计信息,可以判断需要执行的Split为Split1和Split2,这是因为预计的第10-20条查询记录是对应分布在Split1和Split2对应的子任务的查询记录中,也即Split1的第6条查询记录以及Split2的前9条查询记录。类似地,第三页查询对应需要执行的Split为Split2和Split3,第四页查询对应需要执行的Split为Split3。

步骤S220,并行执行一个或多个相应的Split。以第二页查询为例,并行执行Sit1和Split2,从而可以分别得到6条查询记录和17条查询记录;在此过程中,仅需要访问数据库B和C即可。

步骤S231,每个Split执行完成后返回指定的查询记录。以第二页查询为例,返回Split1的第6条查询记录以及Split2的前9条查询记录。

步骤S232,Reducer合并相应Split返回的查询记录,按页输出查询结果。以第二页查询为例,Split1的第6条查询记录以及Split2的前9条查询记录被合并,以得到1页包括10条查询记录的查询结果,从而完成第二页查询。需要理解的是,如果是第四页查询,Split3的后6条查询记录可以作为一页输出,因此,不再需要进行合并即可按页输出(一页为6条)。因此,该步骤是为了输出一个或多个对应任务的前10条查询记录,从而实现按页查询。在不足10条的条的情况下,前10条即指所有返回的查询记录。

需要理解的是,通过重复执行以上步骤S210至步骤S232,可以实现逐页查询。

因此,通过缓存存储相应指令的统计信息,在进行分页查询时,可以通过任务分解和查询记录合并的方法,实现定位查询,最大限度地减少对数据库的访问,大大提高分页查询的效率,尤其适用于多数据库表的跨库分页查询。并且,数据库之间在查询过程中也相互独立,能保证跨库查询的安全性。因此,该实施例的跨库分页查询方法尤其适用于安全性要求较高的行业,例如,银行业的交易数据查询。

以上例子主要说明了本发明的跨库分页查询方法。尽管只对其中一些本发明的实施方式进行了描述,但是本领域普通技术人员应当了解,本发明可以在不偏离其主旨与范围内以许多其他的形式实施。因此,所展示的例子与实施方式被视为示意性的而非限制性的,在不脱离如所附各权利要求所定义的本发明精神及范围的情况下,本发明可能涵盖各种的修改与替换。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号