本申请公开了一种数据查询方法,在进行数据表的分布式存储时,应用服务器将具有关联关系的两个表,按照相同的子表数进行水平拆分,并按照相同的散列公式将两个表的相同索引号的子表散列到分布式数据库服务器上,在进行数据查询时,数据库服务器可以根据子表的关联关系进行简单的数据查询处理。采用本发明专利技术,可以避免进行合并查询时跨机查询的网络传输开销,减少复杂查询的处理时延,适用于OLTP应用场景。
【技术实现步骤摘要】
一种数据查询方法
本专利技术涉及分布式数据库系统的数据处理技术,特别是涉及一种分布式数据库系统中的数据查询方法。
技术介绍
目前,随着数据规模及其访问量对关系数据库提出了很大挑战:数十亿条的记录、数TB的数据、数千TPS、数万QPS让传统的关系数据库不堪重负,单纯的硬件升级已经无法使得问题得到解决。而目前的分布式数据库技术无法有效的支持复杂的关联查询。针对该问题,通常是采用对先对数据表进行水平拆分,然后再把拆分后的各子表分散到多个服务器上的方式,来实现大规模数据的存储。具体为:选取数据表中的某个或若干字段作为拆分键,将记录散列到不同的数据库服务器中。当客户端需要访问某个记录时,根据拆分键找到记录所在的服务器位置;上述方法可以实现记录规模较大的数据表的分布存储,但是,在进行表关联查询时容易出现跨机查询,即需要关联的子表分布在不同的服务器上,该情况下,一方面各数据库服务器无法进行合并查询处理,而需要应用服务器从各数据库服务器中读取子表后,才能进行相应的合并查询处理,这样就会导致应用服务器的数据处理负荷就会较大,当跨机查询的数据越多时,系统的性能就会越差;另一方面,由于需要将数据库服务器中的数据统一发送给应用服务器处理,相应地,也会造成冗余的网络数据传输。因此,在分布式数据库系统下,传统的数据查询方法存在网络传输开销大、处理时延长等问题,无法满足对时延要求高的在线事物处理(OLTP)应用场景下的关联查询。目前尚未提出一种适用于在OLTP情况下进行关联查询的方法。
技术实现思路
有鉴于此,本专利技术的主要目的在于提供一种数据查询方法,该方法可以有效减少网络传输开销,降低处理时延,适用于OLTP应用场景。为了达到上述目的,本专利技术提出的技术方案为:一种数据查询方法,包括:当应用服务器对数据库系统中的数据进行存储时,对于存在关联关系的两个表,根据所述关联关系的关联字段,对每个所述表进行水平拆分,得到该表的N个子表;对于所述两个表,所述应用服务器根据子表的索引号,利用相同的散列公式,确定用于存储各自子表的数据库服务器;将各所述子表存储在所确定的数据库服务器中;对于所述两个表的每对具有相同索引号的子表,所述应用服务器根据所述关联关系,确定该对子表的关联关系;当客户端触发根据所述两个表的关联关系进行数据查询时,对于满足查询条件的子表,将该子表对应的关联关系发送给子表所在数据库服务器,同时触发所述数据库服务器根据该关联关系,按照所述查询条件进行查询,并返回结果给所述应用服务器;所述应用服务器根据所述查询条件,对所述返回结果进行相应的查询处理并反馈结果给所述客户端。综上所述,本专利技术提出的数据查询方法,在进行数据表的分布式存储时,应用服务器将具有关联关系的两个表,按照相同的子表数进行水平拆分,并按照相同的散列公式将两个表的相同索引号的子表散列到分布式数据库服务器上,如此,可确保具有关联关系的子表存储在相同的服务器上,避免进行合并查询时跨机查询的网络传输开销,减少复杂查询的处理时延,适用于OLTP应用场景。附图说明图1为本专利技术实施例一的流程示意图。具体实施方式为使本专利技术的目的、技术方案和优点更加清楚,下面将结合附图及具体实施例对本专利技术作进一步地详细描述。本专利技术的核心思想是:对于具有关联关系的两个表,按照相同的子表数进行水平拆分,并按照相同的散列公式将两个表的相同索引号的子表散列到分布式数据库服务器上,使得具有关联关系的子表存储在相同的服务器上,使单个数据库服务器可以执行简单的查询合并处理,分担应用服务器的部分数据查询处理开销,并可避免进行合并查询时跨机查询的网络传输开销,减少复杂查询的处理时延,适用于OLTP应用场景。图1为本专利技术实施例一的流程示意图,如图1所示,该实施例主要包括:步骤101、当应用服务器对数据库系统中的数据进行存储时,对于存在关联关系的两个表,根据所述关联关系的关联字段,对每个所述表进行水平拆分,得到该表的N个子表。本步骤中,与现有方案中的水平拆分所不同的是,需要根据所述关联关系的关联字段,来对每个所述表进行水平拆分,并且需要确保存在关联关系的两个表的拆分子表数量相同,即均为N个。这样,由于是以关联字段为拆分键,并且子表数量相同,因此,可以确保具有关联关系的两子表的子表索引号相同,以便后续过程中基于该特性实现具有关联关系的两子表存储在同一服务器上的目的。步骤102、对于所述两个表,所述应用服务器根据子表的索引号,利用相同的散列公式,确定用于存储各自子表的数据库服务器;将各所述子表存储在所确定的数据库服务器中;对于所述两个表的每对具有相同索引号的子表,所述应用服务器根据所述关联关系,确定该对子表的关联关系。本步骤中,确定子表与存储子表的服务器之间对应关系的具体方法同现有系统一样,与现有方案所不同的是,对于存在关联关系的两个表,需要采用相同的散列公式,。这样,由于散列公式相同,同一子表索引号的散列值也将相同,相同的散列值对应的路由路径也相同,因此,对应的数据库服务器也将相同。而如前所述步骤101中可以确保具有关联关系的两子表的子表索引号相同,因此,本步骤可以进一步确保具有关联关系的两个子表被保存在同一服务器上,从而可以确保相关联子表的查询操作在一台服务器上即可完成,进而可以避免数据服务器之间的数据交叉关联,避免多余的网络数据传输以及减少联合查询的处理时延。另外,本步骤还需要根据拆分前两表之间的关联关系确定相应子表之间的关联关系,以便数据库服务器可以基于此进行数据的关联查询操作,具体确定方法如下:对于每对具有相同索引号的子表,所述应用服务器根据所述关联关系,按照母表替换为子表的方式,得到该对子表的关联关系。所述母表即被拆分的表。在具体实现时,表之间的关联关系是通过SQL语句进行描述的,根据表的关联关系得到子表的关联关系,也就是通过对表的关联关系的SQL语句进行修改,得到相应子表的关联关系。由于在上述方法中,散列方式相同,相同索引号的子表在相同的服务器上,因此在进行修改时,只需要修改SQL语句中数据表的名称,即将其中的数据表替换为相应的子表的名称即可。步骤103、当客户端触发根据所述两个表的关联关系进行数据查询时,对于满足查询条件的子表,将该子表对应的关联关系发送给子表所在数据库服务器,触发所述数据库服务器根据该关联关系,按照所述查询条件进行查询,并返回结果给所述应用服务器。这里,由于相关联的子表在同一服务器上,因此,数据库服务器可以在本机上行简单的查询合并处理,从而避免了跨机查询的诸多开销。步骤104、所述应用服务器根据所述查询条件,对所述返回结果进行相应的查询处理并反馈结果给所述客户端。本步骤具体实现时需要考虑查询条件中包含需要二次合并处理的关键字,如果有,则需要在接收到所有返回结果后,对它们进行相应的二次合并处理,以完成最终的数据查询操作,如果没有,则数据库服务器的返回结果即为最终查询结果,直接反馈给客户端即可。具体地,可以采用下述方法实现:当所述查询条件中包含需要二次合并处理的关键字时,所述应用服务器根据所述查询条件,对所有所述数据库服务器的返回结果进行相应的合并处理,并将处理结果发送给所述客户端;当所述查询条件中不包含需要二次合并处理的关键字时,所述应用服务器将接收到的所述返回结果直接发送给所述客户端。在实本文档来自技高网...

【技术保护点】
一种数据查询方法,其特征在于,包括:当应用服务器对数据库系统中的数据进行存储时,对于存在关联关系的两个表,根据所述关联关系的关联字段,对每个所述表进行水平拆分,得到该表的N个子表;对于所述两个表,所述应用服务器根据子表的索引号,利用相同的散列公式,确定用于存储各自子表的数据库服务器;将各所述子表存储在所确定的数据库服务器中;对于所述两个表的每对具有相同索引号的子表,所述应用服务器根据所述关联关系,确定该对子表的关联关系;当客户端触发根据所述两个表的关联关系进行数据查询时,对于满足查询条件的子表,将该子表对应的关联关系发送给子表所在数据库服务器,触发所述数据库服务器根据该关联关系,按照所述查询条件进行查询,并返回结果给所述应用服务器;所述应用服务器根据所述查询条件,对所述返回结果进行相应的查询处理并反馈结果给所述客户端。
【技术特征摘要】
1.一种数据查询方法,其特征在于,包括:当应用服务器对数据库系统中的数据进行存储时,对于存在关联关系的两个表,根据所述关联关系的关联字段,对每个所述表进行水平拆分,得到该表的N个子表;对于所述两个表,所述应用服务器根据子表的索引号,利用相同的散列公式,确定用于存储各自子表的数据库服务器;将各所述子表存储在所确定的数据库服务器中;对于所述两个表的每对具有相同索引号的子表,所述应用服务器根据所述关联关系,确定该对子表的关联关系;当客户端触发根据所述两个表的关联关系进行数据查询时,对于满足查询条件的子表,将该子表对应的关联关系发送给子表所在数据库服务器,触发所述数据库服务器根据该关联关系,按照所述查询条件进行查询,并返回结果给所述应用服务器;所述应用服务器根据所述查询条件,对所述返回结果进行相应的查询处理并反馈结果给所述客户端。2....
【专利技术属性】
技术研发人员:王锋,唐超,马丽伟,秦波,赵晓平,
申请(专利权)人:北京京东尚科信息技术有限公司,北京京东世纪贸易有限公司,
类型:发明
国别省市:北京;11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。