流式数据处理方法、装置、设备和介质与流程

文档序号:20487884发布日期:2020-04-21 21:49阅读:265来源:国知局
流式数据处理方法、装置、设备和介质与流程

本申请实施例涉及计算机技术,具体涉及大数据处理,尤其涉及一种流式数据处理方法、装置、设备和介质。



背景技术:

在很多统计分析系统或广告系统中,均会对数据流进行实时计算,从而解决针对某个数据维度的top-k问题。

针对该top-k问题,当前常用方案主要包括以下两种:

(1)直接通过先进先出的方式,先到先得,k个槽位占满之后,在后接收的数据直接抛弃。该方案只适用于在先接收的实时数据中的关键字段key本身就属于后期频繁出现的关键字段key的场景,即该方案适用场景较窄,非常容易导致top-k问题的处理准确性降低。

(2)保存所有实时数据中关键字段key的统计值,通过统计排序,得到准确的top-k问题的处理结果。当数据量非常大时,该方案对内存资源消耗较大,影响系统整体的处理性能。



技术实现要素:

本申请实施例公开一种流式数据处理方法、装置、设备和介质,以通过动态维护预设数量的槽位数据,以及新加入字段对被替换字段的统计属性的继承,在保证top-k问题处理准确率的情况下,降低内存消耗。

第一方面,本申请实施例公开了一种流式数据处理方法,包括:

确定预设数量的槽位中是否存在实时接收的新数据中的关键字段,其中,所述预设数量的值大于需求数据量的设定值;

如果不存在,并且所述预设数量的槽位中不存在空位,则用所述关键字段替换槽位中的末位字段,并根据所述新数据当前携带的信息和所述末位字段的统计属性,确定所述关键字段在槽位中的统计属性;

根据所述关键字段的统计属性,实时确定所述新数据是否属于需求数据。

上述申请中的一个实施例具有如下优点或有益效果:通过动态维护预设数量的槽位,以及槽位中新加入关键字段对末位字段的统计属性的继承,采用top-k问题的近似处理思想,在保证top-k问题处理准确率的情况下,降低了内存消耗。

可选的,所述统计属性包括计数值和误差值;

相应的,根据所述新数据当前携带的信息和所述末位字段的统计属性,确定所述关键字段在槽位中的统计属性,包括:

根据所述新数据当前携带的信息和所述末位字段的计数值,确定所述关键字段在槽位中的计数值,并将所述末位字段的计数值确定为所述关键字段的误差值。

上述申请中的一个实施例具有如下优点或有益效果:使得新加入关键字段的统计属性继承被替换字段的统计属性,保持了槽位中出现的各字段统计属性的连续性,进而确保了基于字段统计属性筛选出需求数据的准确性。

可选的,所述方法还包括:

如果所述预设数量的槽位中不存在所述关键字段,并且所述预设数量的槽位中存在空位,则将所述关键字段添加至所述空位,根据所述新数据当前携带的信息,对所述关键字段在槽位中的计数值进行初始化,其中,将所述计数值进行初始化包括将所述关键字段在槽位中的误差值初始化为0。

可选的,所述预设数量的槽位中存储的各个字段的计数值形成双向链表;将所述各个字段作为父节点,将所述各个字段的计数值作为子节点,所述父节点与所述子节点为对应关系。

可选的,在确定所述关键字段在槽位中的统计属性之后,所述方法还包括:

按照各计数值的大小,通过各计数值在所述双向链表中的移动,对各计数值进行排序;

根据各计数值的排序结果,以及所述各个字段与计数值之间的对应关系,确定所述各个字段在所述预设数量的槽位中的位置。

上述申请中的一个实施例具有如下优点或有益效果:利用双向链表实现字段的快速排序,进而实现了对已接收数据的快速排序,并且通过字段聚合减少了排序过程中对各字段的遍历次数。

可选的,根据所述关键字段的统计属性,实时确定所述新数据是否属于需求数据,包括:

对截止到当前的设定时间期限内,已接收数据中所有关键字段的计数值进行累计,得到累计和;

计算所述累计和与所述预设数量之间的目标商值;

根据所述关键字段的计数值与误差值的差值、以及所述目标商值,实时确定所述新数据是否属于需求数据。

可选的,根据所述关键字段的计数值与误差值的差值、以及所述目标商值,实时确定所述新数据是否属于需求数据,包括:

利用以下公式实时确定所述新数据是否属于需求数据,

(count-error)>(n/m);

其中,所述count用于表示所述关键字段的计数值,所述error用于表示所述关键字段的误差值,所述m用于表示所述预设数量,所述n用于表示所述累计和,所述n/m用于表示所述目标商值。

上述申请中的一个实施例具有如下优点或有益效果:基于count值与error值,确保了需求数据确定的合理性与准确性。

可选的,所述确定实时接收的新数据中的关键字段,是否存在于预设数量的槽位中,包括:

利用所述预设数量的槽位中各字段的哈希列表,确定所述实时接收的新数据中的关键字段,是否存在于所述预设数量的槽位中。

可选的,所述方法还包括:

如果所述新数据不属于需求数据,则按照所述新数据所属的报表,调用数据写入处理线程,将所述新数据分别写入外部存储引擎的列族中,其中,一个列族用于存储属于一个报表的数据。

上述申请中的一个实施例具有如下优点或有益效果:有效避免了多线程处理读写任务的高并发问题,以及有效降低了多线程处理读写任务的读写冲突率。

可选的,所述方法还包括:

如果经过预设时间,基于所述新数据中关键字段的更新计数值,确定所述新数据的状态变更为属于需求数据,则调用数据读取处理线程,从各个列族中读取存储的所述新数据。

可选的,按照所述新数据所属的报表,调用数据写入处理线程,将所述新数据分别写入外部存储引擎的列族中,包括:

确定所述新数据所属的至少一个报表,以及确定每个报表在所述外部存储引擎中对应的列族;

如果当前针对同一列族的数据写入任务满足预设要求,则调用所述数据写入处理线程对所述数据写入任务进行批量处理。

上述申请中的一个实施例具有如下优点或有益效果:通过数据写入操作的批量处理,减少了针对外部存储引擎的数据写入次数,同时增加了处理线程的每秒请求数,提高了系统性能。

可选的,在所述调用所述数据写入处理线程对所述数据写入任务进行批量处理之前,所述方法还包括:

将针对每个列族的数据写入任务和数据读取任务,分别按照任务产生的时间,以数据写入任务列表和数据读取任务列表的形式存储在缓冲池中;

所述数据写入任务列表和所述数据读取任务列表为无锁任务列表。

上述申请中的一个实施例具有如下优点或有益效果:无锁任务列表的采用,使得两类任务列表中的任务执行顺序可以随时发生变化,有助于减少缓冲池中任务存储量的积压,缓解了缓冲池中读写处理线程的阻塞问题,降低了缓冲池中多线程读写冲突率。

可选的,按照所述新数据所属的报表,调用数据写入处理线程,将所述新数据分别写入外部存储引擎的列族中,包括:

按照预设报表拆分方式,将目标报表进行拆分,得到多个子报表,其中,所述目标报表为所述新数据的归属报表;

根据所述新数据中关键字段的哈希值,确定所述新数据对应的目标子报表,以及确定每个目标子报表在所述外部存储引擎中对应的列族;

调用所述数据写入处理线程,将所述新数据写入与所述目标子报表对应的列族中。

上述申请中的一个实施例具有如下优点或有益效果:通过对大数据流量报表进行拆分,降低了多线程处理读写任务的读写冲突率。

可选的,所述方法还包括:

在执行与各子报表对应的列族相关的数据写入处理线程或者数据读取处理线程之前,将预设配置文件依据列族的数量,拷贝相同数量的预设配置文件,分别作为每个列族的配置文件;

其中,所述预设配置文件是根据未拆分之前的报表预先配置。

上述申请中的一个实施例具有如下优点或有益效果:通过按照外部存储引擎中列族的数量,对预设配置文件进行拷贝,实现了为每个列族动态分配配置文件,提高了配置文件的设置灵活性,减少了配置冗余。

可选的,所述方法还包括:

如果所述新数据中的关键字段存在于所述预设数量的槽位中,则根据所述新数据当前携带的信息,更新所述关键字段在槽位中的统计属性。

第二方面,本申请实施例还公开了一种流式数据处理装置,包括:

槽位确定模块,用于确定实时接收的新数据中的关键字段,是否存在于预设数量的槽位中,其中,所述预设数量的值大于需求数据量的设定值;

统计属性确定模块,用于如果不存在,并且所述预设数量的槽位中不存在空位,则将所述关键字段替换槽位中的末位字段,并根据所述新数据当前携带的信息和所述末位字段的统计属性,确定所述关键字段在槽位中的统计属性;

需求数据确定模块,用于根据所述关键字段的统计属性,实时确定所述新数据是否属于需求数据。

第三方面,本申请实施例还公开了一种电子设备,包括:

至少一个处理器;以及

与所述至少一个处理器通信连接的存储器;其中,

所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如本申请实施例任一所述的流式数据处理方法。

第四方面,本申请实施例还公开了一种存储有计算机指令的非瞬时计算机可读存储介质,所述计算机指令用于使所述计算机执行如本申请实施例任一所述的流式数据处理方法。

根据本申请实施例的技术方案,通过动态维护预设数量的槽位,实时接收新数据,并确定新数据中关键字段在槽位中的统计属性,根据该统计属性确定实时接收的新数据是否属于需求数据,采用top-k问题的近似处理思想,在保证top-k问题处理准确率的情况下,降低了内存消耗,解决了现有技术中为保证top-k问题的处理准确率而保存每条数据中的关键字段,维护的槽位数量随着流式数据的增加而增加,导致系统内存消耗非常大的问题,进而提升了流式数据处理系统的整体处理性能。上述可选方式所具有的其他效果将在下文中结合具体实施例加以说明。

附图说明

附图用于更好地理解本方案,不构成对本申请的限定。其中:

图1是根据本申请实施例公开的一种流式数据处理方法的流程图;

图2是根据本申请实施例公开的槽位中各字段的count值形成的双向链表的一种示意图;

图3是根据本申请实施例公开的另一种流式数据处理方法的流程图;

图4是根据本申请实施例公开的数据预处理过程和数据读写过程的一种异步执行示意图;

图5是根据本申请实施例公开的数据写入任务列表和数据读取任务列表的一种示意图;

图6是根据本申请实施例公开的又一种流式数据处理方法的流程图;

图7是根据本申请实施例公开的一种流式数据处理装置的结构示意图;

图8是根据本申请实施例公开的一种电子设备的框图。

具体实施方式

以下结合附图对本申请的示范性实施例做出说明,其中包括本申请实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本申请的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。

在本申请实施例中,流式数据处理过程可以包括两个部分:数据预处理部分和数据读写部分。数据预处理部分负责实时接收数据流,通过动态维护预设数量的槽位,实时确定新数据是否属于排序在前的top-k数据。其中,一个槽位中存储一条数据的关键字段(key),该键字段是指根据当前流式数据处理需求,对数据统计具有分析价值的字段。预设数量的值m大于需求数据量的设定值k,该需求数据量是指经过数据预处理后入库存储,进而可以发送至下游业务的数据量,例如可以进行前端展示或者反馈给用户等,以100条数据为例,可以将排序在前的10条数据设定为需求数据量,即k值取为10,在数据预处理阶段,可以通过动态维护20个槽位来确定需求数据量。预设数量的值m可以根据涉及的业务数据测试的召回、精度、中间数据流量产出占比等因素进行确定,本实施例对其取值不作具体限定。

数据读写部分,负责将被确定为不属于当前需求数据的新数据,写入预先配置的外部存储引擎中,该过程可以称为数据的抛弃过程,以及当外部存储引擎中存储的数据符合需求数据要求时,将该存储数据从外部存储引擎中读取出来,并作为需求数据进行输出等,该过程可以称为数据的重新取回过程。以下结合附图对本申请实施例进行详细说明。

图1是根据本申请实施例公开的一种流式数据处理方法的流程图,本实施例可以适用于涉及top-k问题的流式数据处理场景中,例如数据统计分析系统中确定排名在前的top-k数据,广告系统中确定点击率排名在前的top-k广告等。本实施例方法可以由流式数据处理装置来执行,该装置可以采用软件和/或硬件的方式实现,并可集成在任意的具有计算能力的电子设备上。

如图1所示,本实施例公开的流式数据处理方法可以包括:

s101、确定预设数量的槽位中是否存在实时接收的新数据中的关键字段,其中,预设数量的值大于需求数据量的设定值。

本实施例中,实时接收的新数据中的关键字段,是指根据当前流式数据处理需求,对数据统计具有分析价值的字段,例如,任意一条广告数据中可以包括广告主题、广告商、点击率等多个字段,当前流式数据处理需要统计点击率较高的广告,则可以将点击率作为该广告数据中的关键字段。

一个槽位中用于存储一条数据中的关键字段,具体的,可以通过存储每个关键字段的签名值实现对该字段的存储,关键字段的签名值是指对关键字段进行加密编码后得到的字符串。

示例性的,确定实时接收的新数据中的关键字段,是否存在于预设数量的槽位中,包括:利用预设数量的槽位中各字段的哈希列表,确定实时接收的新数据中的关键字段,是否存在于预设数量的槽位中,即可以通过字段的哈希值计算与匹配,迅速确定当前新数据中的关键字段是否存在于槽位中。此外,也可以通过字段匹配等方式确定当前新数据中的关键字段是否存在于槽位中。预设数量的槽位中虽然存储了相同类型的字段,但是针对不同对象的数据,字段会加以区分,例如广告a的点击率和广告b的点击率分别区分存储在槽位中。

s102、如果不存在,并且预设数量的槽位中不存在空位,则用关键字段替换槽位中的末位字段,并根据新数据当前携带的信息和末位字段的统计属性,确定关键字段在槽位中的统计属性。

其中,字段的统计属性用于衡量数据在排序过程中的排名情况。每次接收新数据后,各槽位中存储的字段会根据字段统计属性进行排序,槽位中的末位字段即为排名最后的字段。每次接收到新数据后,如果判断出该新数据中的关键字段不在任一槽位中,并且,槽位中不存在空位,则将该新数据中的关键字段替换末位字段,并将该末位字段的统计属性传递给当前关键字段,即使得新加入关键字段的统计属性继承被替换字段的统计属性,保持槽位中出现的各字段统计属性的连续性,进而确保基于字段统计属性筛选出需求数据的准确性。

进一步的,本实施例方法还包括:如果新数据中的关键字段存在于预设数量的槽位中,则根据新数据当前携带的信息,更新关键字段在槽位中的统计属性,其中,数据中携带的信息是指与字段的统计属性直接相关信息,例如,对于广告类流式数据,数据中携带的信息可以是广告被用户点击的次数。新数据携带的信息可以是指与关键字段对应的value值,在槽位中该关键字段的原有属性值的基础上增加value值,得到新的属性值。

可选的,字段的统计属性包括计数count值和误差error值;相应的,根据新数据当前携带的信息和末位字段的统计属性,确定关键字段在槽位中的统计属性,包括:根据新数据当前携带的信息和末位字段的计数值,确定关键字段在槽位中的计数值,并将末位字段的计数值确定为关键字段的误差值。示例性的,末位字段可以是指槽位中计数值最小的字段,将新数据当前携带的信息转换为value值,将该value值与末位字段的计数值之和作为新数据中关键字段的计数值,同时将末位字段的计数值作为新数据中关键字段的误差值。

进一步的,本实施例方法还包括:如果预设数量的槽位中不存在关键字段,并且预设数量的槽位中存在空位,则将关键字段添加至空位,根据新数据当前携带的信息,对关键字段在槽位中的计数值进行初始化,例如将新数据当前携带的信息转换为value值赋值给计数值,其中,将计数值进行初始化包括将关键字段在槽位中的误差值初始化为0。

可选的,预设数量的槽位中存储的各个字段的计数值形成双向链表;将各个字段作为父节点,将各个字段的计数值作为子节点,父节点与子节点为对应关系。进一步的,在确定关键字段在槽位中的统计属性之后,本实施例方法还包括:

按照各计数值的大小,通过各计数值在双向链表中的移动,对各计数值进行排序;

根据各计数值的排序结果,以及各个字段与计数值之间的对应关系,确定各个字段在预设数量的槽位中的位置。

s103、根据关键字段的统计属性,实时确定新数据是否属于需求数据。

具体的,可以通过判断关键字段的统计属性是否达到预设条件来确定新数据是否属于需求数据,例如统计属性中的各值是否达到对应的阈值等。

可选的,根据关键字段的统计属性,实时确定新数据是否属于需求数据,包括:

对截止到当前的设定时间期限内,已接收数据中所有关键字段的计数值进行累计,得到累计和;

计算累计和与预设数量之间的目标商值;

根据关键字段的计数值与误差值的差值、以及目标商值,实时确定新数据是否属于需求数据。

具体的,可以参考以下公式,确定实时接收的新数据是否属于需求数据:(count-error)>(n/m),

其中,count用于表示关键字段的计数值,error用于表示关键字段的误差值,n/m用于表示目标商值,m用于表示预设数量,即动态维护的槽位数量,n用于表示累计和,也即相当于在该设定时间期限内,流式数据处理系统中出现的所有数据中关键字段count值的累计和,该设定时间期限的长度可以根据实际进行设置,本实施例不作具体限定。

计数值可以用于衡量对应数据出现的频繁度,基于上述公式可以看出,只有count值不断增加或者频繁更新的关键字段,在预设数量的槽位中的排序才会不断靠前,对应的数据才有机会成为需求数据,而计数值较低的关键字段则会逐渐被计数值较高的关键字段替换。

图2作为示例,示出了槽位中各字段的计数count值形成的双向链表的一种示意图,不应理解为对本实施例的具体限定。如图2所示,在一定时间内接收了5条数据,每条数据中的关键字段的哈希值分别表示为x、y、z、b、a,各数据中关键字段对应的count值分别1、1、2、3、4,error值分别为0、0、1、0、0。基于count值在双向链表中的移动,实现count值的由大到小的排序,然后基于字段与count值的对应关系,实现各字段的排序。通过将槽位中具有相同count值的字段聚合在一起,利用双向链表实现字段的快速排序,进而实现对已接收数据的快速排序,并且通过字段聚合减少了排序过程中对各字段的遍历次数。

根据本实施例的技术方案,通过动态维护预设数量的槽位,实时接收新数据,并确定新数据中关键字段在槽位中的统计属性,根据该统计属性确定实时接收的新数据是否属于需求数据,采用top-k问题的近似处理思想,在保证top-k问题处理准确率的情况下,降低了内存消耗,解决了现有技术中为保证top-k问题的处理准确率而保存每条数据中的关键字段,维护的槽位数量随着流式数据的增加而增加,导致系统内存消耗非常大的问题,进而提升了流式数据处理系统的整体处理性能。

图3是根据本申请实施例公开的另一种流式数据处理方法的流程图,基于上述技术方案进一步优化与扩展,并可以与上述各个可选实施方式进行结合。如图3所示,本实施例方法可以包括:

s201、确定预设数量的槽位中是否存在实时接收的新数据中的关键字段,其中,预设数量的值大于需求数据量的设定值。

s202、如果不存在,并且预设数量的槽位中不存在空位,则用关键字段替换槽位中的末位字段,并根据新数据当前携带的信息和末位字段的统计属性,确定关键字段在槽位中的统计属性。

s203、根据关键字段的统计属性,实时确定新数据是否属于需求数据。

s204、如果新数据不属于需求数据,则按照新数据所属的报表,调用数据写入处理线程,将新数据分别写入外部存储引擎的列族中,其中,一个列族用于存储属于一个报表的数据。

在本实施例中,将实时接收新数据至实时确定新数据是否属于需求数据这段处理过程称为流式数据预处理过程,该处理过程采用数据预处理线程执行各个相关的数据处理任务。当确定当前接收的新数据不属于需求数据,将其写入外部存储引擎(rocksdb)以及从外部存储引擎中读取数据的过程称为数据读写过程,数据读写过程与数据预处理过程分别采用相互独立的处理线程进行异步执行,以提高整个流式数据处理系统的处理效率。具体的,可以将在数据预处理过程中,实时产生的针对每个列族的数据写入任务和数据读取任务存储在数据缓冲池中,以等待数据读写线程从缓冲池中取出任务并处理,使得数据预处理过程和数据读取过程分别独立进行,互不影响。缓冲池的大小可以根据设备内存进行设置,本实施例不作具体限定。图4作为示例,示出了本实施例中数据预处理过程和数据读写过程的一种异步执行示意图。本实施例中外部存储引擎属于一种开放的嵌入式、持久化存储引擎,针对每一列族,可以采用单独的数据写入处理线程或数据读取处理线程负责与该列族相关的数据写入或数据读取操作。

进一步的,本实施例方法还包括:如果经过预设时间,基于新数据中关键字段的更新count值,确定新数据的状态变更为属于需求数据,则调用数据读取处理线程,从各个列族中读取存储的新数据。例如,经过预设时间,被存储至某列族中的某数据中关键字段的统计属性发生更新,count值和error值满足公式(count-error)>(n/m),则将该数据从列族中重新读取,以进行入库存储。

由于流式数据处理系统实时接收新数据,并实时进行槽位中字段统计属性的更新,因此,一定时间内会同时存在数据写入外部存储引擎以及从外部存储引擎中读取数据的情况,为避免多线程处理读写任务的高并发问题以及降低多线程处理读写任务的读写冲突率,采用按照实时接收的新数据所属的报表,将新数据分别写入与报表对应的列族(columnfamily)中,当存在读取数据的需求时,则根据数据所属的报表再次从对应的列族中读取出数据,可以有效解决高并发以及读写冲突的问题。

此外,需要说明的是,本实施例中对入库存储的数据会进行记录,例如可以记录入库存储的数据中的关键字段,具体可以是记录该关键字段的签名值,形成入库记录列表,当实时接收到新数据后,可以通过确定新数据中关键字段是否存在于该入库记录列表中,如果存在,则可以将该新数据直接入库存储,无需根据其关键字段的统计属性确定是否属于需求数据。

可选的,实时接收的新数据不属于需求数据时,按照新数据所属的报表,调用数据写入处理线程,将新数据分别写入外部存储引擎的列族中,包括:

确定新数据所属的至少一个报表,以及确定每个报表在外部存储引擎中对应的列族;

如果当前针对同一列族的数据写入任务满足预设要求,则调用数据写入处理线程对数据写入任务进行批量处理。

其中,预设要求包括:针对同一列族的数据写入任务的数量大于或等于数量阈值,或者在数据写入任务的数量小于数据阈值时,但是针对待写入数据的列族中存在数据读取任务,即在保证数据被正常写入的基础上才可以确保数据的正常读取。通过数据写入操作的批量处理(writebatch),可以减少针对外部存储引擎的数据写入次数,同时增加处理线程的每秒请求数(querypersecond,qps),提高系统性能。其中,数量阈值可以根据实际需求进行设置,本实施例不作具体限定,例如可以根据数据流特征进行性能测试确定一个合理的值。

可选的,在调用数据写入处理线程对数据写入任务进行批量处理之前,本实施例方法还包括:

将针对每个列族的数据写入任务和数据读取任务,分别按照任务产生的时间,以数据写入任务列表和数据读取任务列表的形式存储在缓冲池中;

数据写入任务列表和数据读取任务列表为无锁任务列表,可以根据数据写入任务或者数据读取任务的产生而实时更新。

由于数据预处理线程和数据读写线程是异步实现的,当针对外部存储引擎的读写线程的速度比预处理线程慢的时候,会导致数据缓冲池打满、内存暴涨以及读写处理线程阻塞等问题,从而引起处理线程的每秒请求数qps降低,通过采用无锁任务列表,使得当前数据写入任务列表(writelist)或数据读取任务列表(pickuplist)可以随时被截断,加入新的任务,然后基于新加入的任务继续缓存至缓冲池中,从而实现对任务执行顺序的重新排序,使得缓冲池中任务存储量可以减少积压,缓解缓冲池中读写处理线程的阻塞问题,降低缓冲池中多线程读写冲突率。

图5作为示例,示出了数据写入任务列表和数据读取任务列表的一种示意图,但不应理解为对本实施例的一种限定。如图5所示,针对外部存储引擎中的某一列族,数据写入操作需要在数据读取操作之前被执行,当存在新的数据写入或者读取的需求,从当前的任务列表头部head截断任务列表,并且需要先执行数据写入任务后执行数据读取任务,任务列表被截断后的新的读写任务可以继续从新的任务列表头部(newhead)加入缓冲池,以等待被执行。

根据本实施例的技术方案,通过动态维护预设数量的槽位,实时接收新数据,并确定新数据中关键字段在槽位中的统计属性,根据该统计属性确定实时接收的新数据是否属于需求数据,采用top-k问题的近似处理思想,在保证top-k问题处理准确率的情况下,降低了内存消耗;在确定实时接收的新数据不属于需求数据时,按照新数据所属的报表,分别存储至对应的列族中,避免了多线程处理读写任务的高并发问题,降低了多线程处理读写任务的读写冲突率;并且,数据处理过程与数据读写过程采用多线程异步处理,提高了整个流式数据处理系统的处理效率;同时,通过数据写入任务的批量处理,减少了针对外部存储引擎的数据写入次数,增加了处理线程的每秒请求数qps。

图6是根据本申请实施例公开的又一种流式数据处理方法的流程图,基于上述技术方案进一步优化与扩展,并可以与上述各个可选实施方式进行结合。如图6所示,本实施例方法可以包括:

s301、确定预设数量的槽位中是否存在实时接收的新数据中的关键字段,其中,预设数量的值大于需求数据量的设定值。

s302、如果不存在,并且预设数量的槽位中不存在空位,则用关键字段替换槽位中的末位字段,并根据新数据当前携带的信息和末位字段的统计属性,确定关键字段在槽位中的统计属性。

s303、根据关键字段的统计属性,实时确定新数据是否属于需求数据。

s304、如果新数据不属于需求数据,则按照预设报表拆分方式,将目标报表进行拆分,得到多个子报表,其中,目标报表为新数据的归属报表。

s305、根据新数据中关键字段的哈希值,确定新数据对应的目标子报表,以及确定每个目标子报表在外部存储引擎中对应的列族。

s306、调用数据写入处理线程,将新数据写入与目标子报表对应的列族中。

当实时接收的新数据不属于需求数据,在数据读写处理过程中,针对部分报表的数据流量比较大的情况,会导致某段时间所有的数据读写处理线程都在处理同一张报表数据,导致多线程处理冲突增加,因此,针对这类报表,通过报表拆分,实现实时接收的新数据的分流存储,从而达到减少处理线程冲突的效果。其中,报表拆分的方式与实时接收的新数据中关键字段的哈希值有关,例如可以按照哈希值与设定数值的商,实现对实时接收的新数据的分流存储。即在本实施例中,如果一张报表的数据流量没有超过预设流量阈值,则为每个完整的报表分配一个独立的存储列族,将属于该报表的新数据存储在与该报表对应的列族中;如果存在数据流量超过预设流量阈值的报表,则将该报表拆分成多个子报表,为每个子报表分配一个独立的存储列族,然后将实时接收的新数据存储在所属的子报表对应的列族中。预设流量阈值可以根据报表数据流量的大小划分进行适应性设置。

可选的,本实施例方法还包括:在执行与各子报表对应的列族相关的数据写入处理线程或者数据读取处理线程之前,将预设配置文件依据列族的数量,拷贝相同数量的预设配置文件,分别作为每个列族的配置文件;其中,预设配置文件是根据未拆分之前的报表预先配置,列族的数量与报表拆分后得到的子报表的数量相同。

针对报表拆分的情况,由于多个列族各自对应的子报表为一张报表拆分得到,因此,该多个列族在外部存储引擎中对应的配置文件实质是相同的,可以在报表拆分后通过拷贝预设配置文件的方式确定每个列族所需的配置文件,在数据处理过程中,通过将各个配置文件加载至设备磁盘中,生成外部存储引擎的最终配置。相比现有技术中采用在数据读写之前,逐一为每个列族预先重复设置配置文件的固定设置方式,本实施例采用在数据读写处理过程中,在报表拆分后通过预设配置文件的拷贝,实现为每个列族动态分配配置文件,增加了配置文件设置的灵活性,可以根据报表的拆分数量进行灵活调整,并且减少了配置冗余。

根据本实施例的技术方案,通过动态维护预设数量的槽位,实时接收新数据,并确定新数据中关键字段在槽位中的统计属性,根据该统计属性确定实时接收的新数据是否属于需求数据,采用top-k问题的近似处理思想,在保证top-k问题处理准确率的情况下,降低了内存消耗;在确定实时接收的新数据不属于需求数据时,对该新数据所属的报表进行拆分,将新数据分流存储至所属的子报表对应的列族中,进一步降低了数据读写过程中多线程处理的冲突率,并且避免了线程阻塞的发生;同时,通过按照外部存储引擎中列族的数量,对预设配置文件进行拷贝,实现为每个列族动态分配配置文件,提高了配置文件的设置灵活性,减少了配置冗余。

图7是根据本申请实施例公开的一种流式数据处理装置的结构示意图,本实施例可以适用于涉及top-k问题的流式数据处理场景中,例如数据统计分析系统中确定排名在前的top-k数据,广告系统中确定点击率排名在前的top-k广告等。本实施例装置可以采用软件和/或硬件的方式实现,并可集成在任意的具有计算能力的电子设备上。

如图7所示,本实施例公开的流式数据处理装置700可以包括槽位确定模块701、统计属性确定模块702和需求数据确定模块703,其中:

槽位确定模块701,用于确定预设数量的槽位中是否存在实时接收的新数据中的关键字段,其中,预设数量的值大于需求数据量的设定值;

统计属性确定模块702,用于如果不存在,并且预设数量的槽位中不存在空位,则用关键字段替换槽位中的末位字段,并根据新数据当前携带的信息和末位字段的统计属性,确定关键字段在槽位中的统计属性;

需求数据确定模块703,用于根据关键字段的统计属性,实时确定新数据是否属于需求数据。

可选的,统计属性包括计数值和误差值;相应的,统计属性确定模块702包括:

字段替换单元,用于如果新数据中的关键字段不存在于预设数量的槽位中,并且预设数量的槽位中不存在空位,则将关键字段替换槽位中的末位字段;

统计属性确定单元,用于根据新数据当前携带的信息和末位字段的计数值,确定关键字段在槽位中的计数值,并将末位字段的计数值确定为关键字段的误差值。

可选的,统计属性确定模块702还包括:

统计属性初始化单元,用于如果预设数量的槽位中不存在关键字段,并且预设数量的槽位中存在空位,则将关键字段添加至空位,根据新数据当前携带的信息,对关键字段在槽位中的计数值进行初始化,其中,将计数值进行初始化包括将关键字段在槽位中的误差值初始化为0。

可选的,预设数量的槽位中存储的各个字段的计数值形成双向链表;将各个字段作为父节点,将各个字段的计数值作为子节点,父节点与子节点为对应关系。

可选的,本实施例装置还包括:

计数值排序模块,用于统计属性确定模块702执行确定关键字段在槽位中的统计属性的操作之后,按照各计数值的大小,通过各计数值在双向链表中的移动,对各计数值进行排序;

字段位置确定模块,用于根据各计数值的排序结果,以及各个字段与计数值之间的对应关系,确定各个字段在预设数量的槽位中的位置。

可选的,需求数据确定模块703具体用于:

对截止到当前的设定时间期限内,已接收数据中所有关键字段的计数值进行累计,得到累计和;

计算累计和与预设数量之间的目标商值;

根据关键字段的计数值与误差值的差值、以及目标商值,实时确定新数据是否属于需求数据。

进一步的,需求数据确定模块703具体用于:

利用以下公式实时确定新数据是否属于需求数据,

(count-error)>(n/m),

其中,count用于表示关键字段的计数值,error用于表示关键字段的误差值,m用于表示预设数量,n用于表示累计和,n/m用于表示目标商值。

可选的,槽位确定模块701具体用于:利用预设数量的槽位中各字段的哈希列表,确定实时接收的新数据中的关键字段,是否存在于预设数量的槽位中。

可选的,本实施例装置还包括:

数据存储模块,用于如果新数据不属于需求数据,则按照新数据所属的报表,调用数据写入处理线程,将新数据分别写入外部存储引擎的列族中,其中,一个列族用于存储属于一个报表的数据。

可选的,本实施例装置还包括:

数据读取模块,用于如果经过预设时间,基于该新数据中关键字段的更新计数值,确定新数据的状态变更为属于需求数据,则调用数据读取处理线程,从各个列族中读取存储的新数据。

可选的,数据存储模块包括:

报表与列族确定单元,用于确定新数据所属的至少一个报表,以及确定每个报表在外部存储引擎中对应的列族;

第一数据写入单元,用于如果当前针对同一列族的数据写入任务满足预设要求,则调用数据写入处理线程对数据写入任务进行批量处理。

可选的,数据存储模块还包括:

任务存储单元,用于数据存储单元执行调用数据写入处理线程对数据写入任务进行批量处理的操作之前,将针对每个列族的数据写入任务和数据读取任务,分别按照任务产生的时间,以数据写入任务列表和数据读取任务列表的形式存储在缓冲池中;数据写入任务列表和数据读取任务列表为无锁任务列表。

可选的,数据存储模块包括:

报表拆分单元,用于按照预设报表拆分方式,将目标报表进行拆分,得到多个子报表,其中,目标报表为新数据的归属报表;

目标子报表与列族确定单元,用于根据新数据中关键字段的哈希值,确定新数据对应的目标子报表,以及确定每个目标子报表在外部存储引擎中对应的列族;

第二数据写入单元,用于调用数据写入处理线程,将新数据写入与目标子报表对应的列族中。

可选的,本实施例装置还包括:

配置文件设置模块,用于在执行与各子报表对应的列族相关的数据写入处理线程或者数据读取处理线程之前,将预设配置文件依据列族的数量,拷贝相同数量的预设配置文件,分别作为每个列族的配置文件;

其中,预设配置文件是根据未拆分之前的报表预先配置。

可选的,本实施例装置还包括:

统计属性更新模块,用于如果实时接收的新数据中的关键字段,存在于预设数量的槽位中,则根据新数据当前携带的信息,更新关键字段在槽位中的统计属性。

本申请实施例所公开的流式数据处理装置700可执行本申请实施例所公开的流式数据处理方法,具备执行方法相应的功能模块和有益效果。本实施例中未详尽描述的内容可以参考本申请任意方法实施例中的描述。

根据本申请的实施例,本申请还提供了一种电子设备和一种可读存储介质。

如图8所示,图8是用于实现本申请实施例中流式数据处理方法的电子设备的框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本申请实施例的实现。

如图8所示,该电子设备包括:一个或多个处理器801、存储器802,以及用于连接各部件的接口,包括高速接口和低速接口。各个部件利用不同的总线互相连接,并且可以被安装在公共主板上或者根据需要以其它方式安装。处理器可以对在电子设备内执行的指令进行处理,包括存储在存储器中或者存储器上以在外部输入/输出装置(诸如,耦合至接口的显示设备)上显示图形用户界面(graphicaluserinterface,gui)的图形信息的指令。在其它实施方式中,若需要,可以将多个处理器和/或多条总线与多个存储器和多个存储器一起使用。同样,可以连接多个电子设备,各个设备提供部分必要的操作,例如,作为服务器阵列、一组刀片式服务器、或者多处理器系统。图8中以一个处理器801为例。

存储器802即为本申请实施例所提供的非瞬时计算机可读存储介质。其中,所述存储器存储有可由至少一个处理器执行的指令,以使所述至少一个处理器执行本申请实施例所提供的流式数据处理方法。本申请实施例的非瞬时计算机可读存储介质存储计算机指令,该计算机指令用于使计算机执行本申请实施例所提供的流式数据处理方法。

存储器802作为一种非瞬时计算机可读存储介质,可用于存储非瞬时软件程序、非瞬时计算机可执行程序以及模块,如本申请实施例中流式数据处理方法对应的程序指令/模块,例如,附图7所示的槽位确定模块701、统计属性确定模块702和需求数据确定模块703。处理器801通过运行存储在存储器802中的非瞬时软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述方法实施例中的流式数据处理方法。

存储器802可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据流式数据处理方法的电子设备的使用所创建的数据等。此外,存储器802可以包括高速随机存取存储器,还可以包括非瞬时存储器,例如至少一个磁盘存储器件、闪存器件、或其他非瞬时固态存储器件。在一些实施例中,存储器802可选包括相对于处理器801远程设置的存储器,这些远程存储器可以通过网络连接至用于实现本实施例中流式数据处理方法的电子设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

用于实现本实施例中流式数据处理方法的电子设备还可以包括:输入装置803和输出装置804。处理器801、存储器802、输入装置803和输出装置804可以通过总线或者其他方式连接,图8中以通过总线连接为例。

输入装置803可接收输入的数字或字符信息,以及产生与用于实现本实施例中流式数据处理方法的电子设备的用户设置以及功能控制有关的键信号输入,例如触摸屏、小键盘、鼠标、轨迹板、触摸板、指示杆、一个或者多个鼠标按钮、轨迹球、操纵杆等输入装置。输出装置804可以包括显示设备、辅助照明装置和触觉反馈装置等,其中,辅助照明装置例如发光二极管(lightemittingdiode,led);触觉反馈装置例如,振动电机等。该显示设备可以包括但不限于,液晶显示器(liquidcrystaldisplay,lcd)、led显示器和等离子体显示器。在一些实施方式中,显示设备可以是触摸屏。

此处描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、专用集成电路(applicationspecificintegratedcircuit,asic)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。

这些计算程序,也称作程序、软件、软件应用、或者代码,包括可编程处理器的机器指令,并且可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。如本文使用的,术语“机器可读介质”和“计算机可读介质”指的是用于将机器指令和/或数据提供给可编程处理器的任何计算机程序产品、设备、和/或装置,例如,磁盘、光盘、存储器、可编程逻辑装置(programmablelogicdevice,pld),包括,接收作为机器可读信号的机器指令的机器可读介质。术语“机器可读信号”指的是用于将机器指令和/或数据提供给可编程处理器的任何信号。

为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置,例如,阴极射线管(cathoderaytube,crt)或者lcd监视器;以及键盘和指向装置,例如,鼠标或者轨迹球,用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈,例如,视觉反馈、听觉反馈、或者触觉反馈;并且可以用任何形式,包括声输入、语音输入或者、触觉输入,来接收来自用户的输入。

可以将此处描述的系统和技术实施在包括后台部件的计算系统,例如,作为数据服务器,或者实施在包括中间件部件的计算系统,例如,应用服务器,或者实施在包括前端部件的计算系统,例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互,或者实施在包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信,例如通信网络,来将系统的部件相互连接。通信网络的示例包括:局域网(localareanetwork,lan)、广域网(wideareanetwork,wan)和互联网。

计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。

根据本申请实施例的技术方案,通过动态维护预设数量的槽位,实时接收新数据,并确定新数据中关键字段在槽位中的统计属性,根据该统计属性确定实时接收的新数据是否属于需求数据,采用top-k问题的近似处理思想,在保证top-k问题处理准确率的情况下,降低了内存消耗,解决了现有技术中为保证top-k问题的处理准确率而保存每条数据中的关键字段,维护的槽位数量随着流式数据的增加而增加,导致系统内存消耗非常大的问题,进而提升了流式数据处理系统的整体处理性能。

应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本申请中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本申请公开的技术方案所期望的结果,本文在此不进行限制。

上述具体实施方式,并不构成对本申请保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本申请的精神和原则之内所作的修改、等同替换和改进等,均应包含在本申请保护范围之内。

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