用于海量日志查询的流式数据处理方法和系统与流程

文档序号:11155328阅读:342来源:国知局
用于海量日志查询的流式数据处理方法和系统与制造工艺

本发明涉及网络安全海量日志处理技术领域,尤其涉及一种用于海量日志查询的流式数据处理方法和系统。



背景技术:

传统的日志查询方法采用同步方式,客户端接收用户的查询请求,将请求发送到服务端的服务层,服务层接收到请求后转换成对日志数据库的数据查询请求,等待遍历整个结果集的数据并组装成数据结构集合后,随后响应给客户端。

但是随着日志数据库中数据的大规模增加,这种处理方式在处理海量日志查询时存在如下问题:首先,服务器端上的内存不足,无法存放整个大结果集数据;其次,查询机得到结果集的句柄,遍历获得整个结果集的时间跨度较长,导致客户端无响应。

因此,导致了海量日志查询服务器端和客户端的内存瓶颈问题,以及查询数据在客户端上响应及时性差的问题。



技术实现要素:

本发明的目的在于提供一种用于海量日志查询的流式数据处理方法和系统以将数据在查询机器上查询后通过流式传输及时传递到客户端,减少服务器端上内存占用,实现将服务器端上已经遍历出来的数据即时传递到客户端。

一方面,本发明实施例提供一种用于海量日志查询的流式数据处理方法,包括以下步骤:

客户端建立客户端查询线程,向服务端发送日志查询请求;

所述服务端根据所述查询请求,建立流式对象缓冲区,其中,所述流式对象缓冲区包括读取流句柄和写入流句柄;

所述服务端建立服务端查询线程以执行数据查询任务;

所述服务端将所述流式对象缓冲区的所述读取流句柄返回给所述客户端;

所述客户端获得所述服务端的所述流式对象缓冲区的所述读取流句柄的引用,利用所述读取流句柄读取所述流式对象缓冲区中的数据,当读到流结束标志时关闭所述读取流句柄;以及

所述服务端释放所述流式对象缓冲区的数据。

优选地,在客户端建立通信服务句柄,向服务端发送日志查询请求的所述步骤包括:

所述客户端建立所述客户端查询线程;

所述客户端查询线程建立流式传输客户端实例并返回操作句柄;

所述客户端查询线程将查询条件设置在所述操作句柄中;

所述客户端查询线程通过所述操作句柄,向所述服务端发起所述日志查询请求。

优选地,所述服务端建立服务端查询线程以执行数据查询任务的所述步骤包括:

根据所述日志查询条件,所述服务端查询线程向海量日志数据库发出数据查询请求;

所述海量日志数据库解析所述数据查询请求,生成查询结果集;

所述服务端查询线程获取所述查询结果集的句柄;

所述服务端查询线程循环遍历所述结果集句柄,读取结果记录并组成数据对象,写入所述流式对象缓冲区;

当所述服务端查询线程处理结果集的最后一条记录之后,关闭所述流式对象缓冲区的流写入标志,退出所述服务端查询线程。

优选地,所述客户端查询线程为所述客户端线程池中的空闲线程,所述服务端查询线程为所述服务端线程池中的空闲线程。

优选地,在所述服务端查询线程循环遍历所述结果集句柄,读取结果记录并组成数据对象,写入所述流式对象缓冲区的所述步骤中,如果所述流式对象缓冲区已满,则所述服务端查询线程将被阻塞;当所述流式对象缓冲区的数据被读取并出现空闲数据区后,所述服务端查询线程将被唤醒并继续运行。

优选地,如果所述读取流句柄的关闭时,还未退出所述服务端查询线程,将触发所述服务端查询进程的退出。

相应地,本发明还提供一种用于海量日志查询的流式数据处理系统,包括客户端、服务端和海量日志数据库,所述客户端包括查询请求模块和数据读取模块,所述服务端包括流式对象缓冲区建立模块、查询执行模块和数据释放模块,其中,

所述查询请求模块用于建立客户端查询线程,向服务端发送日志查询请求;

所述流式对象缓冲区建立模块用于根据所述查询请求,建立流式对象缓冲区,其中,所述流式对象缓冲区包括读取流句柄和写入流句柄;

所述查询执行模块用于建立服务端查询线程以执行数据查询任务;

所述数据读取模块用于引用所述服务端的所述流式对象缓冲区的所述读取流句柄,利用所述读取流句柄读取所述流式对象缓冲区中的数据,当读到流结束标志时关闭所述读取流句柄;

所述数据释放模块用于释放所述流式对象缓冲区的数据。

优选地,所述查询请求模块包括:

客户端查询进程建立单元,用于建立所述客户端查询线程;

操作句柄建立单元,用于建立流式传输客户端实例并返回操作句柄,将查询条件设置在所述操作句柄中;

查询请求发送单元,用于通过所述操作句柄向所述服务端发起所述日志查询请求。

优选地,所述查询执行模块包括服务端查询线程建立单元,用于根据所述日志查询条件,建立所述服务端查询线程,向所述海量日志数据库发出数据查询请求;

所述海量日志数据库包括解析单元,用于解析所述数据查询请求,生成查询结果集;

所述查询执行模块还包括:

数据写入单元,用于获取所述查询结果集的句柄,循环遍历所述结果集句柄,读取结果记录并组成数据对象,写入所述流式对象缓冲区;

判断单元,用于当所述服务端查询线程处理结果集的最后一条记录之后,关闭所述流式对象缓冲区的流写入标志,退出所述服务端查询线程。

优选地,如果所述流式对象缓冲区已满,则所述服务端查询线程将被阻塞;当所述流式对象缓冲区的数据被读取并出现空闲数据区后,所述服务端查询线程将被唤醒并继续运行。

实施本发明实施例,具有如下有益效果:本发明提供的用于海量日志查询的流式数据处理方法和系统采用流式对象传输技术,在服务端建立流式对象缓冲区,通过服务端查询线程执行数据查询任务,客户端通过读取流句柄读取流式对象缓冲区的数据,解决了海量日志查询的大结果集的服务器端内存瓶颈的问题,而且在遍历数据的同时数据以流的方式实时并发传递到客户端,提高了客户端的数据响应速度。

附图说明

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

图1是本发明一实施例提供的用于海量日志查询的流式数据处理方法的流程图;

图2是本发明一实施例提供的客户端建立客户端查询线程,向服务端发送日志查询请求的流程图;

图3是本发明一实施例提供的服务端建立服务端查询线程以执行数据查询任务的流程图;

图4是本发明一实施例提供的用于海量日志查询的流式数据处理系统的原理图。

具体实施方式

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

本发明实施例提供了一种用于海量日志查询的流式数据处理方法。参见图1,该用于海量日志查询的流式数据处理方法包括以下步骤:

步骤S1:客户端建立客户端查询线程,向服务端发送日志查询请求。

在本实施例中,客户端的业务层收到其他层的查询请求时,建立客户端查询线程,通过客户端查询线程获取查询条件,并向服务端发起日志查询请求。具体地,步骤S1包括以下子步骤:

步骤S11:所述客户端建立所述客户端查询线程;

步骤S12:所述客户端查询线程建立流式传输客户端实例并返回操作句柄;

步骤S13:所述客户端查询线程将查询条件设置在所述操作句柄中;

步骤S14:所述客户端查询线程通过所述操作句柄,向所述服务端发起所述日志查询请求。

进一步地,所述客户端查询线程为所述客户端线程池中的空闲线程,并在所述客户端查询线程退出时归还线程池。

步骤S2:所述服务端根据所述查询请求,建立流式对象缓冲区,其中,所述流式对象缓冲区包括读取流句柄和写入流句柄;

具体地,在本实施例中,服务端在收到来自客户端的查询请求后,会根据查询请求建立流式对象缓冲区以用于后续查询到数据的暂时存储,其中,流式对象缓冲区拥有读取流句柄和写入流句柄,缓冲区满将阻塞写入操作,缓冲区空将阻塞读取操作;当写入流句柄关闭时,读取流句柄在读取完缓冲区的数据之后将会读取到流结束标志。

步骤S3:所述服务端建立服务端查询线程以执行数据查询任务;

具体地,在本实施例中,服务端在收到客户端的查询请求后,建立服务端查询线程向海量日志数据库查询客户端所需的数据,查询的数据存储在流式对象缓冲区中。进一步地,步骤S3包括以下子步骤:

步骤S31:根据所述日志查询条件,所述服务端查询线程向海量日志数据库发出数据查询请求;

步骤S32:所述海量日志数据库解析所述数据查询请求,生成查询结果集;

步骤S33:所述服务端查询线程获取所述查询结果集的句柄;

步骤S34:所述服务端查询线程循环遍历所述结果集句柄,读取结果记录并组成数据对象,写入所述流式对象缓冲区;

具体地,如果所述流式对象缓冲区已满,则所述服务端查询线程将被阻塞;当所述流式对象缓冲区的数据被读取并出现空闲数据区后,所述服务端查询线程将被唤醒并继续运行。

步骤S35:当所述服务端查询线程处理结果集的最后一条记录之后,关闭所述流式对象缓冲区的流写入标志,退出所述服务端查询线程。

进一步地,所述服务端查询线程为所述服务端线程池中的空闲线程,并在所述服务端查询线程退出时归还线程池。

步骤S4:所述服务端将所述流式对象缓冲区的所述读取流句柄返回给所述客户端;

具体地,在本实施例中,服务端在将数据写入流式对象缓冲区后,将流式对象缓冲区的读取流句柄返回给客户端,以便客户端在读取存储在流式对象缓冲区的数据。

步骤S5:所述客户端获得所述服务端的所述流式对象缓冲区的所述读取流句柄的引用,利用所述读取流句柄读取所述流式对象缓冲区中的数据,当读到流结束标志时关闭所述读取流句柄;

具体地,在本实施例中,客户端通过读取流句柄来读取服务端查询到的数据,这样在服务端查询的过程中,客户端可以实时读取数据,避免了现有技术中,必须将全部数据读取完成后客户端才能读取数据的缺陷。当读到流结束标志时,表明缓冲区的数据已被读取完,客户端会关闭读取流句柄,同时发送关闭信息至服务端。

步骤S6:所述服务端释放所述流式对象缓冲区的数据。

具体地,在本实施例中,服务端收到读取流句柄的关闭信息后,会将流式对象缓冲区内暂存的数据释放掉。进一步地,如果所述读取流句柄的关闭时,还未退出所述服务端查询线程,将触发所述服务端查询进程的退出。

本实施例提供的用于海量日志查询的流式数据处理方法采用流式对象传输技术,在服务端建立流式对象缓冲区,通过服务端查询线程执行数据查询任务,客户端通过读取流句柄读取流式对象缓冲区的数据,解决了海量日志查询的大结果集的服务器端内存瓶颈的问题,而且在遍历数据的同时数据以流的方式实时并发传递到客户端,提高了客户端的数据响应速度。

以下以一个具体的例子详述本实施例提供的用于海量日志查询的流式数据处理方法:

步骤C101:客户端业务层接收到客户端UI层的海量日志查询请求,建立客户端查询线程T1;

步骤C102:客户端端查询线程T1启动后,客户端业务层返回“正在查询中”的状态给客户端UI层;

步骤T101:查询线程T1启动后建立流式传输客户端的一个实例并返回操作句柄H1;

步骤T102:查询线程T1将查询条件设置给流式传输的操作句柄H1中;

步骤T103:查询线程T1通过操作句柄H1,向服务端的服务层发起数据查询请求;

步骤S201:服务端服务层接收到客户端的数据查询请求,解析出数据查询条件;并建立流式对象数据缓冲区B。

步骤S202:服务端服务层建立查询线程T2;

步骤T301:查询线程T2启动后,根据查询条件向海量日志库发出数据请求,海量日志库解析请求并响应查询结果集。

步骤T302:查询线程T2获取查询结果集的句柄;

步骤T303:查询线程T2遍历查询结果集的句柄;

步骤T304:判断是否到达结果集的末尾,是则关闭缓冲区的写入标志,线程主动退出;否则继续执行步骤T305;

步骤T305:查询线程T2每遍历一行数据便组装成数据对象;

步骤T306:查询线程T2通过对象缓冲区B的写入句柄BHW,将对象写入到流式对象缓冲区中,接着继续执行步骤T303;

步骤S203:服务端将返回流式对象缓冲区的读取流句柄BHR给客户端;

步骤T105:查询线程T1业务层得到服务器端返回的对象缓冲区BHR的数据流句柄;

步骤T106:从BHR句柄中读取数据对象;

步骤T107:判断是否读取到流结束标志,是则关闭BHR句柄,否则执行步骤T108;

步骤T108:将对象写入到客户端本地KEY-VALUE数据库中,并更新UI层的数据查询表格控件的数据总量,其中,UI层根据实际内容展示窗口的数据游标,触发事件并从KEY-VALUE数据库中获取数据;

步骤T109:执行步骤T107。

图4是本发明一实施例提供的用于海量日志查询的流式数据处理系统的原理图。如图4所示,用于海量日志查询的流式数据处理系统包括括客户端110、服务端120和海量日志数据库130,所述客户端110包括查询请求模块112和数据读取模块114,所述服务端120包括流式对象缓冲区建立模块122、查询执行模块124和数据释放模块126,其中,

所述查询请求模块112用于建立客户端查询线程,向服务端发送日志查询请求;

所述流式对象缓冲区建立模块122用于根据所述查询请求,建立流式对象缓冲区128,其中,所述流式对象缓冲区包括读取流句柄和写入流句柄;

所述查询执行模块124用于建立服务端查询线程以执行数据查询任务;

所述数据读取模块114用于引用所述服务端的所述流式对象缓冲区的所述读取流句柄,利用所述读取流句柄读取所述流式对象缓冲区中的数据,当读到流结束标志时关闭所述读取流句柄;

所述数据释放模块126用于释放所述流式对象缓冲区的数据。

进一步地,所述查询请求模块112包括:

客户端查询进程建立单元,用于建立所述客户端查询线程;

操作句柄建立单元,用于建立流式传输客户端实例并返回操作句柄,将查询条件设置在所述操作句柄中;

查询请求发送单元,用于通过所述操作句柄向所述服务端发起所述日志查询请求。

进一步地,所述查询执行模块124包括服务端查询线程建立单元,用于根据所述日志查询条件,建立所述服务端查询线程,向所述海量日志数据库发出数据查询请求;

所述海量日志数据库包括解析单元,用于解析所述数据查询请求,生成查询结果集;

所述查询执行模块还包括:

数据写入单元,用于获取所述查询结果集的句柄,循环遍历所述结果集句柄,读取结果记录并组成数据对象,写入所述流式对象缓冲区;

判断单元,用于当所述服务端查询线程处理结果集的最后一条记录之后,关闭所述流式对象缓冲区的流写入标志,退出所述服务端查询线程。

进一步地,如果所述流式对象缓冲区已满,则所述服务端查询线程将被阻塞;当所述流式对象缓冲区的数据被读取并出现空闲数据区后,所述服务端查询线程将被唤醒并继续运行。

需要说明的是:上述实施例提供的用于海量日志查询的流式数据处理系统在实现用于海量日志查询的流式数据处理方法时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的用于海量日志查询的流式数据处理系统与用于海量日志查询的流式数据处理方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。

本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。

以上所揭露的仅为本发明一种较佳实施例而已,当然不能以此来限定本发明之权利范围,本领域普通技术人员可以理解实现上述实施例的全部或部分流程,并依本发明权利要求所作的等同变化,仍属于发明所涵盖的范围。

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