一种实时数据合并方法和装置与流程

文档序号:13004704阅读:273来源:国知局
一种实时数据合并方法和装置与流程

本公开涉及计算机技术领域,特别涉及一种实时数据合并方法和装置。



背景技术:

在实时数据的处理中,对于具有处理关联性(某些数据在处理过程中有一定的依赖关系)的数据,可以进行数据合并。例如,当需要同时处理下单数据和支付数据时,具有相同订单号的下单数据和支付数据即为具有处理关联性的数据,可以将这两种数据合并后再进行后续处理。

现有技术中,需要进行合并的实时数据可能会分布在不同的数据处理节点,例如,下单数据在节点a,支付数据在节点b,并且数据到达节点的时间也可能不同,这种情况下为了实现数据的合并可以使用共享暂存。例如,各数据处理节点可以将自己接收到的数据发送至一个所有节点都可以访问的数据库,然后再向数据库查询获取其他节点接收的数据。比如,上述例子中,节点a将下单数据存储至数据库,并查询数据库中是否有支付数据,若节点b先于节点a已将接收到的支付数据存储至数据库,那么节点a可以获取到支付数据,并执行支付数据和下单数据的合并。但是,上述方法需要使用数据库资源,成本较高,而且数据库的吞吐量限制也制约了实时数据合并的速度,增加了数据处理延迟。



技术实现要素:

有鉴于此,本公开提供一种实时数据合并方法和装置,以加快实时数据合并的速度,并降低资源成本。

具体地,本公开是通过如下技术方案实现的:

第一方面,提供一种实时数据合并方法,所述方法包括:

前置分组模块在接收到数据时,将具有处理关联性的数据发送至同一个数据处理节点,所述具有处理关联性的数据是待合并的关联数据;

所述数据处理节点利用本地暂存,存储所述关联数据;

所述数据处理节点合并所述关联数据。

第二方面,提供一种实时数据合并系统,所述系统包括:前置分组模块和分布式数据处理集群,所述分布式数据处理集群中包括多个数据处理节点,所述前置分组模块用于将数据送达所述各个数据处理节点;

所述前置分组模块,用于在接收到数据时,将具有处理关联性的数据发送至同一个数据处理节点,所述具有处理关联性的数据是待合并的关联数据;

所述数据处理节点,用于利用本地暂存,存储所述关联数据,并合并所述关联数据。

第三方面,提供一种计算机可读存储介质,所述介质上存储有计算机指令,该指令被处理器执行时,用于实现如下步骤:

前置分组模块在接收到数据时,将具有处理关联性的数据发送至同一个数据处理节点,所述具有处理关联性的数据是待合并的关联数据;

所述数据处理节点利用本地暂存,存储所述关联数据;

所述数据处理节点合并所述关联数据。

第四方面,提供一种实时数据合并设备,所述设备包括存储器、处理器,以及存储在存储器上并可在处理器上运行的计算机指令,所述处理器执行所述指令时实现如下步骤:

前置分组模块在接收到数据时,将具有处理关联性的数据发送至同一个数据处理节点,所述具有处理关联性的数据是待合并的关联数据;

所述数据处理节点利用本地暂存,存储所述关联数据;

所述数据处理节点合并所述关联数据。

本公开的实时数据合并方法和装置,通过设置前置分组模块,使得需要合并的数据能够到达同一个数据处理节点,并且在本节点内对先到达的数据进行暂存,不再需要外部存储,节省了资源成本;外部共享存储的去除,也使得实时数据的合并过程不依赖外部存储,从而去除了数据库吞吐能力的制约,提升了实时数据合并的效能。

附图说明

图1是本公开一个例子中提供的实时数据合并系统;

图2是本公开一个例子中提供的实时数据合并方法的流程图;

图3是本公开一个例子中提供的前置分组模块分配数据的流程图。

具体实施方式

图1示例了一种实时数据合并系统,如图1所示,该系统可以包括多个消息源11,每个消息源11都可以产生用于携带和传递实时数据的消息(message)。消息源11产生的消息可以被前置分组模块12接收,该前置分组模块12可以将接收到的消息再发送至分布式数据处理集群13中的其中一个数据处理节点14,由数据处理节点14进行数据合并。其中,前置分组模块12与各个数据处理节点14之间的连接方式,可以直接连接,也可以间接连接,比如通过消息中间件连接。

请继续参见图1所示,相比于现有的数据合并方式,本公开例子中的实时数据合并系统去除了原有的共享暂存(例如,各数据处理节点均可访问的mysql数据库),并且在消息源和数据处理节点之间新增加了前置分组模块12,使得消息源产生的消息先发送至前置分组模块12(前置shuffle),由前置分组模块12决定将消息转发至哪个数据处理节点14。

如下结合图2的流程图,描述本公开例子的实时数据合并方法的过程:

在步骤201中,前置分组模块接收消息源发送的消息。

本步骤中,各个消息源产生的消息都将先发送至图1中的前置分组模块12。

在步骤202中,前置分组模块将具有处理关联性的数据发送至同一个数据处理节点,所述具有处理关联性的数据是待合并的关联数据。

本例子中,前置分组模块12可以将需要合并的消息发送至同一个数据处理节点。在现有的数据合并方式中,正是由于需要合并的消息可能被分配至不同的数据处理节点,而节点之间又不能数据互通,才导致只能借助共享暂存,而本例子通过使用前置分组模块12,能够实现需要合并的消息到达同一节点,不需要再使用共享暂存数据库。

在一个例子中,前置分组模块12可以按照图3所示的流程,将需要合并的消息分配至同一个数据处理节点。其中,需要合并的消息是具有处理关联性的消息,即消息中携带的数据在处理过程中有一定的依赖关系,比如,当需要同时处理下单数据和支付数据时,具有相同订单号的下单数据和支付数据即为具有处理关联性的数据,可以将这两种数据合并。

在步骤2021中,前置分组模块对于接收到的每个数据,计算所述数据的关联键,具有处理关联性的数据对应的关联键相同。

本步骤中,关联键可以是一个用于将具有处理关联性的数据联系在一起的特征,具体的关联键的设定可以根据业务定义。在一个例子中,可以将数据的一个数据属性,作为所述关联键,比如,userid,具有相同的userid的数据具有处理关联性。在另一个例子中,可以根据所述数据中的数据属性,计算得到所述关联键;比如,可以将数据中其中两个属性字段的值进行组合,作为关联键;又比如,还可以是对一个属性的解析,例如jsonstring,或者其他编码格式的数据解析得到关联键。

在步骤2022中,前置分组模块根据所述关联键得到分配参数。

例如,可以对关联键取hash,假设hash值是12345678,再计算12345678mod100=78,那么该“78”即作为分配参数。分配参数是用于与各个数据处理节点之间建立映射关系的参数,可以根据该分配参数决定应将数据发送至哪个节点。

在步骤2023中,前置分组模块根据分配参数与数据处理节点的映射关系,将所述数据发送至所述分配参数对应的数据处理节点。

例如,可以预先定义各个分配参数与各数据处理节点的映射关系,假设有100个数据处理节点,那么分配参数可以包括1至100,分配参数“1”对应位置编号是1的数据处理节点,分配参数“2”对应位置编号是2的数据处理节点,以此类推。那么,步骤2022中得到的分配参数“78”,对应着位置编号是78的数据处理节点,所有关联键取hash以后得到12345678的消息都会输出到位置编号是78的数据处理节点上。

此外,前置分组模块还可以是将消息输出至作为中间件的消息队列,比如,有100个消息队列,每个队列对应一个数据处理节点,消息输出至位置编号为78的队列后,可以再由该队列将消息发送至编号为78的数据处理节点。

以下单数据和支付数据的关联为例,一个消息流messagea中的数据都是下单数据,另一个消息流messageb中的数据都是支付数据;并且,下单数据和支付数据中都包括多个订单号的数据。假设当前要合并的是同一个订单号的下单数据和支付数据,那么前置分组模块可以根据步骤2021至步骤2023的处理,将同一个订单号的下单数据和支付数据发送至同一个数据处理节点。

在步骤203中,数据处理节点利用本地暂存,存储所述关联数据。

本例子中,需要进行合并的至少两个实时数据,即使被前置分组模块发送至同一个数据处理节点,但是这些数据到达该节点的时间先后不同,先到达节点的数据可以先暂存,等到后续数据到达该节点后再执行合并。本步骤中的数据处理节点可以利用本地暂存存储上述先后到达的实时数据,该本地暂存例如可以使用内存数据库或者本地文件等。

在步骤204中,数据处理节点合并所述关联数据。

此外,为了增强数据可靠性保证,如果数据处理节点的本地暂存中的数据在指定时间内(比如1分钟),还没有完成合并,则可以由节点上传至共享暂存例如数据库,按照现有方案由节点再去数据库获取数据后执行合并。这种情况可以是发生在分布式数据处理集群扩容或者缩容的瞬间,节点的变动将导致消息分配时映射关系的变化,关联数据的消息可能被映射到不同的节点上而无法合并;又比如,关联数据的消息先后到达数据处理节点的时间超过超时阀值(比如1分钟)。

在另一个例子中,按照本公开例子的合并方法,在某个数据处理节点完成实时数据合并后,可以使涉及相同数据合并的多个业务共享合并后的数据,从而简化多业务共用数据合并的逻辑。

本公开例子的实时数据合并方法,通过设置前置分组模块,使得需要合并的数据能够到达同一个数据处理节点,并且在本节点内对先到达的数据进行暂存,不再需要外部存储,节省了资源成本;外部共享存储的去除,也使得实时数据的合并过程不依赖外部存储,或者说大幅度减少外部存储依赖,至少缩减95%以上,从而去除了数据库吞吐能力的制约,提升了实时数据合并的效能。此外,如果使用外部共享存储例如mysql,存储的水平扩展成本高,扩展能力低,吞吐量的扩容需要应用逻辑做大量的改造和繁琐工作,人力成本和硬件成本都非常高,而使用数据处理节点的本地暂存后,处理节点可以水平扩容,弹性扩展能力得到提升,实时数据的合并能力自然也得到提升。

上述实施例阐明的实时数据合并系统,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。

本领域内的技术人员应明白,本公开的实施例可提供为方法、系统、或计算机程序产品。因此,本公开可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本公开可采用在一个或多个其中包含有计算机指令的计算机可读存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。例如,所述计算机指令被设备中的处理器执行时可以实现以下步骤:前置分组模块在接收到数据时,将具有处理关联性的数据发送至同一个数据处理节点,所述具有处理关联性的数据是待合并的关联数据;所述数据处理节点利用本地暂存,存储所述关联数据;所述数据处理节点合并所述关联数据。

在一个例子中,本公开还可以提供一种实时数据合并设备,该设备可以包括存储器、一个或多个处理器(cpu)、输入/输出接口、网络接口和内存,以及存储在存储器上并可在处理器上运行的计算机指令。所述处理器执行所述指令时实现以下步骤:前置分组模块在接收到数据时,将具有处理关联性的数据发送至同一个数据处理节点,所述具有处理关联性的数据是待合并的关联数据;所述数据处理节点利用本地暂存,存储所述关联数据;所述数据处理节点合并所述关联数据。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

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

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