首页 > 专利 > 华为技术有限公司 > 表数据查询方法及装置专利详情

表数据查询方法及装置   0    0

有效专利 查看PDF
专利申请流程有哪些步骤?
专利申请流程图
申请
申请号:指国家知识产权局受理一件专利申请时给予该专利申请的一个标示号码。唯一性原则。
申请日:提出专利申请之日。
2016-08-31
申请公布
申请公布指发明专利申请经初步审查合格后,自申请日(或优先权日)起18个月期满时的公布或根据申请人的请求提前进行的公布。
申请公布号:专利申请过程中,在尚未取得专利授权之前,国家专利局《专利公报》公开专利时的编号。
申请公布日:申请公开的日期,即在专利公报上予以公开的日期。
2018-07-27
授权
授权指对发明专利申请经实质审查没有发现驳回理由,授予发明专利权;或对实用新型或外观设计专利申请经初步审查没有发现驳回理由,授予实用新型专利权或外观设计专利权。
2020-02-14
预估到期
发明专利权的期限为二十年,实用新型专利权期限为十年,外观设计专利权期限为十五年,均自申请日起计算。专利届满后法律终止保护。
2036-08-31
基本信息
有效性 有效专利 专利类型 发明专利
申请号 CN201610799750.9 申请日 2016-08-31
公开/公告号 CN107784044B 公开/公告日 2020-02-14
授权日 2020-02-14 预估到期日 2036-08-31
申请年 2016年 公开/公告年 2020年
缴费截止日
分类号 G06F16/2458 主分类号 G06F16/2458
是否联合申请 独立申请 文献类型号 B
独权数量 1 从权数量 11
权利要求数量 12 非专利引证数量 0
引用专利数量 4 被引证专利数量 0
非专利引证
引用专利 CN102831120A、CN103995879A、CN105512200A、US2003183699A1 被引证专利
专利权维持 5 专利申请国编码 CN
专利事件 转让 事务标签 公开、实质审查、授权、权利转移
申请人信息
申请人 第一申请人
专利权人 华为技术有限公司 当前专利权人 苏州鱼得水电气科技有限公司
发明人 秦传瑜 第一发明人 秦传瑜
地址 广东省深圳市龙岗区坂田华为总部办公楼 邮编 518129
申请人数量 1 发明人数量 1
申请人所在省 广东省 申请人所在市 广东省深圳市
代理人信息
代理机构
专利代理机构是经省专利管理局审核,国家知识产权局批准设立,可以接受委托人的委托,在委托权限范围内以委托人的名义办理专利申请或其他专利事务的服务机构。
北京三高永信知识产权代理有限责任公司 代理人
专利代理师是代理他人进行专利申请和办理其他专利事务,取得一定资格的人。
罗振安
摘要
本发明公开了一种表数据查询方法及装置,属于信息技术领域。该方法包括:对应用程序发送的表数据查询请求进行解析;接收应用程序发送的查询参数的参数值;根据多个数据表的查询分区键值,确定多个数据表的查询分区;当多个数据表的查询分区相同时,将表数据查询请求发送至目标数据库;将目标数据库返回的最终查询结果发送至应用程序。本发明根据多个数据表的查询分区键值确定出多个数据表的查询分区相同后,将所接收到的表数据查询请求发送至查询分区所对应的数据库,进而将该数据库所返回的最终查询结果发送至应用程序,该过程中无需对多个数据表进行二次处理,不仅提高了表数据的查询效率,而且减小了传输的数据量,提升了业务性能。
  • 摘要附图
    表数据查询方法及装置
  • 说明书附图:图1
    表数据查询方法及装置
  • 说明书附图:图2
    表数据查询方法及装置
  • 说明书附图:图3
    表数据查询方法及装置
  • 说明书附图:图4
    表数据查询方法及装置
  • 说明书附图:图5
    表数据查询方法及装置
  • 说明书附图:图6
    表数据查询方法及装置
法律状态
序号 法律状态公告日 法律状态 法律状态信息
1 2021-12-03 专利权的转移 登记生效日: 2021.11.22 专利权人由华为技术有限公司变更为苏州鱼得水电气科技有限公司 地址由518129 广东省深圳市龙岗区坂田华为总部办公楼变更为215010 江苏省苏州市高新区长江路556号5幢704室
2 2020-02-14 授权
3 2018-07-27 实质审查的生效 IPC(主分类): G06F 17/30 专利申请号: 201610799750.9 申请日: 2016.08.31
4 2018-03-09 公开
权利要求
权利要求书是申请文件最核心的部分,是申请人向国家申请保护他的发明创造及划定保护范围的文件。
1.一种表数据查询方法,其特征在于,所述方法包括:
接收应用程序发送的表数据查询请求;
对所述表数据查询请求进行解析,得到查询信息,所述查询信息包括多个数据表标识和查询参数,所述查询参数至少包括多个数据表的查询分区键;
接收所述应用程序发送的查询参数的参数值,所述参数值至少包括所述多个数据表的查询分区键值;
根据所述多个数据表的查询分区键值,确定所述多个数据表的查询分区;
判断所述多个数据表的查询分区是否相同;
如果所述多个数据表的查询分区相同,将所述表数据查询请求发送至目标数据库,由所述目标数据库返回最终查询结果,所述目标数据库为相同的所述查询分区所对应的数据库;
如果接收到所述最终查询结果,将所述最终查询结果发送至所述应用程序。

2.根据权利要求1所述的方法,其特征在于,所述判断所述多个数据表的查询分区是否相同,包括:
判断所述多个数据表的查询分区键之间是否全部具有关联关系;
如果所述多个数据表的查询分区键之间全部具有关联关系,确定所述多个数据表的查询分区相同;
如果所述多个数据表的查询分区键之间未全部具有关联关系,且所述多个数据表的查询分区键值全部相等,确定所述多个数据表的查询分区相同;
如果所述多个数据表的查询分区键之间未全部具有关联关系,且所述多个数据表的查询分区键值未全部相等,确定所述多个数据表的查询分区不相同。

3.根据权利要求1所述的方法,其特征在于,所述接收所述应用程序发送的查询参数的参数值之前,所述方法还包括:
根据所述查询信息和所述表数据查询请求,生成多个子数据表查询请求,所述子数据表查询请求的数量与所述数据表标识的数量相同,且每个子数据表查询请求用于查询一个数据表。

4.根据权利要求3所述的方法,其特征在于,如果所述多个数据表的查询分区不相同,所述方法还包括:
将添加查询分区键值的所述多个子数据表查询请求发送至多个分区数据库,由所述分区数据库返回中间查询结果,所述分区数据库为查询分区键值所对应的数据库,所述中间查询结果包括所述分区数据库所存储的子表或从子表中查询到的表数据;
接收所述多个分区数据库发送的中间查询结果;
根据所述查询参数的参数值,对多个中间查询结果进行查询,得到所述最终查询结果;
将所述最终查询结果发送至所述应用程序。

5.一种表数据查询装置,其特征在于,所述装置包括:
接收模块,用于接收应用程序发送的表数据查询请求;
解析模块,用于对所述表数据查询请求进行解析,得到查询信息,所述查询信息包括多个数据表标识和查询参数,所述查询参数至少包括多个数据表的查询分区键;
所述接收模块,还用于接收所述应用程序发送的查询参数的参数值,所述参数值至少包括所述多个数据表的查询分区键值;
确定模块,用于根据所述多个数据表的查询分区键值,确定所述多个数据表的查询分区;
判断模块,用于判断所述多个数据表的查询分区是否相同;
发送模块,用于如果所述多个数据表的查询分区相同,将所述表数据查询请求发送至目标数据库,由所述目标数据库返回最终查询结果,所述目标数据库为相同的所述查询分区所对应的数据库;
所述发送模块,还用于如果接收到所述最终查询结果,将所述最终查询结果发送至所述应用程序。

6.根据权利要求5所述的装置,其特征在于,所述判断模块,用于判断所述多个数据表的查询分区键之间是否全部具有关联关系;如果所述多个数据表的查询分区键之间全部具有关联关系,确定所述多个数据表的查询分区相同;
如果所述多个数据表的查询分区键之间未全部具有关联关系,且所述多个数据表的查询分区键值全部相等时,确定所述多个数据表的查询分区相同;
如果所述多个数据表的查询分区键之间未全部具有关联关系,且所述多个数据表的查询分区键值未全部相等,确定所述多个数据表的查询分区不相同。

7.根据权利要求5所述的装置,其特征在于,所述装置还包括:
查询请求生成模块,用于根据所述查询信息和所述表数据查询请求,生成多个子数据表查询请求,所述子数据表查询请求的数量与所述数据表标识的数量相同,且每个子数据表查询请求用于查询一个数据表。

8.根据权利要求7所述的装置,其特征在于,所述发送模块,还用于如果所述多个数据表的查询分区不相同,将添加查询分区键值的所述多个子数据表查询请求发送至多个分区数据库,由所述分区数据库返回中间查询结果,所述分区数据库为查询分区键值所对应的数据库,所述中间查询结果包括所述分区数据库所存储的子表或从子表中查询到的表数据;
所述接收模块,还用于接收所述多个分区数据库发送的中间查询结果;
查询模块,用于根据所述查询参数的参数值,对多个中间查询结果进行查询,得到所述最终查询结果;
所述发送模块,还用于将所述最终查询结果发送至所述应用程序。

9.一种计算设备,其特征在于,包括:处理器、存储器、通信接口及总线,其中,所述存储器、所述处理器及所述通信接口通过所述总线连接;
所述存储器,用于存放计算机指令;
所述处理器通过所述总线调用所述存储器中存储的计算机指令,用于执行以下操作:
通过调用所述通信接口接收应用程序发送的表数据查询请求;
对所述表数据查询请求进行解析,得到查询信息,所述查询信息包括多个数据表标识和查询参数,所述查询参数至少包括多个数据表的查询分区键;
通过调用所述通信接口接收所述应用程序发送的查询参数的参数值,所述参数值至少包括所述多个数据表的查询分区键值;
根据所述多个数据表的查询分区键值,确定所述多个数据表的查询分区;
判断所述多个数据表的查询分区是否相同;
如果所述多个数据表的查询分区相同,通过调用所述通信接口将所述表数据查询请求发送至目标数据库,由所述目标数据库返回最终查询结果,所述目标数据库为相同的所述查询分区所对应的数据库;
如果接收到所述最终查询结果,通过调用所述通信接口将所述最终查询结果发送至所述应用程序。

10.根据权利要求9所述的计算设备,其特征在于,所述处理器通过所述总线调用所述存储器中存储的计算机指令,还用于执行以下操作:
如果所述多个数据表的查询分区键之间全部具有关联关系,确定所述多个数据表的查询分区相同;
如果所述多个数据表的查询分区键之间未全部具有关联关系,且所述多个数据表的查询分区键值全部相等,确定所述多个数据表的查询分区相同;
如果所述多个数据表的查询分区键之间未全部具有关联关系,且所述多个数据表的查询分区键值未全部相等,确定所述多个数据表的查询分区不相同。

11.根据权利要求9所述的计算设备,其特征在于,所述处理器通过所述总线调用所述存储器中存储的计算机指令,还用于执行以下操作:
根据所述查询信息和所述表数据查询请求,生成多个子数据表查询请求,所述子数据表查询请求的数量与所述数据表标识的数量相同,且每个子数据表查询请求用于查询一个数据表。

12.根据权利要求11所述的计算设备,其特征在于,所述处理器通过所述总线调用所述存储器中存储的计算机指令,还用于执行以下操作:
如果所述多个数据表的查询分区不相同,通过调用所述通信接口将添加查询分区键值的所述多个子数据表查询请求发送至多个分区数据库,由所述分区数据库返回中间查询结果,所述分区数据库为查询分区键值所对应的数据库,所述中间查询结果包括所述分区数据库所存储的子表或从子表中查询到的表数据;
通过调用所述通信接口接收所述多个分区数据库发送的中间查询结果;
根据所述查询参数的参数值,对多个中间查询结果进行查询,得到所述最终查询结果;
通过调用所述通信接口将所述最终查询结果发送至所述应用程序。
说明书

技术领域

[0001] 本发明涉及信息技术领域,特别涉及一种表数据查询方法及装置。

背景技术

[0002] 在分布式数据库系统中,为了提高表数据访问速率,可按照分区键值将应用程序的数据表拆分为多个子表,每个子表存储在不同的数据库中。其中,分区键值包括字段值、以及字段值经过哈希算法计算得到的哈希值等。
[0003] 基于分布式数据库系统中数据的存储形式,在应用程序的运行过程中,因业务需求需要查询满足一定条件的表数据时,应用程序可向DDS(Distributed Data Service,分布式数据服务)发送表数据查询请求,该表数据查询请求中携带多个数据表标识、查询参数,DDS根据每个数据表标识,从相应数据库中获取数据表标识对应的子表,在该过程中,应用程序还将向DDS发送查询参数的参数值,DDS根据查询参数的参数值,从多个数据表中筛选出满足一定条件的表数据,进而向应用程序发送筛选出的表数据。
[0004] 在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
[0005] 现有的查询方式需要DDS对多个数据表进行二次处理,降低了表数据的查询效率,且整个查询过程传输的数据量较大,导致业务性能较差。

发明内容

[0006] 为了解决现有技术的问题,本发明实施例提供了一种数据表查询方法及装置。所述技术方案如下:
[0007] 第一方面,提供了一种数据表查询方法,该方法应用于安装有DDS的查询节点中,该方法包括:
[0008] 应用程序在运行过程中,因业务需求需要从数据库中获取多个数据表的表数据时,应用程序可触发终端发送表数据查询请求,当接收到表数据查询请求,查询节点对接收到的表数据查询请求进行解析,得到包括数据表标识和查询参数的查询信息,该查询信息包括多个数据表的查询分区键和多个数据表的查询条件等。之后,应用程序还将触发终端发送查询参数的参数值,该参数值至少包括多个数据表的查询分区键值。查询节点根据多个数据表的查询分区键值,确定多个数据表的查询分区,进而判断多个数据表的查询分区是否相同,如果多个数据表的查询分区相同,则将接收到的表数据查询请求发送至相同的查询分区所对应的目标数据库,由目标数据库进行查询,并返回最终查询结果。如果接收到最终查询结果,查询节点将最终查询结果发送至终端,由终端发送至应用程序。在多个数据表的查询分区相同的情况下,通过将表数据查询请求发送到一个数据库,使得查询节点无需进行二次处理,即可获取到满足要求的表数据,提高了表数据的查询效率,提升了业务性能。
[0009] 结合第一方面,在第一方面的第一种可能的实现方式中,查询节点在判断多个数据表的查询分区是否相同时,可先判断多个数据表的查询分区键之间是否全部具有关联关系,如果多个数据表的查询分区键之间全部具有关联关系,则可确定多个数据表的查询分区相同,如果多个数据表的查询分区键之间未全部具有关联关系,但根据多个数据表的查询分区键值,确定出多个数据表的查询分区键值全部相等,则可确定多个数据表的查询分区相同;如果多个数据表的查询分区键之间未全部具有关联关系,且多个数据表的查询分区键值未全部相等,确定多个数据表的查询分区不相同。通过该种判断方法,在进行表数据查询过程中,查询节点可快速确定所涉及的多个数据表的查询分区是否相同,以在后续步骤通过将接收到的表数据查询请求整体下沉到一个数据库,不仅提高查询效率,而且减少查询节点上所存储的数据量,节省了存储空间。
[0010] 结合第一方面,在第一方面的第二种可能的实现方式中,查询节点在对表数据查询请求进行解析之后,接收到查询参数的参数值之前,还将根据查询信息和数据表查询请求,生成与数据表标识数量相同的子数据表查询请求,每个子数据表查询请求与一个数据表对应,可用于查询该数据表中的表数据。本实施例在确定多个数据表的查询分区不相同时,根据所生成的多个子数据表查询请求进行查询,确保无论在何种情况下,均可获取到满足要求的表数据。
[0011] 结合第一方面至第一方面的第二种可能的实现方式,在第一方面的第三种可能的实现方式中,查询节点在确定多个数据表的查询分区不相同时,可将查询分区键值添加到相应的子数据表查询请求中,并将添加了查询分区键值的多个数据表查询请求发送至多个分区数据库,由每个分区数据库进行查询,并返回中间查询结果,该分区数据库为查询分区键值所对应的数据库,该中间查询结果包括分区数据库所存储的子表或从子表中查询到的表数据。当接收到多个分区数据库发送的中间查询结果,查询节点根据查询参数的参数值,对多个中间查询结果进行查询,可得到最终查询结果,进而将最终查询结果发送至终端,由终端发送至应用程序,从而在多个数据表的查询分区不相同的情况下,也可查询到满足要求的表数据,提高了查询的可靠性。
[0012] 第二方面,提供了一种数据表查询装置,该装置用于执行上述第一方面所述的数据表查询方法。
[0013] 第三方面,提供了一种计算机设备,该计算设备用于执行上述第一方面所述的数据表查询方法。
[0014] 本发明实施例提供的技术方案带来的有益效果是:
[0015] 根据多个数据表的查询分区键值确定出多个数据表的查询分区相同后,将所接收到的表数据查询请求发送至查询分区所对应的数据库,进而将该数据库所返回的最终查询结果发送至应用程序,该过程中无需对多个数据表进行二次处理,不仅提高了表数据的查询效率,而且减小了传输的数据量,提升了业务性能。

实施方案

[0023] 为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
[0024] 参见图1,其示出了分布式数据库系统的架构图,该分布式数据库系统包括终端101、查询节点102及数据节点103。
[0025] 其中,终端101可以为智能手机、平板电脑、台式电脑等,本实施例不对终端101的产品类型作具体的限定。为了满足用户的使用需求,终端101中安装了各种应用程序,例如购物类应用程序、导航类应用程序、即时通讯类应用程序等等。对于终端101中所安装的任一应用程序,当该应用程序在运行过程中,需要获取满足要求的表数据时,该应用程序可触发终端101向查询节点102发送表数据查询请求,由查询节点102根据表数据查询请求进行查询,并接收查询节点102发送的查询结果。
[0026] 查询节点102上安装有DDS,该DDS用于提供分布式数据访问服务,可接收终端101发送的表数据查询请求,并从数据节点103的数据库中查询数据。在实际应用中,查询节点102可以为单独的一台计算设备,还可以为由多台计算设备组成的计算机集群。
[0027] 数据节点103维护一个数据库,该数据库可用于存储应用程序的数据表。在实际应用中,数据节点103可以为单独的一台计算设备,还可以为由多台计算设备组成的计算机集群。
[0028] 上述终端101与查询节点102之间可通过有线网络或无线网络进行通信,查询节点102与数据节点103之间可通过有线网络或无线网络进行通信。
[0029] 参见图2,其示出了本发明的一个实施例中使用的计算设备200的说明算机体系结构。所述计算设备200为常规的台式计算机或者膝上型笔记本,一个或多个计算设备200可构成物理平台。所述计算设备200包括处理器201、存储器202、通信接口203和总线204。该处理器201、存储器202、通信接口203通过总线204直连。该计算设备200可用于执行数据表查询方法。具体地,
[0030] 存储器202,用于存放计算机指令;
[0031] 处理器201通过总线204调用存储器202中存储的计算机指令,用于执行以下操作:
[0032] 对表数据查询请求进行解析,得到查询信息,该查询信息包括多个数据表标识和查询参数,该查询参数至少包括多个数据表的查询分区键;
[0033] 通过调用通信接口203接收应用程序发送的查询参数的参数值,该参数值至少包括多个数据表的查询分区键值;
[0034] 根据多个数据表的查询分区键值,确定多个数据表的查询分区;
[0035] 判断多个数据表的查询分区是否相同;
[0036] 如果多个数据表的查询分区相同,通过调用通信接口203将表数据查询请求发送至目标数据库,由目标数据库返回最终查询结果,目标数据库为相同的查询分区所对应的数据库;
[0037] 如果接收到最终查询结果,通过调用通信接口203将最终查询结果发送至应用程序。
[0038] 在本发明的另一个实施例中,处理器201通过总线204调用存储器202中存储的计算机指令,还用于执行以下操作:
[0039] 如果多个数据表的查询分区键之间全部具有关联关系,确定多个数据表的查询分区相同;
[0040] 如果多个数据表的查询分区键之间未全部具有关联关系,且多个数据表的查询分区键值全部相等,确定多个数据表的查询分区相同;
[0041] 如果多个数据表的查询分区键之间未全部具有关联关系,且多个数据表的查询分区键值未全部相等,确定多个数据表的查询分区不相同。
[0042] 在本发明的另一个实施例中,处理器201通过总线204调用存储器202中存储的计算机指令,还用于执行以下操作:
[0043] 根据查询信息和表数据查询请求,生成多个子数据表查询请求,该子数据表查询请求的数量与数据表标识的数量相同,且每个子数据表查询请求用于查询一个数据表。
[0044] 在本发明的另一个实施例中,处理器201通过总线204调用存储器202中存储的计算机指令,还用于执行以下操作:
[0045] 如果多个数据表的查询分区不相同,通过调用通信接口203将添加查询分区键值的多个子数据表查询请求发送至多个分区数据库,由分区数据库返回中间查询结果,该分区数据库为查询分区键值所对应的数据库,该中间查询结果包括分区数据库所存储的子表或从子表中查询到的表数据;
[0046] 通过调用通信接口203接收多个分区数据库发送的中间查询结果;
[0047] 根据查询参数的参数值,对多个中间查询结果进行查询,得到最终查询结果;
[0048] 通过调用通信接口203将最终查询结果发送至应用程序。
[0049] 不失一般性,该存储器202包括计算机存储介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括RAM、ROM、EPROM、EEPROM、闪存或其他固态存储其技术,CD-ROM、DVD或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。当然,本领域技术人员可知计算机存储介质不局限于上述几种。
[0050] 根据本发明的各种实施例,所述计算设备200还可以通过诸如因特网等网络连接到网络上的远程计算机运行。也即计算设备200可以通过连接在所述总线204上的网络接口单元205连接到网络,或者说,也可以使用网络接口单元205来连接到其他类型的网络或远程计算机系统(未示出)。
[0051] 本发明实施例提供的计算机设备,根据多个数据表的查询分区键值确定出多个数据表的查询分区相同后,将所接收到的表数据查询请求发送至查询分区所对应的数据库,进而将该数据库所返回的最终查询结果发送至应用程序,该过程中无需对多个数据表进行二次处理,不仅提高了表数据的查询效率,而且减小了传输的数据量,提升了业务性能。
[0052] 为了提高表数据的查询效率,减少表数据查询过程所传输的数据量,提升业务性能,基于图1所涉及的分布式数据系统的架构图,本发明实施例提供了一种表数据查询方法,参见图3,本发明实施例提供的方法流程包括:
[0053] 301、终端向查询节点发送表数据查询请求。
[0054] 在一种可能的实现方式中,本领域技术人员应当理解,因业务需求,在应用程序运行过程中,当需要从多个数据表中获取满足要求的表数据时,应用程序可触发终端生成表数据查询请求,并将表数据查询请求发送至查询节点。其中,表数据查询请求可以为SQL(Structured Query Language,结构化查询语言)请求。SQL为一种数据库查询和程序设计语言,用于从数据库中存储、获取数据,并对数据库进行查询、更新和管理。
[0055] 302、当接收到表数据查询请求时,查询节点对表数据查询请求进行解析,得到查询信息,该查询信息包括多个数据表标识和查询参数。
[0056] 由于分布式数据库系统中存储了大量的数据表,为了便于从分布式数据库系统中查询满足要求的表数据,表数据查询请求中一般会包括多个关键字段,根据这些关键字段,查询节点可对表数据查询请求进行解析,得到查询信息。其中,查询信息包括操作类型、所涉及的数据表数量、数据表标识及查询参数等。操作类型一般包括增、删、改、查询等操作。查询参数为对数据表进行查询的依据,至少包括多个数据表的查询分区键、多个数据表之间的关联条件等,该查询分区键为对数据表查询请求解析所得到的分区键。
[0057] 例如,查询节点接收到的表数据查询请求为SQL:SELECT*FROM T1  WHERE T1.ITEM_ID=T2.ITEM_ID AND T1.PARTITION_KEY=`?`AND T2.PARTITION_KEY=`?`,通过对该表数据查询请求进行解析,得到的查询信息为:操作类型为查询、所涉及的数据表数量为两个、两个数据表标识为T1和T2、查询参数为T1.ITEM_ID=T2.ITEM_ID AND T1.PARTITION_KEY=`?`AND T2.PARTITION_KEY=`?`,其中,T1.ITEM_ID=T2.ITEM_ID为数据表T1和数据表T2之间的关联条件,T1.PARTITION_KEY为数据表T1的分区键,T2.PARTITION_KEY为数据表T2的分区键。
[0058] 303、查询节点根据查询信息和表数据查询请求,生成多个子数据表查询请求。
[0059] 基于解析得到的查询信息,查询节点可根据多个数据表标识和数据表查询请求,生成多个子表数据查询请求。其中,所生成的子数据表查询请求的数量与数据表标识的数量相同,且每个子表数据查询请求对应一个数据表,可用于查询一个数据表的表数据。
[0060] 例如,查询节点接收到的表数据查询请求为SQL:SELECT*FROM T1  WHERE T1.ITEM_ID=T2.ITEM_ID AND T1.PARTITION_KEY=`?`AND T2.PARTITION_KEY=`?`,查询节点对该表数据查询请求进行解析,得到查询信息。根据接收到的数据表查询请求及数据表标识T1、T2,查询节点生成两个子数据表查询请求,分别为SELECT*FROM T1WHERE T1.PARTITION_KEY=`?`和SELECT*FROM T2WHERE T2.PARTITION_KEY=`?`。如果数据表T1按照分区键值拆分为三个子表,分别存储在数据库DB1、数据库DB2及数据库DB3中,则在进行数据表查询时,SELECT*FROM T1 WHERE T1.PARTITION_KEY=`?`可分别从数据库DB1、数据库DB2及数据库DB3中查询数据表T1的三个子表。
[0061] 304、终端向查询节点发送查询参数的参数值,该查询参数的参数值至少包括多个数据表的查询分区键值。
[0062] 在本实施例中,终端向查询节点发送的表数据查询请求仅携带查询参数,根据该查询请求,查询节点无法查询出满足要求的表数据。为了能够有针对性地查询到满足要求的表数据,在进行数据表查询过程中,应用程序还将触发终端向查询节点发送查询参数的参数值,该查询参数的参数值包括多个数据表的查询分区键值等。
[0063] 305、当接收到查询参数的参数值,查询节点根据多个数据表的查询分区键值,确定多个数据表的查询分区。
[0064] 在分布式数据库系统中,分区键值有多种形式,包括字段值、对字段值进行哈希计算得到的哈希值等,为了便于后续进行查询,在对数据表进行分区存储时,查询节点可存储分区键值与分区之间的对应关系。因此,当接收到查询参数的参数值时,查询节点可根据多个数据表的查询分区键值,从分区键值与分区之间的对应关系中,确定多个数据表的查询分区。
[0065] 306、查询节点判断多个数据表的查询分区是否相同,如果是,执行步骤307,如果否,执行步骤31O。
[0066] 查询节点在判断多个数据表的查询分区是否相同时,可采用如下步骤3061~3064:
[0067] 3061、查询节点判断多个数据表的查询分区键之间是否全部具有关联关系。
[0068] 在本实施例中,多个数据表的查询分区键之间具有关联关系是指多个数据表的查询分区键是否采用等号等关联符号连接,如果多个数据表的查询分区键之间全部采用等号等关联符号连接,则可确定多个数据表的查询分区键之间具有关联关系。
[0069] 3062、如果多个数据表的查询分区键之间全部具有关联关系,查询节点确定多个数据表的查询分区相同。
[0070] 当根据查询参数中查询分区键值,确定出多个数据表的查询分区键之间全部采用关联符号相连,如多个数据表的查询分区键之间全部采用等号连接,查询节点可确定多个数据表的查询分区相同。
[0071] 例如,查询节点对接收到的数据表查询请求进行解析,得到数据表T1的分区键和数据表T2的分区键,接收到应用程序发送的查询参数的参数值中查询分区键值为T1.PARTITION_KEY=T2.PARTITION_KEY。由于数据表T1和数据表T2的查询分区键之间全部具有关联关系,因此,可确定数据表T1和数据表T2的查询分区相同。
[0072] 3063、如果多个数据表的查询分区之间未全部具有关联关系,且多个数据表的查询分区键值相等,查询节点确定多个数据表的查询分区相同。
[0073] 在多个数据表的查询分区之间未全部具有关联关系,如多个数据表的查询分区全部不具有关联关系,或者多个数据表的部分查询分区具有关联关系、部分查询分区不具有关联关系,查询节点将判断多个数据表的查询分区键值是否相等,如果多个数据表的查询分区键值相等,且指向唯一的数据库,查询节点可确定多个数据表的查询分区相同。
[0074] 例如,查询节点对接收到的数据表查询请求进行解析,得到数据表1的查询分区键为T1.PARTITION_KEY=`?`,数据表2的查询分区键为T2.PARTITION_KEY=`?`,接收到应用程序发送的查询参数的参数值中数据表T1的分区键值为DB1,数据表T2的分区键值为DB1,虽然数据表T1的查询分区键和数据表T2的查询分区键之间不具有关联关系,但由于数据表T1和数据表T2的查询分区键值均为DBl,因此,可确定多个数据表的查询分区键值相同。
[0075] 3064、如果多个数据表的查询分区键之间未全部具有关联关系,且多个数据表的查询分区键值未全部相等,查询节点确定多个数据表的查询分区不相同。
[0076] 如果多个数据表的查询分区键之间未全部具有关联关系,即多个数据表的查询分区键之间全部不具有关联关系,或者多个数据表的部分查询分区键之间具有关联关系、部分查询分区键之间不具有关联关系,且多个数据表的分区键值未全部相等,即多个数据表的查询分区键值全部不相等,或者多个数据表的部分查询分区键值相等、部分查询分区键值不相等,则可确定多个数据表的查询分区不相同。总的来说,上述确定多个数据表的查询分区不相同包括以下几种情况:多个数据表的查询分区键之间全部不具有关联关系,且多个数据表的查询分区键值全部不相等,可确定多个数据表的查询分区不相同;多个数据表的查询分区键之间全部不具有关联关系,且多个数据表的部分查询分区键值相等、部分查询分区键值不相等,可确定多个数据表的查询分区不相同;多个数据表的部分查询键之间具有关联关系、部分查询分区键之间不具有关联关系,且多个数据表的查询分区键值全部不相等,可确定多个数据表的查询分区不相同;多个数据表的部分查询分区键之间具有关联关系、部分查询分区键之间不具有关联关系,且多个数据表的部分查询分区键值相等、部分查询分区键值不相等,可确定多个数据表的查询分区不相同。
[0077] 307、查询节点将表数据查询请求发送至目标数据库。
[0078] 其中,目标数据库为相同的查询分区所对应的数据库。当确定多个数据表的查询分区相同时,查询节点可通过有线网络或无线网络向目标数据库所在的目标数据节点发送表数据查询请求。
[0079] 308、目标数据节点根据表数据查询请求进行查询,得到最终查询结果。
[0080] 当接收到表数据查询请求,目标数据节点根据查询参数的参数值,从目标数据库中查询满足要求的表数据,得到最终查询结果,该最终查询结果即为应用程序所要获取的表数据。
[0081] 309、目标数据节点向查询节点发送最终查询结果。
[0082] 目标数据节点将查询到的最终查询结果通过有线网络或无线网络发送至查询节点。
[0083] 310、查询节点将添加查询分区键值的多个子数据表查询请求发送至多个分区数据库。
[0084] 当通过上述步骤306确定多个数据表的查询分区不相同,查询节点将查询分区键值添加到对应同一数据表标识的子数据表查询请求中,并根据查询分区键值,将每个数据表查询请求发送至该分区键值所对应的分区数据库所在的分区数据节点。
[0085] 311、分区数据节点根据子数据表查询请求进行查询,得到中间查询结果。
[0086] 每个分区数据库所在分区数据节点接收到子数据表查询请求后,根据该子数据表查询请求,对本地存储器中所存储的子表进行查询,得到中间查询结果。该中间查询结果包括分区数据库所存储的子表或从子表中查询到的表数据。该中间查询结果中所包括的具体内容,因子数据表查询请求而异,如果子数据表查询请求中携带对子表的查询参数,则分区数据节点所查询到的中间查询结果为从子表中查询到的表数据;如果子数据表查询请求中未携带对子表的查询参数,则分区数据节点所查询到的中间查询结果为分区数据库中所存储的子表。
[0087] 312、分区数据节点将中间查询结果发送至查询节点。
[0088] 当获取到中间查询结果后,分区数据节点可通过有线网络或无线网络将中间查询结果发送至查询节点。
[0089] 313、当接收到多个分区数据节点发送的中间查询结果,查询节点根据查询参数的参数值,对多个中间查询结果进行查询,得到最终查询结果。
[0090] 由于每个分区数据节点所返回的中间查询结果为针对某一数据表的查询结果,而终端所要获取的是多个数据表中满足一定关联条件的表数据,因此,当接收到多个分区数据节点发送的中间查询结果,查询节点根据查询查询参数的参数值(实际上主要根据参数值中的多个数据表之间的关联条件),对多个中间查询结果进行查询,得到最终查询结果。
[0091] 314、查询节点将最终查询结果发送至终端。
[0092] 无论获取的是目标数据节点发送的最终查询结果,还是对多个中间查询结果进行查询得到的最终查询结果,查询节点都会通过有线网络或者无线网络将最终查询结果发送至终端,由终端发送至应用程序,以使应用程序可根据该最终查询结果,为用户提供相应的服务。通过采用该种处理方式,查询节点无需对接收到的查询节点进行二次处理,不仅节省了查询节点上的存储空间,而且大大提升了查询效率。
[0093] 对于上述表数据查询方法,为了便于理解,下面将以几个具体的例子进行说明。
[0094] 例1,在分布式数据库系统中,数据表T1和数据表T2的数据均存储在数据库DB1和数据库DB2中,应用程序在运行过程中,因业务需求需要获取数据表T1和数据表T2中满足一定要求的表数据,应用程序可触发终端向查询节点发送SQL请求:SELECT*FROM T1WHERE T1.ITEM_ID?T2.ITEM_ID AND T1.PARTITION_KEY=`?`,查询节点对SQL请求进行解析,解析出所涉及的数据表数量为两个、两个数据表标识为T1和T2、查询参数为T1.ITEM_ID、T2.ITEM_ID、T1.PARTITION_KEY=`?`。查询节点根据数据表标识和数据表查询请求,生成两个子表数据查询请求,分别为SELECT*FROM T1WHERE T1.PARTITION_KEY=`?`与SELECT*FROM  T2。在进行表数据查询过程,查询节点接收到的参数值中查询分区键值为T1.PARTITION_KEY=`DB1`,根据查询分区键值,查询节点确定数据表T1和T2的查询分区。虽然数据表T1和数据表T2的查询分区键之间不具有关联关系,但查询节点无法判断数据表T1和数据表T2的查询分区是否相同,此时查询节点可判断数据表T1和数据表T2的查询分区键值是否相等。由于数据表T1的查询分区键值为`DB1`,数据表T2未有确定的查询分区键值,因此,可确定数据表T1和数据表T2的查询分区键值不相同。查询节点将SELECT*FROM T1WHERE T1.PARTITION_KEY=`DB1发送到数据库DB1所在的分区数据节点,由数据库DB1所在的分区数据节点返回所存储的数据表T1的子表。查询节点还将SELECT*FROM T2分别发送到数据库DB1和DB2所在的分区数据节点,由数据库DB1和数据库DB2所在的分区数据节点返回所存储的数据表T2的子表,查询节点接收数据库DB1和数据库DB2所在分区数据节点返回的子表,并根据T1.ITEM_ID=T2.ITEM_ID,对接收到的所有子表进行查询,得到最终查询结果,进而将最终查询结果发送至终端,由终端发送至应用程序。
[0095] 例2,在分布式数据库系统中,数据表T1和数据表T2的数据均存储在数据库DB1和数据库DB2中,应用程序在运行过程中,因业务需求需要获取数据表T1和数据表T2中满足一定条件的表数据,应用程序可触发终端向查询节点发送SQL请求:SELECT*FROM T1WHERE T1.ITEM_ID=T2.ITEM_ID AND  T1.PARTITION_KEY?T12.PARTITION_KEY AND T1.PARTITION_KEY=`DB1`,查询节点对SQL请求进行解析,解析出所涉及的数据表数量为两个、两个数据表标识为T1和T2、查询参数为T1.ITEM_ID=T2.ITEM_ID  AND T1.PARTITION_KEY?T12.PARTITION_KEY AND T1.PARTITION_KEY=`?`。查询节点根据数据表标识和数据表查询请求,生成两个子表数据查询请求,分别为SELECT*FROM T1WHERE T1.PARTITION_KEY=`DB1?`与SELECT*FROM T2。在进行表数据查询过程,查询节点接收到查询分区键值为1.PARTITION_KEY=T12.PARTITION_KEY,由于数据表T1和数据表T2的查询分区键T1.PARTITION_KEY=T12.PARTITION_KEY之间具有关联关系,因此,可确定数据表T1和数据表T2的查询分区相同,此时查询节点将查询请求SQL发送至数据库DB1所在的目标数据节点,由目标数据节点返回最终查询结果,当接收到最终查询结果,查询节点将最终查询结果发送至终端,由终端发送至应用程序。
[0096] 例3,在分布式数据库系统中,数据表T1和数据表T2的数据均存储在数据库DB1和数据库DB2中,应用程序在运行过程中,因业务需求需要获取数据表T1和数据表T2中满足一定条件的表数据,应用程序可触发终端向查询节点发送SQL请求:SELECT*FROM T1WHERE T1.ITEM_ID=T2.ITEM_ID AND T1.PARTITION_KEY=`?`AND T2.PARTITION_KEY=`?`。查询节点对SQL请求进行解析,解析出所涉及的数据表数量为两个、两个数据表标识为T1和T2、查询参数为T1.ITEM_ID=T2.ITEM_ID AND  T1.PARTITION_KEY=`?`AND T2.PARTITION_KEY=`?`。查询节点根据数据表标识和数据表查询请求,生成两个子表数据查询请求,分别为SELECT*FROM T1WHERE T1.PARTITION_KEY=`?`与SELECT*FROM T2WHERE T1.PARTITION_KEY=`?`。在进行表数据查询过程,查询节点接收到的查询分区键值为1.PARTITION_KEY=`DB1`、T12.PARTITION_KEY=`DB1`,由于数据表T1的查询分区键为T1.PARTITION_KEY,数据表T2的查询分区键为T2.PARTITION_KEY,数据表T1和数据表T2的查询分区键之间不具有关联关系,查询节点无法判断数据表T1和数据表T2的查询分区是否相同,此时查询节点需要继续判断数据表T1和数据表T2的查询分区键值是否相等,由于数据表T1的查询分区键值为`DB1`,数据表T2的查询分区键值为`DB1`,二者相等,因此,可确定数据表T1和数据表T2的查询分区相同,查询节点将查询请求SQL发送至数据库DB1所在目标数据节点,由DB1所在目标数据节点返回最终查询结果,当接收到最终查询结果,查询节点将最终查询结果发送至终端,由终端发送至应用程序。
[0097] 本发明实施例提供的方法,根据多个数据表的查询分区键值确定出多个数据表的查询分区相同后,将所接收到的表数据查询请求发送至查询分区所对应的数据库,进而将该数据库所返回的最终查询结果发送至应用程序,该过程中无需对多个数据表进行二次处理,不仅提高了表数据的查询效率,而且减小了传输的数据量,提升了业务性能。
[0098] 参见图4,本发明实施例提供了一种表数据查询装置,该装置包括:
[0099] 接收模块401,用于接收应用程序发送的表数据查询请求;
[0100] 解析模块402,用于对表数据查询请求进行解析,得到查询信息,查询信息包括多个数据表标识和查询参数,查询参数至少包括多个数据表的查询分区键;
[0101] 接收模块401,还用于接收应用程序发送的查询参数的参数值,参数值至少包括多个数据表的查询分区键值;
[0102] 确定模块403,用于根据多个数据表的查询分区键值,确定多个数据表的查询分区;
[0103] 判断模块404,用于判断多个数据表的查询分区是否相同;
[0104] 发送模块405,用于如果多个数据表的查询分区相同,将表数据查询请求发送至目标数据库,由目标数据库返回最终查询结果,目标数据库为相同的查询分区所对应的数据库;
[0105] 发送模块405,还用于如果接收到最终查询结果,将最终查询结果发送至应用程序。
[0106] 在本发明的另一个实施例中,判断模块404,还用于判断多个数据表的查询分区键之间是否全部具有关联关系;如果多个数据表的查询分区键之间全部具有关联关系,确定多个数据表的查询分区相同;如果多个数据表的查询分区键之间未全部具有关联关系,且多个数据表的查询分区键值全部相等,确定多个数据表的查询分区相同;如果多个数据表的查询分区键之间未全部具有关联关系,且多个数据表的查询分区键值未全部相等,确定多个数据表的查询分区不相同。
[0107] 参见图5,在本发明的另一个实施例中,该装置还包括:
[0108] 查询请求生成模块406,用于根据查询信息和表数据查询请求,生成多个子数据表查询请求,该子数据表查询请求的数量与数据表标识的数量相同,且每个子数据表查询请求用于查询一个数据表。
[0109] 参见图6,在本发明的另一个实施例中,发送模块405,还用于如果多个数据表的查询分区不相同,将添加查询分区键值的多个子数据表查询请求发送至多个分区数据库,由分区数据库返回中间查询结果,该分区数据库为查询分区键值所对应的数据库,该中间查询结果包括分区数据库所存储的子表或从子表中查询到的表数据;
[0110] 接收模块401,还用于接收多个分区数据库发送的中间查询结果;
[0111] 查询模块407,用于根据查询参数的参数值,对多个中间查询结果进行查询,得到最终查询结果;
[0112] 发送模块405,还用于将最终查询结果发送至应用程序。
[0113] 综上所述,本发明实施例提供的装置,根据多个数据表的查询分区键值确定出多个数据表的查询分区相同后,将所接收到的表数据查询请求发送至查询分区所对应的数据库,进而将该数据库所返回的最终查询结果发送至应用程序,该过程中无需对多个数据表进行二次处理,不仅提高了表数据的查询效率,而且减小了传输的数据量,提升了业务性能。
[0114] 需要说明的是:上述实施例提供的表数据查询装置在查询表数据时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将表数据查询装置与计算机设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的表数据查询装置、计算机设备与表数据查询方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
[0115] 本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
[0116] 以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

附图说明

[0016] 为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0017] 图1是本发明一个实施例提供的分布式数据库系统的架构图;
[0018] 图2是本发明实施例提供的一种计算机设备的说明性计算机体系结构;
[0019] 图3是本发明另一个实施例提供的一种数据表查询方法的流程图;
[0020] 图4是本发明另一个实施例提供的一种数据表查询装置的结构示意图;
[0021] 图5是本发明另一个实施例提供的一种数据表查询装置的结构示意图;
[0022] 图6是本发明另一个实施例提供的一种数据表查询装置的结构示意图。
版权所有:盲专网 ©2023 zlpt.xyz  蜀ICP备2023003576号