一种大数据高耗时查询结果集的快速分页方法与流程

文档序号:14677367发布日期:2018-06-12 21:41阅读:358来源:国知局

本发明涉及大数据查询方法,特别涉及一种大数据查询结果集的分页方法。



背景技术:

目前大多数公司使用传统数据库进行数据查询分页,一般都是通过SQL语句进行分页处理,比如限制每页显示100条,则查询第一页需要从数据库中查出第1-100条数据,查询第二页需要从数据库查询101-200条数据,即每翻一页都要实时的去目标数据库查询一次数据。对于大数据平台的查询,如果一次查询计算量大并且非常耗时,采用这种方式,每翻一页都实时的去数据源查询一次,效率必定很低,假如一次查询需要耗时10分钟,当用户翻到第二页的时候,进行第二次查询还需要等10分钟,用户一般难以忍受这种等待。



技术实现要素:

本发明要解决的技术问题,在于提供一种大数据高耗时查询结果集的快速分页方法,使用异步方式查询,然后先提前将全部查询结果集按照一定的规则落地到文件系统中,通知前端查询成功,前端就通过接口获取缓存的数据,并且可以实现实时翻页,而不需要再次从目标数据库中再次查询,节省用户时间。

本发明是这样实现的:一种大数据高耗时查询结果集的快速分页方法,包括:

步骤S1、前端提交查询数据请求到服务器,请求的信息包括请求ID以及请求信息;

步骤S2、服务器接收到前端请求的时候,返回一个请求接收成功的信息给前端,同时往缓存中写入请求ID的状态为执行中,然后创建一个异步线程,进行数据查询;

步骤S3、前端收到服务器返回的信息后,则使用之前的请求ID发起另外一个查询任务状态,只要任务一直是执行中的状态,则前端一直定时查询服务器刷新任务执行状态;

步骤S4、服务异步查询数据成功后,根据请求ID创建对应的文件夹,将结果集根据配置信息分块得到结果集块后保存在文件夹中,每个结果集块保存为一个数据块文件,可以是HDFS或者本地文件系统;

步骤S5、结果集保存后,系统再根据请求ID,将缓存中的任务状态更新为执行成功状态;

步骤S6、前端定时刷新发现任务状态是执行成功状态,则停止刷新,发起获取数据请求,请求参数包括请求ID,页数,每页数据记录条数;

步骤S7、后端服务器接收到前端获取数据的请求后,根据用户登录的SessionId和请求ID读取该数据块文件获取对应的结果集块信息,然后系统根据前端的参数换算每页要获取的数据记录条数来读取结果集块信息,得到需要查询的数据记录,返回给前端。

进一步的,所述步骤S4具体是:

步骤41、根据用户登录的SessionID创建文件夹,文件夹名为SessionID,如果已经存在了则不创建;

步骤42、根据请求ID创建子文件,文件夹名为请求ID;

步骤43、将结果集根据配置信息分块得到结果集块,每个结果集块分别保存为一个数据块文件,并且把数据块文件的数据记录分布信息存入指定文件夹下的index文件中。

进一步的,所述文件分布信息的保存格式如下:

TOTAL:M

N1:文件1

N2:文件2

.....

M:文件i

其中,M为文件总记录条数;N1、N2.....M为对应文件的最后一条记录,冒号为分隔符,文件1、文件2.....文件i为对应的文件名。

进一步的,所述步骤S7具体是:

步骤71、后端服务器接收到前端取数据的请求后,根据用户登录的SessionID和请求ID,获取指定文件夹下的index文件,读取该文件获取对应的数据分块信息;

步骤72、然后系统根据前端的参数换算,换算每页要获取的数据记录条数;

步骤73、系统判断每页起始记录跟结束记录落在哪个文件上,然后将对应的结果集块的数据读取出来,从中获取我们需要查询的记录,返回给前端。

进一步的,本发明还包括:

步骤S8、用户注销或者超时,Session过期的时候,触发事件从文件系统上删除该SessionID对应的文件夹。

本发明具有如下优点:

1、对于高耗时的查询,本发明使用异步方式查询,可以减少服务器连接的占用,可以减轻服务器的压力;

2、本发明提前将全部查询结果集按照一定的规则落地到文件系统中,用户查询的时候只需要等待一次,第一次查询完毕后,再次翻页不需要再等待,大大的节省用户的等待时间。

具体实施方式

本发明的大数据高耗时查询结果集的快速分页方法,包括如下步骤:

步骤S1、前端提交查询数据请求到服务器,请求的信息包括请求ID以及请求信息;请求ID必须是唯一的,一般使用UUID;

步骤S2、服务器接收到前端请求的时候,返回一个请求接收成功的信息给前端,同时往缓存中写入请求ID的状态为执行中,然后创建一个异步线程,进行数据查询;

步骤S3、前端收到服务器返回的信息后,则使用之前的请求ID发起另外一个查询任务状态,只要任务一直是执行中的状态,则前端一直定时查询服务器刷新任务执行状态;

步骤S4、服务异步查询数据成功后,根据请求ID创建对应的文件夹,将结果集根据配置信息分块得到结果集块后保存在文件夹中,每个结果集块保存为一个数据块文件;该步骤具体是:

步骤41、根据用户登录的SessionID创建文件夹,文件夹名为SessionID,如果已经存在了则不创建;

步骤42、根据请求ID创建子文件,文件夹名为请求ID;

步骤43、将结果集根据配置信息分块得到结果集块,每个结果集块分别保存为一个数据块文件,并且把数据块文件的数据记录分布信息存入指定文件夹下的index文件中。

其中,所述文件分布信息的保存格式如下:

TOTAL:M

N1:文件1

N2:文件2

.....

M:文件i

其中,M为文件总记录条数;N1、N2.....M为对应文件的最后一条记录,冒号为分隔符,文件1、文件2.....文件i为对应的文件名。即上述格式含义是:

第一行为文件总记录条数M;

第二行为该文件包含的记录为第0条到第N1条记录,分隔符(可以使用冒号或者其他符号,下同),对应的文件名;

第三行包含的记录包括第N1+1条到N2条,分隔符,对应的文件名。

假设最后总共有i行记录,其中第(Ni-1)-(Ni-2)必须等于N1,只能允许最后一行Ni(即M)减去倒数第二行Ni-1的值小于N1,即(Ni)-(Ni-1)<=N1,以保证每个文件的数据量均匀。

假设结果集为10W条记录,比如用户配置将结果集每块1W条记录,那么将结果集分成10块,存到10个文件,并且把文件分布信息存入index文件中,格式如下:

TOTAL:100000

10000:文件1

20000:文件2

.....

100000:文件10。

步骤S5、结果集保存后,系统再根据请求ID,将缓存中的任务状态更新为执行成功状态;

步骤S6、前端定时刷新发现任务状态是执行成功状态,则停止刷新,发起获取数据请求,请求参数包括请求ID,页数,每页数据记录条数;

步骤S7、后端服务器接收到前端获取数据的请求后,根据用户登录的SessionId和请求ID读取该数据块文件获取对应的结果集块信息,然后系统根据前端的参数换算每页要获取的数据记录条数来读取结果集块信息,得到需要查询的数据记录,返回给前端;所述步骤S7具体是:

步骤71、后端服务器接收到前端取数据的请求后,根据用户登录的SessionID和请求ID,获取指定文件夹下的index文件,读取该文件获取对应的数据分块信息;

步骤72、然后系统根据前端的参数换算,换算每页要获取的数据记录条数;比如第1页,每页记录100条,转换过来就是要获取1-100条记录,第2页则获取101-200条记录。

步骤73、系统判断每页起始记录跟结束记录落在哪个文件上,然后将对应的结果集块的数据读取出来,从中获取我们需要查询的记录,返回给前端。

步骤S8、用户注销或者超时,Session过期的时候,触发事件从文件系统上删除该SessionID对应的文件夹。

虽然以上描述了本发明的具体实施方式,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。

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