查询数据层次的输出方法与流程

文档序号:17641643发布日期:2019-05-11 00:42阅读:301来源:国知局
查询数据层次的输出方法与流程

本发明涉及输出层次输出领域,特别涉及一种查询数据层次的输出方法。



背景技术:

数据输出是业务查询完成后输出的结果集,结果集数据结构一般有一对一层次、一对多层次和多对多层次。因为关系型数据库的分表储存特性,使得要输出层次需要多次查询,导致大量性能的消耗。在性能资源开销中:数据查询io(输入输出)成本≥网络吞吐>cpu运算成本,因为接口服务器一般与数据服务器是分离的,通过网络传输数据。执行多次查询则大大增加数据查询io成本和网络带宽成本。



技术实现要素:

本发明要解决的技术问题在于,针对现有技术的上述缺陷,提供一种能大幅度减少数据查询io耗损、大幅度减少网络吞吐耗损、高并发增能成本降低、提升高并发能力的查询数据层次的输出方法。

本发明解决其技术问题所采用的技术方案是:构造一种查询数据层次的输出方法,包括如下步骤:

a)采用一次查询用户表及关联表;

b)输出中间结果集;

c)对所述中间结果集使用列合并方法或行合并方法进行配置处理,得到目标结果集;

d)输出所述目标结果集。

在本发明所述的查询数据层次的输出方法中,所述列合并方法包括如下步骤:

c1)对所述中间结果集进行遍历列,合并列及合并名后形成合并对象,将所述合并对象与非合并列组成新数据行;

c2)对所述中间结果集进行遍历行,得到所述目标结果集。

在本发明所述的查询数据层次的输出方法中,所述行合并方法包括如下步骤:

c1')对所述中间结果集进行遍历条件列;

c2')将列值与uuid分割值组成重复特征;

c3')判断行数据对象池中是否存在所述重复特征,如是,执行步骤c5');否则,执行步骤c4');

c4')创建新行数据对象,添加条件列数据,返回步骤c3');

c5')合并列和合并名后,与行数据对象组成新行数据,执行步骤c6');

c6')对所述中间结果集进行遍历行,得到所述目标结果集。

在本发明所述的查询数据层次的输出方法中,当所述查询数据层次为一对一层次时,所述关联表包括钱包表和会员表,所述目标结果集包括用户姓名、年龄、钱包的现金和会员卡的等级。

在本发明所述的查询数据层次的输出方法中,当所述查询数据层次为一对多层次时,所述关联表包括照片表,所述目标结果集包括用户姓名、年龄和多张照片。

在本发明所述的查询数据层次的输出方法中,当所述查询数据层次为多对多层次时,所述关联表包括照片表,所述目标结果集包括用户姓名、年龄和多张照片。

实施本发明的查询数据层次的输出方法,具有以下有益效果:由于采用一次查询用户表及关联表;输出中间结果集;对所述中间结果集使用列合并方法或行合并方法进行配置处理,得到目标结果集;输出所述目标结果集;本发明与传统的数据输出相比,采用数据合并输出,具有以下优点:在复杂层次输出时,大幅度减少数据查询io耗损,保持一次查询;在复杂层次输出时,大幅度减少网络吞吐耗损。保持只有一次通信;高并发增能成本降低,改进方法会微量增加处理器运算,提升高并发能力,只需提高一点处理器性能即可,处理器增能成本比网络吞吐量增容成本低很多;因此本发明能大幅度减少数据查询io耗损、大幅度减少网络吞吐耗损、高并发增能成本降低、提升高并发能力。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为传统技术中一对一层次的流程框图;

图2为传统技术中一对多层次的流程框图;

图3为传统技术中多对多层次的流程框图;

图4为本发明查询数据层次的输出方法一个实施例中的流程图;

图5为所述实施例中列合并方法的具体流程图;

图6为所述实施例中列合并方法的处理流程框图;

图7为所述实施例中行合并方法的具体流程图;

图8为所述实施例中行合并方法的处理流程框图;

图9为所述实施例中一对一层次的流程框图;

图10为所述实施例中一对多层次的流程框图;

图11为所述实施例中多对多层次的流程框图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

图1为传统技术中一对一层次的流程框图,对于传统技术中的一对一层次的输出而言,例如,目标输出:{user:”hugh”,age:21,wallet:{cash:90.0},vip:{level:9}},输出用户姓名,年龄,钱包的现金,会员卡的等级。

数据查询过程如下:

差的数据查询方法(3次查询):查询用户表,查询钱包表,查询会员表;

结果输出:{user:”hugh”,age:21,wallet:{cash:90.0},vip:{level:9}},达到目标输出。

好的数据查询方法(1次查询):查询(用户表关联钱包表关联会员表);

结果集:{user:”hugh”,age:21,cash:90.0,level:9},没达到目标输出。

假设有n个一对一层次,差的数据查询方法:n次查询,达到目标输出。好的数据查询方法:1次查询,没达到目标输出。

图2为传统技术中一对多层次的流程框图,对于传统技术中一对多层次的输出而言,例如,目标输出:{user:”hugh”,age:21,photo:[{url:“a.jpg”},{url:“b.jpg”}]};输出用户姓名,年龄,多张照片。

数据查询过程如下:

传统据查询方法(2次查询):查询用户表,查询照片表。

结果集:{user:”hugh”,age:21,photo:[{url:“a.jpg”},{url:“b.jpg”}]},达到目标输出。

假设有n个一对多层次,传统方法需要1*n=n次查询,才能达到目标输出。

图3为传统技术中多对多层次的流程框图,对于传统技术中多对多层次的输出而言,例如,目标输出:[{user:”hugh”,age:21,photo:[“a.jpg”,“b.jpg”]},{user:”sam”,age:23,photo:[“c.jpg”,“d.jpg”]}];输出多个用户姓名,年龄,多张照片。

数据查询过程如下:

传统据查询方法(n次查询):查询用户表,遍历用户结果,多次查询照片表。

结果集:[{user:”hugh”,age:21,photo:[“a.jpg”,“b.jpg”]},{user:”sam”,age:23,photo:[“c.jpg”,“d.jpg”]}],达到目标输出。

假设有n个多对多层次,传统方法需要n*n*….*n次查询,才能达到目标输出。

为了解决传统技术中存在的问题,本发明提供一种查询数据层次的输出方法,该查询数据层次的输出方法的流程图如图4所示。图4中,该查询数据层次的输出方法包括如下步骤:

步骤s01采用一次查询用户表及关联表:本步骤中,采用一次查询用户表及关联表。

步骤s02输出中间结果集:本步骤中,输出中间结果集。

步骤s03对中间结果集使用列合并方法或行合并方法进行配置处理,得到目标结果集:本步骤中,对中间结果集使用列合并方法或行合并方法进行配置处理,得到目标结果集。

步骤s04输出目标结果集:本步骤中,输出目标结果集。

值得一提的是,当查询数据层次为一对一层次时,上述关联表包括钱包表和会员表,上述目标结果集包括用户姓名、年龄、钱包的现金和会员卡的等级。当查询数据层次为一对多层次时,上述关联表包括照片表,上述目标结果集包括用户姓名、年龄和多张照片。当查询数据层次为多对多层次时,上述关联表包括照片表,上述目标结果集包括用户姓名、年龄和多张照片。下面将详细进行介绍。

图9为实施例中一对一层次的流程框图;对于本实施例中的一对一层次的输出,具体而言,目标输出:{user:”hugh”,age:21,wallet::{cash:90.0},vip:{level:9}};输出用户姓名,年龄,钱包的现金,会员卡的等级。

数据查询过程如下:

本发明的数据查询方法(1次查询):查询(用户表关联钱包表关联会员表)。

结果集:{user:”hugh”,age:21,cash:90.0,level:9};

使用列合并方法的结果集:{user:”hugh”,age:21,wallet::{cash:90.0},vip:{level:9}}。

假设有n个一对一层次,仅采用1次查询,即可达到目标输出。

图10为本实施例中一对多层次的流程框图;对于本实施例中的一对多层次的输出,具体而言,目标输出:{user:”hugh”,age:21,photo:[{url:“a.jpg”},{url:“b.jpg”}]};输出用户姓名,年龄,多张照片。

数据查询过程如下:

本发明的数据查询方法(1次查询):查询(用户表关联照片表);

结果集:[{user:”hugh”,age:21,url:“a.jpg”},{user:”hugh”,age:21,url:“b.jpg”}]

使用行合并方法获得结果集:{user:”hugh”,age:21,photo:[{url:“a.jpg”},{url:“b.jpg”}]};

根据user、age合并url为子层数组,数组取名为photo。

假设有n个一对多层次:仅采用1次查询,即可达到目标输出。

图11为本实施例中多对多层次的流程框图,对于本实施例中的一对多层次的输出,具体而言,目标输出:[{user:”hugh”,age:21,photo:[“a.jpg”,“b.jpg”]},{user:”sam”,age:23,photo:[“c.jpg”,“d.jpg”]}];输出多个用户姓名,年龄,多张照片。

数据查询过程如下:

本发明的数据查询方法(1次查询):查询(用户表关联照片表);

结果集:[{user:”hugh”,age:21,url:“a.jpg”},{user:”hugh”,age:21,url:“b.jpg”},{user:”sam”,age:23,url:“c.jpg”},{user:”sam”,age:23,url:“d.jpg”}];

使用行合并方法获得结果集:[{user:”hugh”,age:21,photo:[{url:“a.jpg”},{url:“b.jpg”}]},{user:”sam”,age:23,photo:[{url:“c.jpg”},{url:“d.jpg”}]}]

根据user、age合并url为子层数组,数组取名为photo。

假设有n个多对多层次,仅采用1次查询,即可达到目标输出。

本发明与传统的数据输出相比,采用数据合并输出,具有以下优点:在复杂层次输出时,大幅度减少数据查询io耗损,保持一次查询;在复杂层次输出时,大幅度减少网络吞吐耗损。保持只有一次通信;高并发增能成本降低,改进方法会微量增加处理器运算,提升高并发能力,只需提高一点处理器性能即可,处理器增能成本比网络吞吐量增容成本低很多;因此本发明能大幅度减少数据查询io耗损、大幅度减少网络吞吐耗损、高并发增能成本降低、提升高并发能力。

对于本实施例而言,上述列合并方法可以进一步细化,其细化后的流程图如图如图5所示,该列合并方法的处理流程框图如图6所示。本实施例中,该列合并方法包括如下步骤:

步骤s31对中间结果集进行遍历列,合并列及合并名后形成合并对象,将合并对象与非合并列组成新数据行:本步骤中,对中间结果集进行遍历列,合并列及合并名后形成合并对象,将合并对象与非合并列组成新数据行。

步骤s32对中间结果集进行遍历行,得到目标结果集:本步骤中,对中间结果集进行遍历行,得到目标结果集。

举例如下,原始数据:[{user:”hugh”,age:21,cash:90.0,level:9,reward:100},{user:”sam”,age:23,cash:80.0,level:7,reward:70}];

合并条件:合并列cash,合并名:wallet;合并列level、reward,合并名:vip;

输出结果:[{user:”hugh”,age:21,wallet:{cash:90.0},vip:{level:9,reward:100}},{user:”sam”,age:23,wallet:{cash:80.0},vip:{level:7,reward:70}}]。

图7为本实施例中行合并方法的具体流程图;图8为本实施例中行合并方法的处理流程框图。该行合并方法包括如下步骤:

步骤s31'对中间结果集进行遍历条件列:本步骤中,对中间结果集进行遍历条件列。

步骤s32'将列值与uuid分割值组成重复特征:本步骤中,将列值与uuid分割值组成重复特征。

步骤s33'判断行数据对象池中是否存在重复特征:本步骤中,判断行数据对象池中是否存在重复特征,如果判断的结果为是,则执行步骤s35';否则,执行步骤s34'。

步骤s34'创建新行数据对象,添加条件列数据:本步骤中,创建新行数据对象,添加条件列数据。执行完本步骤,返回步骤s33'。

步骤s35'合并列和合并名后,与行数据对象组成新行数据:本步骤中,合并列和合并名后,与行数据对象组成新行数据。执行完本步骤,执行步骤s36'。

步骤s36'对中间结果集进行遍历行,得到目标结果集:本步骤中,对中间结果集进行遍历行,得到目标结果集。

举例如下,原始数据:[{user:”hugh”,age:21,url:“a.jpg”},{user:”hugh”,age:21,url:“b.jpg”},{user:”sam”,age:23,url:“c.jpg”},{user:”sam”,age:23,url:“d.jpg”}];

合并条件:条件列user、age,合并列url,合并名:photo;

输出结果:[{user:”hugh”,age:21,photo:[{url:“a.jpg”},{url:“b.jpg”}]},{user:”sam”,age:23,photo:[{url:“c.jpg”},{url:“d.jpg”}]}]。

总之,本发明与传统的数据输出相比,采用数据合并输出,具有以下优点:在复杂层次输出时,大幅度减少数据查询io耗损,保持一次查询;在复杂层次输出时,大幅度减少网络吞吐耗损。保持只有一次通信;高并发增能成本降低,改进方法会微量增加处理器运算,提升高并发能力,只需提高一点处理器性能即可,处理器增能成本比网络吞吐量增容成本低很多;因此本发明能大幅度减少数据查询io耗损、大幅度减少网络吞吐耗损、高并发增能成本降低、提升高并发能力。当然,在实际应用中,也可以由第三方框架通过数据的前缀实现一对一层次的一次查询输出,但面对多层次结构还是需要多次查询,高并发性能低下。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1