CN109947798A - 一种流事件的处理方法及装置 - Google Patents
一种流事件的处理方法及装置 Download PDFInfo
- Publication number
- CN109947798A CN109947798A CN201710842372.2A CN201710842372A CN109947798A CN 109947798 A CN109947798 A CN 109947798A CN 201710842372 A CN201710842372 A CN 201710842372A CN 109947798 A CN109947798 A CN 109947798A
- Authority
- CN
- China
- Prior art keywords
- flow queue
- event
- stream
- stream event
- queue
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种流事件的处理方法及装置,用于避免发生流事件的溢出和遗漏。该方法为:设计了流队列和数据库的双层缓存池,在捕获到流事件后,先确定所述流事件的事件类型对应的流队列,若所述流队列中没有空闲空间,则将所述流事件保存至所述流队列在数据库中对应的存储空间内,以及在确定满足预设条件时,将所述流事件读取至所述流队列中等待处理,同时,还需要根据流队列的使用情况对流队列的队列长度进行适应性调整;这样,可以在高并发的流事件到达时,快速接收流事件并进行保存,防止了因流队列溢出而造成的流事件的丢失和遗漏,保证了系统的处理性能和处理效率,同时,又可以灵活控制流事件存储空间大小,减少资源浪费。
Description
技术领域
本发明涉及计算机技术,特别涉及一种流事件的处理方法及装置。
背景技术
目前,实时流事件并发处理方法按照系统架构可以分为基于web架构的网络处理方法和基于操作系统的客户端处理方法。
基于web架构的网络处理方法技术比较成熟,通常是通过监听网络端口获取流事件相关信息并进行处理。然而,基于web架构的网络处理方法技术很难处理大数据的实时流事件,以睡眠监测数据为例,其原因如下:
大数据的实时显示,要求足够的数据存储空间,即使将睡眠监测数据按时间切片后存储,每个片段的大小也在10M左右。对于基于web架构的网络处理方法而言,其主要是通过浏览器方式进行显示,而浏览器的存储空间一般是在内存中,且实时显示数据的空间大小一般控制在5-10M。因此,若需要显示多个待显示片段,则需要通过浏览器在多个待显示片段之间频繁切换;由于每个待显示片段的数据量较大,因此,会造成系统负荷过大,数据加载不全等问题。
进一步的,针对高并发的实时流事件进行处理,要求高效获取流事件并进行分析。而基于web架构的网络处理方法,其事件通信方式取决于底层网络的质量,在高并发流事件的传输过程中,容易导致丢包、漏包、无序包等问题。基于上述缺点,目前处理睡眠监测数据这一类具有高实时性、高并发性的流事件时,更倾向于采用基于操作系统的客户端处理方法。
而基于操作系统的客户端处理方法,通常是通过监听操作系统获取流事件信息并进行处理。
参阅图1所示,客户端处理流事件大致流程如下下:
A、读取各类系统事件包含的若干流事件,并将获得的若干流事件保存在系统队列中。
具体的,系统运行过程中会产生各类系统事件,如,帧变更事件、睡觉监测事件等等。而一类系统事件的处理过程往往包含若干步骤,这些步骤可以视为流事件,如,睡眠监测过程中实时产生的各阶段的生理数据及相关处理操作便可视为流事件。
系统获取了各类事件对应的流事件后,先统一保存在系统级队列中。
B、分别确定各类事件所关联的应用程序,以及将各类事件包含的流事件保存至相应的应用程序的消息队列中。
如图1所示,不同类型的系统事件需要采用不同的应用程序处理,而系统预先会在缓存区中对应每一种应用程序设置相应的消息队列,并将捕获的各个类型的流事件存储相应的消息队列中。
C、通过各个应用程采用过轮询方式,从相应的消息队列中获得流事件进行业务处理。
D、采用回调函数方式,将获得的各个处理结果通过视窗进行显示。
然而,基于操作系统的客户端处理方法也存在以下缺陷:消息队列的大小固定,容易造成流事件的溢出和遗漏。
在接收系统事件时,先通过系统队列和消息队列存储在内存中。而单个队列的长度一般受到内存限制。
针对高并发的流事件进行存储时,很容易在流事件被密集捕获时,出现系统队列存储空间不够的情况,从而造成之后捕获的流事件的溢出以及被系统丢弃,最终导致系统事件无法得到响应。
相应的,在系统事件平缓时,又容易造成队列空余,占用内存空间,从而造成资源浪费。
有鉴于此,需要设计一种新的方法以克服上述缺陷。
发明内容
本发明实施例提供一种流事件的处理方法及装置,用于避免发生流事件的溢出和遗漏。
本发明实施例提供的具体技术方案如下:
第一方面、一种流事件的处理方法,包括:
确定捕获的流事件的事件类型,以及确定对应所述流事件的事件类型设置的流队列;
确定所述流队列中不存在能够保存所述流事件的空闲空间时,将所述流事件保存至所述流队列在数据库中对应的存储空间内,以及在确定满足预设条件时,将所述流事件保存至所述流队列中等待处理;
其中,在所述流队列使用过程中,对所述流队列的使用情况进行监听,根据监听结果对所述流队列的队列长度进行相应调整。
可选的,在确定满足预设条件时,将所述流事件保存至所述流队列中等待处理,包括:
获知所述流事件被指定为最高处理优先级时,确定满足预设条件,从所述流队列在数据库中对应的存储空间内读取所述流事件,并将所述流事件保存至所述流队列中等待处理;或者,
获知所述流队列中已存在能够保存所述流事件的空闲空间,且所述流队列在数据库中对应的存储空间内未保存有其他流事件时,确定满足预设条件,直接将所述流事件保存至所述流队列中等待处理。
可选的,进一步包括:
获知所述流队列中已存在能够保存所述流事件的空闲空间,而所述流队列在数据库中对应的存储空间内保存有其他流事件时,从所述流队列在数据库中对应的存储空间内读取所述其他流事件,并将所述其他流事件保存至所述流队列中等待处理。
可选的,将所述流事件保存至所述流队列中等待处理之后,进一步包括:
读取所述流事件,确定所述流事件的事件类型和分片序号;
基于所述事件类型确定所述流事件对应的路由通道;
基于所述分片序号在所述路由通道中确定相应的解析模块;
将所述流事件发往所述解析模块进行处理。
可选的,进一步包括:
针对各个解析模块进行监听,获得监听结果;
基于监听结果,每确定一个解析模块生成流事件的处理结果时,选取一个视窗,并在在所述一个视窗中呈现所述处理结果。
可选的,在所述流队列使用过程中,对所述流队列的使用情况进行监听,根据监听结果对所述流队列的队列长度进行相应调整,包括:
在所述流队列使用过程中,按照设定周期对所述流队列进行监听,获得监听结果;
每获得一次监听结果,判断所述流队列中是否存在空闲空间;
若否,则采用预设的第一步长对所述流队列的队列长度进行扩展;
若是,则在确定所述流队列在数据库中对应的存储空间内未存储有流事件时,采用预设的第二步长对所述流队列的队列长度进行缩减。
可选的,进一步包括:
将所述第一步长预设为:所述流队列当前的队列长度的N1倍,其中,N1为预设参数;
将所述第二步长预设为:所述流队列中当前流事件数目+所述流队列当前空闲空间/N2,其中,N2为预设参数。
第二方面、一种流事件的处理装置,包括:
捕获模块,用于确定捕获的流事件的事件类型,以及确定对应所述流事件的事件类型设置的流队列;
处理模块,用于确定所述流队列中不存在能够保存所述流事件的空闲空间时,将所述流事件保存至所述流队列在数据库中对应的存储空间内,以及在确定满足预设条件时,将所述流事件保存至所述流队列中等待处理;以及,
在所述流队列使用过程中,对所述流队列的使用情况进行监听,根据监听结果对所述流队列的队列长度进行相应调整。
可选的,在确定满足预设条件时,将所述流事件保存至所述流队列中等待处理时,所述处理模块用于:
获知所述流事件被指定为最高处理优先级时,确定满足预设条件,从所述流队列在数据库中对应的存储空间内读取所述流事件,并将所述流事件保存至所述流队列中等待处理;或者,
获知所述流队列中已存在能够保存所述流事件的空闲空间,且所述流队列在数据库中对应的存储空间内未保存有其他流事件时,确定满足预设条件,直接将所述流事件保存至所述流队列中等待处理。
可选的,所述处理模块进一步用于:
获知所述流队列中已存在能够保存所述流事件的空闲空间,而所述流队列在数据库中对应的存储空间内保存有其他流事件时,从所述流队列在数据库中对应的存储空间内读取所述其他流事件,并将所述其他流事件保存至所述流队列中等待处理。
可选的,进一步包括:若干解析模块,其中,所述解析模块用于对流事件进行解析;
所述处理模块进一步用于:
将所述流事件保存至所述流队列中等待处理之后,读取所述流事件,确定所述流事件的事件类型和分片序号,并基于所述事件类型确定所述流事件对应的路由通道,基于所述分片序号在所述路由通道中确定相应的解析模块,以及将所述流事件发往所述解析模块进行处理。
可选的,进一步包括:
监听模块,用于针对各个解析模块进行监听,获得监听结果,以及基于监听结果,每确定一个解析模块生成流事件的处理结果时,选取一个视窗,并在在所述一个视窗中呈现所述处理结果。
可选的,在所述流队列使用过程中,对所述流队列的使用情况进行监听,根据监听结果对所述流队列的队列长度进行相应调整时,所述处理模块用于:
在所述流队列使用过程中,按照设定周期对所述流队列进行监听,获得监听结果;
每获得一次监听结果,判断所述流队列中是否存在空闲空间;
若否,则采用预设的第一步长对所述流队列的队列长度进行扩展;
若是,则在确定所述流队列在数据库中对应的存储空间内未存储有流事件时,采用预设的第二步长对所述流队列的队列长度进行缩减。
可选的,所述处理模块进一步用于:
将所述第一步长预设为:所述流队列当前的队列长度的N1倍,其中,N1为预设参数;
将所述第二步长预设为:所述流队列中当前流事件数目+所述流队列当前空闲空间/N2,其中,N2为预设参数。
第三方面、一种流事件的处理装置,包括:
至少一个处理器,以及与所述至少一个处理器连接的存储器;
其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述至少一个处理器通过执行所述存储器存储的指令,执行上述第一方面中任一项所述的方法。
第四方面、一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行上述第一方面中任一项所述的方法。
综上所述,本发明实施例中,设计了内存队列(即流队列)和数据库的双层缓存池,在捕获到流事件后,先确定所述流事件的事件类型对应的流队列,若所述流队列中没有空闲空间,则将所述流事件保存至所述流队列在数据库中对应的存储空间内,以及在确定满足预设条件时,将所述流事件读取至所述流队列中等待处理,同时,还需要根据流队列的使用情况对流队列的队列长度进行适应性调整;这样,可以在高并发的流事件到达时,快速接收流事件并进行保存,防止了因流队列溢出而造成的流事件的丢失和遗漏,保证了系统的处理性能和处理效率,同时,又可以灵活控制流事件存储空间大小,减少资源浪费。
附图说明
图1为现有技术下流事件处理方式示意图;
图2为本发明实施例中流事件处理方式示意图;
图3为本发明实施例中流事件处理流程图;
图4为本发明实施例中流事件映射至流队列示意图;
图5为本发明实施例中调整流队列长度流程图;
图6为本发明实施例中采用不同解析模块对各个流事件进行针对性处理示意图;
图7为本发明实施例中流事件的处理装置功能结构示意图。
具体实施方式
参阅图2所示,为了避免发生流事件的溢出和遗漏,本发明实施例中,设计了流队列双层缓存池。所谓双层缓存池,即针对每一个系统事件分别在内存中的缓存池内设置相应的流队列,以及在数据库中的缓存池内也设置了相应的存储空间,当一个系统事件对应的流事件被捕获后,会根据其对应的流列队和数据库的存储空间的空闲状态,决定将流事件存放到在何处,从而实现了流事件的快速接收,避免丢失。同时,还需要对流队列的使用情况进行监听,并根据监听结果实时调整流队列的队列长度。
与现有技术下的双层缓存池相比,增加了流事件的分类存储功能,即在存储流事件时,会根据流事件的头文件中记录的事件类型进行分析归类,而内存中的缓存池也不是简单的一个区块,而是根据事件类型划分为多个独立的区间,每个区间中会针对相应类型的系统事件建立流队列,用于存储系统事件下的各个流事件。
这样,可以有效解决高并发的流事件的存储,避免流事件丢失,又可以灵活控制流事件存储空间大小,减少资源浪费。
下面结合附图对本发明优先的实施方式进行详细说明。
参阅图3所示,本发明实施例中,以任意一个流事件(以下称为流事件x)及其对应的任意一个流队列(以下称为流队列x)为例,介绍流事件x的具体处理流程如下:
步骤301:捕获流事件x,并确定流事件x的事件类型。
具体的,本发明实施例中,在流事件的归类方法中,不同的视窗既可以触发不同类型的流事件,又可以触发相同类型的流事件。通常情况下,一个系统事件可以分为多个有序的流事件,因此可以通过在流事件的头文件中定义流事件标识来唯一区分一个流事件。
可选的,一个流事件的事件标识,可以由以下参数中的至少两种组成:
触发流事件的视窗的标识信息,也可称为视窗ID;
流事件的事件类型;
流事件的分片序号。
例如,参阅图4所示,假设视窗A触发了帧变更事件1,而视窗B触发了帧变更事件2,帧变更事件1和帧变更事件2均只包含一个流事件;同时,视窗B又触发了睡眠事件,而睡眠事件中包含了三个有序的流事件。
那么,帧变更事件1对应的流事件的流事件标识为:(A,1),其中,A为视窗ID,1为事件类型;
帧变更事件2对应的流事件的流事件标识为:(B,1),其中,B为视窗ID,1为事件类型;
睡眠事件对应的流事件的流事件标识分别为:(B,2-1)、(B,2-2)和(B,2-3),其中,B为视窗ID,2为事件类型,1、2和3为流事件的分片序号。
通常情况下,系统会将流事件的流事件标识封装在流事件的头文件中,因此,在捕获流事件x后,可以从流事件x的头文件中获取其流事件标识,再根据流事件标识确定流事件x的事件类型。
步骤302:确定流事件x的事件类型对应的流队列x。
本发明实施例中,在内存中的缓存池内中,分别针对每一种事件类型划分出相应的区块,并建立相应的流队列,事件类型相同的流事件会被放入同一流队列中,并采用流询方式依次读取进行后续处理。
例如,参阅图4所示,视窗A和视窗B各自触发的帧变更事件的流事件被放入同一流队列中,视窗B触发的睡眠事件的流事件被放入另一流队列中。
当然,每个流队列的队列长度均设置有相应的初始值,后续流程中,可以根据流事件的处理频率,灵活地对各个流队列的队列长度进行调整,这一点将在后续实施例中进行详细介绍。
步骤303:判断流队列x中是否存在能够保存流事件x的空闲空间?若是,则执行步骤305;否则,执行步骤304。
步骤304:将流事件x保存至流队列x在数据库中对应的存储空间内,接着,返回步骤303。
流队列x中当前如果没有足够的空闲空间保存流事件x,则为了避免流事件x丢失,需要将其保存至数据库中对应流队列x设置的存储空间内。
步骤305:判断流队列x在数据库中对应的存储空间是否为空?若是,则执行步骤307;否则,执行步骤306。
步骤306:从流队列x在数据中对应的存储空间内,读取其他流事件至流队列x中等待处理,接着,返回步骤303。
如果流队列x中当前如果有足够的空闲空间保存流事件x,则需要继续判断数据库中是否已保存了与流事件x具有相同事件类型且早于流事件x接收的其他流事件,确定存在此类其他流事件时,需要先将此类流事件读取至流队列x进行优先处理。
接着,需要返回步骤306重新判断,直到确定流队列x在数据库中对应的存储空间内不再存储有其他流事件,以及确定流队列x中存在能够保存流事件x的空闲空间时,再将流事件x保存至流队列x中。
如果返回步骤306后,如果确定流队列x中不存在能够保存流事件x的空闲空间时,则将流事件x保存至流队列x在数据库中对应的存储空间内。
步骤307:从流队列x在数据库中对应的存储空间内读取流事件x,以及将流事件x保存至流队列x中等待处理。
此时,流队列x中当前有足够的空闲空间保存流事件x,且流队列x在数据库中对应的存储空间内没有与流事件x具有相同事件类型的其他流事件,则此时,可以将流事件x从数据库中读取出来,并保存至流队列x中等待处理。
本发明实施例中,步骤307仅为一种举例,即系统获知确定流队列x中已存在能够保存流事件x的空闲空间,且流队列x在数据库中对应的存储空间内未保存有其他流事件时,会确定满足预设条件,并从流队列x在数据库中对应的存储空间内读取流事件x,保存至流队列x中等待处理。在这种情况下,所有流事件是按照接收顺序被读取至流队列x中等待处理的。
而在实际应用中,还存在一种情况,即流事件x被管理人员临时设置为最高处理优先级(如,流事件x当前需要被紧急处理),此时,系统会优先处理流事件x,具体的,系统获知流事件x被指定为最高处理优先级时,也会确定满足预设条件,并从流队列x在数据库中对应的存储空间内读取流事件x,并将流队列x保存至流队列x中等待处理。
以上均为举例,不局限于此两种情况,在此不再赘述。
基于上述实施例,由于流队列是设置在内存中的,为了能够进一步提高内存利用率,避免资源浪费,本发明实施例中,还需要定期根据流队列的使用状态对流队列的队列长度进行调整。
参阅图5所示,仍以流队列x为例,本发明实施例中,调整流队列长度的具体流程如下:
步骤501:基于预设的定时器对流队列x进行监听。
本发明实施例中,针对每一个流队列分别设置有相应的定时器,基于定时器维护的周期,可以定期对流队列以及流队列在数据库中对应的存储空间的使用情况进行监听,确定存在过多空闲空间时,可以调整流队列的队列长度。
步骤502:判断流队列x中是否存在空闲空间?若是,则执行步骤504;否则,执行步骤504。
步骤503:将流队列x的队列长度按照预设的第一步长进行扩展。
可选的,第一步长可以设置为:流队列x当前的队列长度的N1倍,N1为预设参数,如,N1=2。
如果定期监听流队列x的过程中,发现流队列x中没有空闲空间,则说明当前流事件的并发数量较多,需要扩展流队列x的队列长度。
步骤504:判断流队列x在数据库中对应的存储空间是否为空?若是,则执行步骤506;否则,执行步骤505。
具体的,执行步骤504,即是判断流队列x在数据库中对应的存储空间内,是否已存储了之前捕获的与流事件具有相同事件类型的其他流事件。
步骤505:从流队列x在数据库中对应的存储空间内,读取其他流事件到流队列中等待处理,接着,返回步骤502。
具体的,若流队列x中存在空闲空间,且流队列x在数据库中对应的存储空间内还存在其他流事件,则说明需要先将这一部分其他流事件处理完毕,再判断流队列x是否空闲,从而可以获得较为准确的判断结果。
步骤506:将流队列x的队列长度按照预设的第二步长进行缩减,接着,返回步骤501。
可选的,第二步长可以设置为:流队列x中当前流事件数目+流队列x当前空闲空间/N2,N2为预设参数,如,N2=2。
采用上述实施例的好处是,当流事件的并发量比较高时,可以通过扩展流队列的队列长度尽可能多的存储流事件,避免存入数据库的时间开销;而当流事件比较少时,可以通过缩减流队列的队列长度,避免存储资源的浪费。
基于上述实施例中,现有技术下,在将流事件从流队列中读取出来进行处理时,还存在容易造成代码冗余以及代码复用率低的问题。这是因为:针对存储在系统队列中的流事件,操作系统只是根据相关参数查找对应的应用程序并直接推送至该应用程序进行处理。但是,不同系统事件包含的若干流事件中,存在很多功能类似但是相关参数略有差别的流事件,针对这类流事件,如果推送至不同的应用程序进行处理,则需要针对不同的应用程序分别编写各自的执行代码,这不仅会造成代码冗余,也会增加项目修改、管理难度。
针对上述缺陷,本发明实施例中,设计了多层管理路由方式。
参阅图6所示,所谓多层管理路由方式,即是针对不同的事件类型设置了不同的路由通道(以下简称为管道),在每一个管道中针对处于不同处理阶段的流事件又设计了相应的解析模块,流事件通过事件类型关联至相应的管道,再通过分片序号关联至相应的解析模块,即各个解析模块是独立的,可以在不同流事件之间共享。
具体的,以流事件x为例,在处理流事件x时,可以采用以下方式:
首先,从流队列x中读取流事件x,确定流事件x的事件类型和分片序号;
其次,基于流事件x的事件类型确定流事件x对应的管道x;
再次,基于流事件x的分片序号在管理x中确定相应的解析模块x;
具体的,根据流事件x的分片序号,可以确定解析模块x的入口函数,从而调用解析模块x。
最后,将流事件推送至解析模块x进行处理。
通过上述多层管理路由方式,可以在多个流事件之间实时解析模块的共享,从而提高代码复用率,提高了流事件解析效率,降低了系统运行负荷。
另一方面,现有技术下,系统采用轮询方式从各个应用程序对应的消息队列中读取流事件进行处理,并在视窗中显示处理结果,然而视窗刷新存在延时问题,若通过视窗的界面不能及时呈现最新处理的流事件的处理结果,则用户可能会反复请求获取该处理结果,从而容易造成处理结果的重复生成及呈现,而此类重复操作会不断增加系统的处理次数,导致系统堵塞甚至崩溃。
而本发明实施例中,由于设计了独立的解析模块,因此,可以通过监听模块对解析模块进行通过实时监听,参阅图6所示,本发明实施例中,系统通过监听模块可以针对各个管道中的解析模块进行监听,从而获得监听结果,基于监听结果,监听模块每确定一个解析模块生成流事件的处理结果时,便会选取一个视窗,实时地在这个视窗中中呈现获得的处理结果。
这样,可以通过对各个管道的监听,在视窗中同步绘制处理结果的呈现界面,从而避免了视窗显示延迟,也避免了系统因不断执行重复操作堵塞甚至崩溃,有效保证了系统的服务性能。
基于上述实施例,参阅图7所示,本发明实施例中,一种流事件的处理装置至少包括捕获模块71和处理模块72,其中,
捕获模块71,用于确定捕获的流事件的事件类型,以及确定对应所述流事件的事件类型设置的流队列;
处理模块72,用于确定所述流队列中不存在能够保存所述流事件的空闲空间时,将所述流事件保存至所述流队列在数据库中对应的存储空间内,并在确定满足预设条件时,从所述流队列在数据库中对应的存储空间内读取所述流事件,并保存至所述流队列中等待处理;以及,
在所述流队列使用过程中,对所述流队列的使用情况进行监听,根据监听结果对所述流队列的队列长度进行相应调整。
可选的,在确定满足预设条件时,将所述流事件保存至所述流队列中等待处理时,处理模块72用于:
获知所述流事件被指定为最高处理优先级时,确定满足预设条件,从所述流队列在数据库中对应的存储空间内读取所述流事件,并将所述流事件保存至所述流队列中等待处理;或者,
获知所述流队列中已存在能够保存所述流事件的空闲空间,且所述流队列在数据库中对应的存储空间内未保存有其他流事件时,确定满足预设条件,直接将所述流事件保存至所述流队列中等待处理。
可选的,处理模块72进一步用于:
获知所述流队列中已存在能够保存所述流事件的空闲空间,而所述流队列在数据库中对应的存储空间内保存有其他流事件时,从所述流队列在数据库中对应的存储空间内读取所述其他流事件,并将所述其他流事件保存至所述流队列中等待处理。
可选的,进一步包括:若干解析模块73,其中,解析模块73用于对流事件进行解析;
处理模块72进一步用于:
将所述流事件保存至所述流队列中等待处理之后,读取所述流事件,确定所述流事件的事件类型和分片序号,并基于所述事件类型确定所述流事件对应的路由通道,基于所述分片序号在所述路由通道中确定相应的解析模块73,以及将所述流事件发往相应的解析模块73进行处理。
可选的,进一步包括:
监听模块74,用于针对各个解析模块73进行监听,获得监听结果,以及基于监听结果,每确定一个解析模块73生成流事件的处理结果时,选取一个视窗,并在在所述一个视窗中呈现所述处理结果。
可选的,在所述流队列使用过程中,对所述流队列的使用情况进行监听,根据监听结果对所述流队列的队列长度进行相应调整时,处理模块72用于:
在所述流队列使用过程中,按照设定周期对所述流队列进行监听,获得监听结果;
每获得一次监听结果,判断所述流队列中是否存在空闲空间;
若否,则采用预设的第一步长对所述流队列的队列长度进行扩展;
若是,则在确定所述流队列在数据库中对应的存储空间内未存储有流事件时,采用预设的第二步长对所述流队列的队列长度进行缩减。
可选的,处理模块72进一步用于:
将所述第一步长预设为:所述流队列当前的队列长度的N1倍,其中,N1为预设参数;
将所述第二步长预设为:所述流队列中当前流事件数目+所述流队列当前空闲空间/N2,其中,N2为预设参数。
本发明一个实施例中,提供一种计算机设备,包括:
至少一个处理器,以及与所述至少一个处理器连接的存储器;
其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述至少一个处理器通过执行所述存储器存储的指令,执行上述各个实施例中的任意一种方法。
本发明一个实施例中,提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行上述各个实施例中的任意一种的方法。
综上所述,本发明实施例中,设计了内存队列(即流队列)和数据库的双层缓存池,在捕获到流事件后,先确定所述流事件的事件类型对应的流队列,若所述流队列中没有空闲空间,则将所述流事件保存至所述流队列在数据库中对应的存储空间内,以及在确定满足预设条件时,将所述流事件读取至所述流队列中等待处理,同时,还需要根据流队列的使用情况对流队列的队列长度进行适应性调整;这样,可以在高并发的流事件到达时,快速接收流事件并进行保存,防止了因流队列溢出而造成的流事件的丢失和遗漏,保证了系统的处理性能和处理效率,同时,又可以灵活控制流事件存储空间大小,减少资源浪费。
进一步地,可以根据流队列中的空闲情况灵活地调整流队列的队列长度,这样,当流事件的并发量比较高时,可以通过扩展流队列的队列长度尽可能多的存储流事件,避免存入数据库的时间开销;而当流事件比较少时,可以通过缩减流队列的队列长度,避免存储资源的浪费。
进一步地,本发明实施例中,针对不同事件类型的流事件分别设计了路由通道,以及针对处于不同处理阶段的流事件分别设计了独立的解析模块,通过路由通道可以区别不同事件类型的流事件,而独立的解析模块可以实现流事件的共享处理,这样,既避免了流事件的处理冲突,又达到了代码重复利用的目的,有效降低了研发复杂度以及运维难度,同时也降低了系统运行负荷。
进一步地,设计了监听模块,实时对各个解析模块进行监听,从而可以及时捕获各个解析模块生成的流事件的处理结果,并将处理结果同步绘制至相应视窗的界面中,避免因视窗延时而造成系统执行大量重复操作,进一步降低了系统运行负荷,也进一步提高了系统的服务性能。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明实施例进行各种改动和变型而不脱离本发明实施例的精神和范围。这样,倘若本发明实施例的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1.一种流事件的处理方法,其特征在于,包括:
确定捕获的流事件的事件类型,以及确定对应所述流事件的事件类型设置的流队列;
确定所述流队列中不存在能够保存所述流事件的空闲空间时,将所述流事件保存至所述流队列在数据库中对应的存储空间内,以及在确定满足预设条件时,将所述流事件保存至所述流队列中等待处理;
其中,在所述流队列使用过程中,对所述流队列的使用情况进行监听,根据监听结果对所述流队列的队列长度进行相应调整。
2.如权利要求1所述的方法,其特征在于,在确定满足预设条件时,将所述流事件保存至所述流队列中等待处理,包括:
获知所述流事件被指定为最高处理优先级时,确定满足预设条件,从所述流队列在数据库中对应的存储空间内读取所述流事件,并将所述流事件保存至所述流队列中等待处理;或者,
获知所述流队列中已存在能够保存所述流事件的空闲空间,且所述流队列在数据库中对应的存储空间内未保存有其他流事件时,确定满足预设条件,直接将所述流事件保存至所述流队列中等待处理。
3.如权利要求1所述的方法,其特征在于,进一步包括:
获知所述流队列中已存在能够保存所述流事件的空闲空间,而所述流队列在数据库中对应的存储空间内保存有其他流事件时,从所述流队列在数据库中对应的存储空间内读取所述其他流事件,并将所述其他流事件保存至所述流队列中等待处理。
4.如权利要求1、2或3所述的方法,其特征在于,将所述流事件保存至所述流队列中等待处理之后,进一步包括:
读取所述流事件,确定所述流事件的事件类型和分片序号;
基于所述事件类型确定所述流事件对应的路由通道;
基于所述分片序号在所述路由通道中确定相应的解析模块;
将所述流事件发往所述解析模块进行处理。
5.如权利要求4所述的方法,其特征在于,进一步包括:
针对各个解析模块进行监听,获得监听结果;
基于监听结果,每确定一个解析模块生成流事件的处理结果时,选取一个视窗,并在在所述一个视窗中呈现所述处理结果。
6.如权利要求1、2或3所述的方法,其特征在于,在所述流队列使用过程中,对所述流队列的使用情况进行监听,根据监听结果对所述流队列的队列长度进行相应调整,包括:
在所述流队列使用过程中,按照设定周期对所述流队列进行监听,获得监听结果;
每获得一次监听结果,判断所述流队列中是否存在空闲空间;
若否,则采用预设的第一步长对所述流队列的队列长度进行扩展;
若是,则在确定所述流队列在数据库中对应的存储空间内未存储有流事件时,采用预设的第二步长对所述流队列的队列长度进行缩减。
7.如权利要求6所述的方法,其特征在于,进一步包括:
将所述第一步长预设为:所述流队列当前的队列长度的N1倍,其中,N1为预设参数;
将所述第二步长预设为:所述流队列中当前流事件数目+所述流队列当前空闲空间/N2,其中,N2为预设参数。
8.一种流事件的处理装置,其特征在于,包括:
捕获模块,用于确定捕获的流事件的事件类型,以及确定对应所述流事件的事件类型设置的流队列;
处理模块,用于确定所述流队列中不存在能够保存所述流事件的空闲空间时,将所述流事件保存至所述流队列在数据库中对应的存储空间内,以及在确定满足预设条件时,将所述流事件保存至所述流队列中等待处理;以及,
在所述流队列使用过程中,对所述流队列的使用情况进行监听,根据监听结果对所述流队列的队列长度进行相应调整。
9.一种流事件的处理装置,其特征在于,包括:
至少一个处理器,以及与所述至少一个处理器连接的存储器;
其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述至少一个处理器通过执行所述存储器存储的指令,执行如权利要求1-7任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行如权利要求1-7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710842372.2A CN109947798A (zh) | 2017-09-18 | 2017-09-18 | 一种流事件的处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710842372.2A CN109947798A (zh) | 2017-09-18 | 2017-09-18 | 一种流事件的处理方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109947798A true CN109947798A (zh) | 2019-06-28 |
Family
ID=67003906
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710842372.2A Pending CN109947798A (zh) | 2017-09-18 | 2017-09-18 | 一种流事件的处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109947798A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111414384A (zh) * | 2020-02-26 | 2020-07-14 | 有米科技股份有限公司 | 海量流式数据的处理方法及装置 |
CN112040317A (zh) * | 2020-08-21 | 2020-12-04 | 海信视像科技股份有限公司 | 事件响应方法及显示设备 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1893686A (zh) * | 2005-07-04 | 2007-01-10 | 中兴通讯股份有限公司 | 一种短消息系统中对网元进行重试的方法 |
US20080301697A1 (en) * | 2006-10-06 | 2008-12-04 | Southgate Timothy J | Multiple task management between processors |
CN101562827A (zh) * | 2009-05-22 | 2009-10-21 | 中兴通讯股份有限公司 | 一种故障信息采集方法及系统 |
CN102263701A (zh) * | 2011-08-19 | 2011-11-30 | 中兴通讯股份有限公司 | 队列调整方法及装置 |
CN104077368A (zh) * | 2014-06-18 | 2014-10-01 | 国电南瑞科技股份有限公司 | 一种调度监控系统历史数据两级缓存多阶段提交方法 |
CN105357059A (zh) * | 2015-12-08 | 2016-02-24 | 中国建设银行股份有限公司 | 业务事件处理方法和装置 |
CN105786451A (zh) * | 2014-12-15 | 2016-07-20 | 华为技术有限公司 | 一种复杂事件处理方法、装置及系统 |
-
2017
- 2017-09-18 CN CN201710842372.2A patent/CN109947798A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1893686A (zh) * | 2005-07-04 | 2007-01-10 | 中兴通讯股份有限公司 | 一种短消息系统中对网元进行重试的方法 |
US20080301697A1 (en) * | 2006-10-06 | 2008-12-04 | Southgate Timothy J | Multiple task management between processors |
CN101562827A (zh) * | 2009-05-22 | 2009-10-21 | 中兴通讯股份有限公司 | 一种故障信息采集方法及系统 |
CN102263701A (zh) * | 2011-08-19 | 2011-11-30 | 中兴通讯股份有限公司 | 队列调整方法及装置 |
CN104077368A (zh) * | 2014-06-18 | 2014-10-01 | 国电南瑞科技股份有限公司 | 一种调度监控系统历史数据两级缓存多阶段提交方法 |
CN105786451A (zh) * | 2014-12-15 | 2016-07-20 | 华为技术有限公司 | 一种复杂事件处理方法、装置及系统 |
CN105357059A (zh) * | 2015-12-08 | 2016-02-24 | 中国建设银行股份有限公司 | 业务事件处理方法和装置 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111414384A (zh) * | 2020-02-26 | 2020-07-14 | 有米科技股份有限公司 | 海量流式数据的处理方法及装置 |
CN112040317A (zh) * | 2020-08-21 | 2020-12-04 | 海信视像科技股份有限公司 | 事件响应方法及显示设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106802826B (zh) | 一种基于线程池的业务处理方法及装置 | |
US10733019B2 (en) | Apparatus and method for data processing | |
US9197703B2 (en) | System and method to maximize server resource utilization and performance of metadata operations | |
US9286123B2 (en) | Apparatus and method for managing stream processing tasks | |
US10241799B2 (en) | Out-of-order command execution with sliding windows to maintain completion statuses | |
US8997109B2 (en) | Apparatus and method for managing data stream distributed parallel processing service | |
US11561830B2 (en) | System and method for low latency node local scheduling in distributed resource management | |
US9219769B2 (en) | Efficient multiple filter packet statistics generation | |
US9886310B2 (en) | Dynamic resource allocation in MapReduce | |
EP3285187B1 (en) | Optimized merge-sorting of data retrieved from parallel storage units | |
WO2013014623A1 (en) | Dynamic reduction of stream backpressure | |
CN109729024A (zh) | 数据包处理系统及方法 | |
US8365172B2 (en) | Horizontal scaling of stream processing | |
CN109726004B (zh) | 一种数据处理方法及装置 | |
KR20200141208A (ko) | 그래프 데이터 처리 방법 및 그래프 데이터 처리 장치 | |
CN111479095B (zh) | 一种业务处理控制系统、方法及装置 | |
US7840725B2 (en) | Capture of data in a computer network | |
Liu et al. | Optimizing shuffle in wide-area data analytics | |
CN109947798A (zh) | 一种流事件的处理方法及装置 | |
CN106201839A (zh) | 一种业务对象的信息加载方法和装置 | |
US8341368B2 (en) | Automatic reallocation of structured external storage structures | |
CN107066318A (zh) | 一种适用于流计算的数据调度方法 | |
CN114020440A (zh) | 多级任务分类处理方法、装置、系统和存储介质 | |
CN113971085A (zh) | 主从核心区分处理任务的方法、装置、系统和存储介质 | |
CN111131243A (zh) | Dpi系统策略处理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190628 |