数据处理方法、装置、电子设备及程序产品与流程
未命名
09-23
阅读:82
评论:0
1.本技术涉及数据处理技术领域,具体涉及一种数据处理方法、装置、电子设备及程序产品。
背景技术:
2.目前在消息推送过程中,采取多队列并发的形式并行数据传输。由于不同队列的传输速度,或者下游消费者的消费能力不同,会造成乱序。
3.现有处理方式为首先指定数据的主键字段,然后根据主键的字段值和队列数取模,得出队列编号,最后将该数据封装成消息发送到对应编号的队列中。由于同一主键数据必定推送到同一个队列中,因此可以保证同主键的顺序性推送。
4.现有方案存在以下缺陷:
5.1、取模算法不平均,负载不均衡。主键字段值取模的方式容易造成队列分配的不均衡,一批次数据整体的处理时间为接收消息最多的队列的处理结束时间。
6.2、不同队列吞吐量不同,造成资源浪费。在一批次数据中大部分主键取模的值都相同时,会出现其余队列迅速完成推送工作,等待最后一个队列推送完成的情况,造成吞吐量不均衡,队列资源的浪费。
技术实现要素:
7.本技术实施例提供一种数据处理方法、装置、电子设备及程序产品,用以解决无法同时保证数据的顺序性和队列负载均衡的技术问题。
8.第一方面,本技术实施例提供一种数据处理方法,包括:
9.将待处理数据发送至各个队列中,所述待处理数据包括多条具有同一数据标识的消息;
10.在确定所述消息未按照预设顺序消费的情况下,将各个队列中未消费的消息发送至第一堆栈进行顺序调整,得到调整后的目标消息;
11.将所述目标消息发送至消费端进行消费。
12.在一个实施例中,所述消息未按照预设顺序消费通过如下方式确定:
13.在所述各个队列的尾端检测所述消息对应的顺序编号;
14.在所述消息对应的顺序编号与目标序号不匹配的情况下,确定所述消息未按照预设顺序消费。
15.在一个实施例中,在所述将各个队列中未消费的消息发送至第一堆栈进行顺序调整之前,还包括:
16.在未检测到所述未消费的消息的情况下,基于所述数据标识,确定所述未消费的消息对应的第二堆栈;
17.基于所述消息对应的顺序编号,将所述第二堆栈中所述未消费的消息发送至所述第一堆栈。
18.在一个实施例中,所述方法还包括:
19.在所述各个队列的尾端检测所述消息对应的顺序编号;
20.在所述消息对应的顺序编号与目标序号匹配的情况下,消费所述消息,并更新所述目标序号。
21.在一个实施例中,在所述将各个队列中未消费的消息发送至第一堆栈进行顺序调整之前,还包括:
22.基于所述消息对应的顺序编号和队列索引,确定所述未消费的消息,所述队列索引用于指示所述未消费的消息所在的队列。
23.在一个实施例中,所述将待处理数据发送至各个队列中,包括:
24.基于bkdr哈希算法,将所述待处理数据分别发送至各个队列中。
25.在一个实施例中,所述未消费的消息为前序编号对应的消息,所述前序编号为所述消息对应的顺序编号之前的编号。
26.第二方面,本技术实施例提供一种数据处理装置,包括:
27.发送模块,用于将待处理数据发送至各个队列中,所述待处理数据包括多条具有同一数据标识的消息;
28.调整模块,用于在确定所述消息未按照预设顺序消费的情况下,将各个队列中未消费的消息发送至第一堆栈进行顺序调整,得到调整后的目标消息;
29.消费模块,用于将所述目标消息发送至消费端进行消费。
30.第三方面,本技术实施例提供一种电子设备,包括处理器和存储有计算机程序的存储器,所述处理器执行所述程序时实现第一方面所述的数据处理方法。
31.第四方面,本技术实施例提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现第一方面所述的数据处理方法。
32.本技术实施例提供的一种数据处理方法、装置、电子设备及程序产品,通过将待处理数据发送至各个队列中,可以保证队列负载均衡;并在确定消息未按照预设顺序消费的情况下,将各个队列中未消费的消息发送至第一堆栈进行顺序调整,得到调整后的目标消息,将所述目标消息发送至消费端进行消费,可以在保证队列负载均衡的情况下,保证数据处理的顺序性。
附图说明
33.为了更清楚地说明本技术或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
34.图1是本技术实施例提供的数据处理方法的流程示意图;
35.图2是应用本技术实施例提供的数据处理方法的共享中心结构示意图;
36.图3是应用本技术实施例提供的数据处理方法的流程示意图;
37.图4是本技术实施例提供的数据处理装置的结构示意图;
38.图5是本技术实施例提供的电子设备的结构示意图。
具体实施方式
39.为使本技术的目的、技术方案和优点更加清楚,下面将结合本技术实施例中的附图,对本技术中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
40.本技术提供的数据处理方法的执行主体可以是电子设备、电子设备中的部件、集成电路、或芯片。该电子设备可以是移动电子设备,也可以为非移动电子设备。示例性的,移动电子设备可以为手机、平板电脑、笔记本电脑、掌上电脑、车载电子设备、可穿戴设备、超级移动个人计算机(ultra-mobile personal computer,umpc)、上网本或者个人数字助理(personal digital assistant,pda)等,非移动电子设备可以为服务器、网络附属存储器(network attached storage,nas)、个人计算机(personal computer,pc)、柜员机或者自助机等,本技术不作具体限定。
41.下面以计算机执行本技术提供的数据处理方法为例,详细说明本技术的技术方案。
42.图1为本技术实施例提供的数据处理方法的流程示意图。参照图1,本技术实施例提供一种数据处理方法,可以包括:步骤110、步骤120和步骤130。
43.步骤110、将待处理数据发送至各个队列中,所述待处理数据包括多条具有同一数据标识的消息。
44.可以理解的是,待处理数据可以遵循生产者消费者模型,即生产端可以产生待处理数据,然后将待处理数据放入队列,消费端则从队列中取出待处理数据,对待处理数据进行消费。本技术实施例对生产端不作具体限定。
45.在实际执行中,将待处理数据对应的数据组可以封装成多条具有同一数据标识的消息。消息包括消息头,消息头用于存储消息的数据标识,数据标识用于指示一组数据的共同属性。
46.同一数据标识对应的消息可以作为一个数据集,消息头还用于记录数据集中的数据(消息)数量,以及该数据集中的每个数据(消息)在数据集中的位置或预设顺序。
47.数据标识可以为当前数据的主键字段或消息唯一标识等。不同的数据标识对应的数据不同,且不同数据标识对应的数据集之间相互独立。
48.在现有技术中,为了保证同一数据标识的消息按顺序消费,必定将同一数据标识的消息推送至同一队列中。而在本技术实施例中,可以将待处理数据可以发送至各个队列中,以保证队列负载均衡。
49.在一个实施例中,所述将待处理数据发送至各个队列中,包括:
50.基于bkdr哈希算法,将所述待处理数据分别发送至各个队列中。
51.bkdr哈希算法为字符串哈希算法,可以将字符串映射到整数。
52.基于bkdr哈希算法,可以将待处理数据均衡散列的分布发送到所有队列中,使得不同的队列具有相差无几的吞吐量。
53.本技术实施例提供的数据处理方法,通过基于bkdr哈希算法,将待处理数据分别发送至各个队列中,可以将每个队列的利用率提升到最大,充分利用资源,提升整体性能。
54.步骤120、在确定所述消息未按照预设顺序消费的情况下,将各个队列中未消费的
消息发送至第一堆栈进行顺序调整,得到调整后的目标消息。
55.同一数据标识的消息需要按照预设顺序消费,而消息被发送至各个队列中。
56.为了保证数据处理的顺序性,则需要在消息到达消费端之前,判断消息是否按照存储在消息头中的预设顺序消费。
57.在消息未按照预设顺序消费的情况下,则代表数据处理顺序错乱,则将该消息以及数据标识对应的所有未消费的消息,发送至第一堆栈进行顺序调整。
58.例如:一批次数据中,某主键可以对应10条消息,数据发送端会在10条消息的消息头中按顺序分别打上顺序编号1-10,表明10条消息需要按照1到10的数字顺序推送至消费端。消息到达队列末端时会依次记录下当前消息的顺序编号。消费端接收到的消息顺序应该为:编号1对应的消息、编号2对应的消息、编号3对应的消息
……
编号10对应的消息。
59.如果发现不是按需到达,则将所有队列中未消费的消息发送至第一堆栈进行顺序调整,得到调整后的目标消息。
60.可以理解的是,在本步骤中,已消费的消息不在顺序调整的范围内。
61.例如:消费端接收到的消息应该为编号5对应的消息,说明编号1到4对应的消息已被消费,而当前最先达到某一队列末端的消息为编号8对应的消息,则可以判定当前消息发生顺序错乱,需要进行顺序调整。则将各个队列中还未消费的消息发送至第一堆栈中。
62.其中,第一堆栈可以是在在消息未按照预设顺序消费的情况下实时生成的数据结构。
63.基于未消费消息的顺序编号,按照倒序将消息放入第一堆栈中,由于栈结构具有先进后出的特点,则在入栈顺序是倒序的情况下,最后出栈的顺序可以为正序。因此可以保证未消费的消息的顺序性。
64.步骤130、将所述目标消息发送至消费端进行消费。
65.可以理解的是,第一堆栈本质是一个独立于队列的堆栈结构,可以把正在队列中的数据或消息拿出来放到堆栈里面调整顺序,然后直接给到消费端,类似于把排错队的消息直接插队到消费端,插队是作用,栈是结构。
66.由于栈具有先进后出的特性,逆序存储的数据推送时可保证到达消费端一定为顺序排列,消费端即可按顺序消费对应的消息。
67.本技术实施例可以应用与如下场景:
68.在移动计费系统中,业务资料增量数据需要通过数据共享中心同步到内存数据库中。由于移动计费系统对于业务资料的准确性和及时性的要求较高,需要将业务资料增量数据发送到数据共享中心的不同队列后传递给消费端,具体实施方式如下:
69.1、基于bkdr哈希算法,可以将待处理数据均衡散列的分布发送到所有队列中。
70.2、在将待处理数据对应的数据组装成消息时,加上消息头,消息头包括当前数据的主键,该主键包含的数据集合中数据的数量,以及当前数据在数据集合中的序号。主键即为数据标识。
71.3、在共享中心中增加私有缓存,如图2所示,分为以下三部分:
72.第一部分:当消息到达消费端时,记录消息的主键,数据量,已消费消息的顺序编号。当该主键对应的最后一条消息到达消费端时,清除该条缓存。第一部分缓存为已消费缓存,用于记录消息的消费状态。
73.第二部分:当消息进入队列时,记录消息的主键,数据量,当前消息的顺序编号,消息所在队列编号。当该条消息到达消费端,或移入插队栈时,清除该条缓存。第二部分缓存为队列缓存,用于记录具体哪一条消息在哪一个队列中,类似于索引,可以根据消息直接去对应的队列将消息取出用于调整顺序,每条消息进入队列时都需要记录,被消费掉后随即删除缓存。
74.第三部分:以第一堆栈为插队栈为例,来说明本实施例。
75.记录所有存在的插队栈的索引以及对应的主键。第三部分缓存是栈缓存。因为一批次数据会存在许多个主键,每个主键对应的消息出现乱序时都会生成一个新的插队栈用于调整顺序,该部分的缓存就是主键与插队栈地址的索引,用于检索主键对应的插队栈地址,可以快速确定插队栈。
76.引入插队栈,可以将顺序错乱的数据,单独从队列找出,通过逆序压栈,顺序出栈,保证数据的顺序性。
77.3、消息通过队列发送到达消费端时,通过末端拦截器先查找消费缓存,判断该消息是否为首条记录,或者当前序号与缓存中记录的消费顺序是否匹配。若是,则更新缓存中记录的消息已消费的序号。若判断该消息是最后一条记录,则清除该条消息对应的缓存数据。
78.4、若队列末端拦截发现该消息与缓存中记录的消费顺序不匹配,说明推送顺序错乱。首先创建插队栈,将该条消息录压入插队栈中,查找队列缓存,并从对应的队列中检索出未消费的消息压入插队栈。
79.5、重复上述操作,直到已处理的数据序号和消费缓存中该主键的消费顺序相同,则代表该主键所有的数据已处理完毕,则将所有插队栈中的数据按顺序推送给消费端。由于栈具有先进后出的特性,逆序存储的数据推送时,可保证到达消费端一定为顺序排列的数据。
80.上述数据过程可以实现队列传输和插队栈异步处理,即队列的传输和插队栈的顺序调整操作互相独立,对于数据推送不受影响,可以保证共享中心的处理性能。
81.如图2所示,key001为主键,data01为数据以及数据编号。由图2可知,主键为key001、key003和key004对应的是顺序错乱的数据,则将主键对应的数据分别压入对应的插队栈中进行顺序调整。
82.图3是应用本技术实施例提供的数据处理方法的流程示意图。参照图3,本技术实施例提供一种数据处理方法,可以包括:
83.步骤310:将消息发送至各个队列中。
84.步骤311:记录主键、消息的顺序编号、队列编号。
85.步骤312:消息到达队列尾端,进入步骤313。
86.步骤313:判断是否无消费缓存或顺序正常,若是,进入步骤314,若否,进入步骤315。
87.步骤314:正常消费消息,并将主键和已消费的顺序编号记录缓存。
88.步骤315:创建插队栈并确定未消费数据。
89.步骤316:通过队列索引去队列中取未消费数据。判断是否存在未消费数据,若存在,进入步骤319,若不存在,进入步骤317。
90.步骤317:通过插队栈索引找同主键的插队栈,进入步骤319。
91.步骤318:合并插队栈。
92.步骤319:将数据压入插队栈。
93.步骤320:判断栈中数据与消费缓存的消费顺序是否一致。
94.步骤321:将插队栈中数据依次推送到消费端。
95.步骤322:清除所有缓存中该主键对应的数据。
96.本技术实施例提供的数据处理方法,通过将待处理数据发送至各个队列中,可以保证队列负载均衡;并在确定消息未按照预设顺序消费的情况下,将各个队列中未消费的消息发送至第一堆栈进行顺序调整,得到调整后的目标消息,将所述目标消息发送至消费端进行消费,可以在保证队列负载均衡的情况下,保证数据处理的顺序性。
97.在一个实施例中,所述未消费的消息为前序编号对应的消息,所述前序编号为所述消息对应的顺序编号之前的编号。
98.在实际执行中,可以根据数据总量筛选未消费的消息。
99.在数据总量过大的情况下,可以将前序编号对应的消息作为未消费的消息,即顺序编号之前的编号对应的消息。
100.在数据总量适中的情况下,可以将剩下的没有被消费的消息作为未消费的消息。本技术实施例对此不作具体限定。
101.例如:数据标识对应的消息为顺序编号1到10对应的消息。当前到达队列尾端的消息为顺序编号8对应的消息,而按照预设顺序,应该到达队列尾端的消息应该为顺序编号6对应的消息。则未消费的消息可以是顺序编号8之前未消费的消息,即为顺序编号7对应的消息和顺序编号6对应的消息。则直接将顺序编号6对应的消息和顺序编号7对应的消息发送至第一堆栈中进行顺序调整,并将第一堆栈中的消息直接推送至消费端,使得顺序编号6对应的消息和顺序编号7对应的消息可以按照正确的顺序先被消费,保证同一数据表示对应的消息处理的顺序性。
102.未消费的消息也可以是顺序编号6对应的消息、顺序编号7对应的消息、顺序编号8对应的消息、顺序编号9对应的消息和顺序编号10对应的消息,则可以直接将剩下未消费的消息直接发送至第一堆栈中进行顺序调整,然后将调整后的目标消息发送至消费端进行消费,从而保证同一数据表示对应的消息处理的顺序性。
103.可以理解的是,在未消费的消息为前序编号对应的消息的情况下,可以减少发送至第一堆栈的数据。
104.本技术实施例提供的数据处理方法,通过将顺序编号之前的序号对应的消息筛选为未消费的消息,可以提高顺序调整的效率,减少第一堆栈进行数据处理的压力。
105.在一个实施例中,所述消息未按照预设顺序消费通过如下方式确定:
106.在所述各个队列的尾端检测所述消息对应的顺序编号;
107.在所述消息对应的顺序编号与目标序号不匹配的情况下,确定所述消息未按照预设顺序消费。
108.可以理解的是,消息对应的顺序编号可以预先设置在消息的消息头中,用于指示该消息在数据集中的位置和处理顺序。
109.目标序号为顺序正确的情况下到达队列尾端的消息的顺序编号,也可以理解为消
费端当前能够成功消费的消息所对应的顺序编号。
110.在实际执行中,目标序号或消息推送的预设顺序可以预先存储在对应的缓存中,在进行消息消费顺序的检测时,可以直接根据缓存中存储的目标序号或预设顺序进行判断,从而可以快速确定消息是否按照预设顺序进行消费。
111.由于队列首端用于数据输入,队列尾端用于数据输出,所以在队列尾端设置拦截检测,可以确定当前达到队列尾端的消息的顺序编号。再将顺序编号与目标序号进行匹配,在顺序编号与目标序号不匹配的情况下,确定消息未按照预设顺序消费。
112.或者可以检测当前消息的前一个顺序编号对应的消息是否被消费,若尚未消费,也可以确定消息未按照预设顺序消费。
113.或者还可以是将消息对应的顺序编号直接与预设顺序进行匹配,若无法匹配,也可以确定消息未按照预设顺序消费。
114.本技术实施例提供的数据处理方法,通过消息对应的顺序编号与目标序号进行匹配,可以快速确定顺序错乱的消息。
115.在一个实施例中,在所述将各个队列中未消费的消息发送至第一堆栈进行顺序调整之前,还包括:
116.在未检测到所述未消费的消息的情况下,基于所述数据标识,确定所述未消费的消息对应的第二堆栈;
117.基于所述消息对应的顺序编号,将所述第二堆栈中所述未消费的消息发送至所述第一堆栈。
118.在没有检测到未消费的消息的情况下,说明未消费的消息被压入另一个堆栈,则可以根据数据标识检索到第二堆栈。
119.可以直接向第二堆栈中的数据直接并入第一堆栈中,也可以将第一堆栈和第二堆栈合并为一个堆栈,基于消息对应的顺序编号,合并后的栈中数据的顺序为逆序依次存储。
120.数据标识可以与栈地址进行关联,并建立对应的索引,该索引用于检索数据标识对应的堆栈地址。该索引也可以预先存储于对应的缓存中,便于快速确定为未消费的消息对应的栈地址。
121.本技术实施例提供的数据处理方法,通过数据标识,可以确定未消费的消息对应的第二堆栈,并将第二堆栈中未消费的消息发送至所述第一堆栈,以保证顺序错乱的消息在同一个堆栈中输出,避免再次造成乱序。
122.在一个实施例中,所述方法还包括:
123.在所述各个队列的尾端检测所述消息对应的顺序编号;
124.在所述消息对应的顺序编号与目标序号匹配的情况下,消费所述消息,并更新所述目标序号。
125.在队列尾端设置拦截检测,可以确定当前达到队列尾端的消息的顺序编号。再将顺序编号与目标序号进行匹配,在顺序编号与目标序号匹配的情况下,可以确定消息是按照预设顺序消费。
126.因此,在下一次消息到达队列尾端之前需要更新目标序号。
127.例如:顺序编号为5,目标序号为5,则消费完顺序编号5对应的消息后,需要将目标序号更新为6。
128.本技术实施例提供的数据处理方法,通过消息对应的顺序编号与目标序号进行匹配,可以快速确定消息是否按照正确顺序进行消费。
129.在一个实施例中,在所述将各个队列中未消费的消息发送至第一堆栈进行顺序调整之前,还包括:
130.基于所述消息对应的顺序编号和队列索引,确定所述未消费的消息,所述队列索引用于指示所述未消费的消息所在的队列。
131.在实际执行中,当消息进入队列时,记录消息的数据编号,数据量,当前消息的顺序编号,队列索引。
132.队列索引即为消息所在队列的编号,用于指示具体哪一条消息在哪一个队列中。
133.根据队列索引和当前消息的顺序编号,可以确定当前消息对应的队列,即可以直接去对应的队列将消息取出,以供后续进行顺序调整。
134.本技术实施例提供的数据处理方法,通过消息对应的顺序编号和队列索引,确定未消费的消息,从而可以实现对未消费的消息的快速定位。
135.下面对本技术实施例提供的数据处理装置进行描述,下文描述的数据处理装置与上文描述的数据处理方法可相互对应参照。
136.图4为本技术实施例提供的数据处理方法的结构示意图。参照图4,本技术实施例提供一种数据处理结构,可以包括:发送模块410、调整模块420和消费模块430。
137.发送模块410,用于将待处理数据发送至各个队列中,所述待处理数据包括多条具有同一数据标识的消息;
138.调整模块420,用于在确定所述消息未按照预设顺序消费的情况下,将各个队列中未消费的消息发送至第一堆栈进行顺序调整,得到调整后的目标消息;
139.消费模块430,用于将所述目标消息发送至消费端进行消费。
140.本技术实施例提供的数据处理装置,通过将待处理数据发送至各个队列中,可以保证队列负载均衡;并在确定消息未按照预设顺序消费的情况下,将各个队列中未消费的消息发送至第一堆栈进行顺序调整,得到调整后的目标消息,将所述目标消息发送至消费端进行消费,可以在保证队列负载均衡的情况下,保证数据处理的顺序性。
141.在一个实施例中,所述消息未按照预设顺序消费通过如下方式确定:
142.第一检测模块,用于在所述各个队列的尾端检测所述消息对应的顺序编号;
143.第一确定模块,用于在所述消息对应的顺序编号与目标序号不匹配的情况下,确定所述消息未按照预设顺序消费。
144.在一个实施例中,所述数据处理装置还包括:
145.第二确定模块,用于在未检测到所述未消费的消息的情况下,基于所述数据标识,确定所述未消费的消息对应的第二堆栈;
146.合并模块,用于基于所述消息对应的顺序编号,将所述第二堆栈中所述未消费的消息发送至所述第一堆栈。
147.在一个实施例中,所述数据处理装置还包括:
148.第二检测模块,用于在所述各个队列的尾端检测所述消息对应的顺序编号;
149.更新模块,用于在所述消息对应的顺序编号与目标序号匹配的情况下,消费所述消息,并更新所述目标序号。
150.在一个实施例中,所述数据处理装置还包括:
151.第三确定模块,用于基于所述消息对应的顺序编号和队列索引,确定所述未消费的消息,所述队列索引用于指示所述未消费的消息所在的队列。
152.在一个实施例中,所述发送模块410还用于:
153.基于bkdr哈希算法,将所述待处理数据分别发送至各个队列中。
154.在一个实施例中,所述未消费的消息为前序编号对应的消息,所述前序编号为所述消息对应的顺序编号之前的编号。
155.图5示例了一种电子设备的结构示意图,如图5所示,该电子设备可以包括:处理器(processor)510、通信接口(communication interface)520、存储器(memory)530和通信总线540,其中,处理器510,通信接口520,存储器530通过通信总线540完成相互间的通信。处理器510可以调用存储器530中的计算机程序,以执行数据处理方法的步骤,例如包括:
156.将待处理数据发送至各个队列中,所述待处理数据包括多条具有同一数据标识的消息;
157.在确定所述消息未按照预设顺序消费的情况下,将各个队列中未消费的消息发送至第一堆栈进行顺序调整,得到调整后的目标消息;
158.将所述目标消息发送至消费端进行消费。
159.此外,上述的存储器530中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
160.另一方面,本技术实施例还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序可存储在非暂态计算机可读存储介质上,所述计算机程序被处理器执行时,计算机能够执行上述各实施例所提供的数据处理方法的步骤,例如包括:
161.将待处理数据发送至各个队列中,所述待处理数据包括多条具有同一数据标识的消息;
162.在确定所述消息未按照预设顺序消费的情况下,将各个队列中未消费的消息发送至第一堆栈进行顺序调整,得到调整后的目标消息;
163.将所述目标消息发送至消费端进行消费。
164.另一方面,本技术实施例还提供一种处理器可读存储介质,所述处理器可读存储介质存储有计算机程序,所述计算机程序用于使处理器执行上述各实施例提供的方法的步骤,例如包括:
165.将待处理数据发送至各个队列中,所述待处理数据包括多条具有同一数据标识的消息;
166.在确定所述消息未按照预设顺序消费的情况下,将各个队列中未消费的消息发送至第一堆栈进行顺序调整,得到调整后的目标消息;
167.将所述目标消息发送至消费端进行消费。
168.所述处理器可读存储介质可以是处理器能够存取的任何可用介质或数据存储设备,包括但不限于磁性存储器(例如软盘、硬盘、磁带、磁光盘(mo)等)、光学存储器(例如cd、dvd、bd、hvd等)、以及半导体存储器(例如rom、eprom、eeprom、非易失性存储器(nand flash)、固态硬盘(ssd))等。
169.以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
170.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
171.最后应说明的是:以上实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的精神和范围。
技术特征:
1.一种数据处理方法,其特征在于,包括:将待处理数据发送至各个队列中,所述待处理数据包括多条具有同一数据标识的消息;在确定所述消息未按照预设顺序消费的情况下,将各个队列中未消费的消息发送至第一堆栈进行顺序调整,得到调整后的目标消息;将所述目标消息发送至消费端进行消费。2.根据权利要求1所述的数据处理方法,其特征在于,所述消息未按照预设顺序消费通过如下方式确定:在所述各个队列的尾端检测所述消息对应的顺序编号;在所述消息对应的顺序编号与目标序号不匹配的情况下,确定所述消息未按照预设顺序消费。3.根据权利要求1所述的数据处理方法,其特征在于,在所述将各个队列中未消费的消息发送至第一堆栈进行顺序调整之前,还包括:在未检测到所述未消费的消息的情况下,基于所述数据标识,确定所述未消费的消息对应的第二堆栈;基于所述消息对应的顺序编号,将所述第二堆栈中所述未消费的消息发送至所述第一堆栈。4.根据权利要求1-3任一项所述的数据处理方法,其特征在于,所述方法还包括:在所述各个队列的尾端检测所述消息对应的顺序编号;在所述消息对应的顺序编号与目标序号匹配的情况下,消费所述消息,并更新所述目标序号。5.根据权利要求1-3任一项所述的数据处理方法,其特征在于,在所述将各个队列中未消费的消息发送至第一堆栈进行顺序调整之前,还包括:基于所述消息对应的顺序编号和队列索引,确定所述未消费的消息,所述队列索引用于指示所述未消费的消息所在的队列。6.根据权利要求1-3任一项所述的数据处理方法,其特征在于,所述将待处理数据发送至各个队列中,包括:基于bkdr哈希算法,将所述待处理数据分别发送至各个队列中。7.根据权利要求5所述的数据处理方法,其特征在于,所述未消费的消息为前序编号对应的消息,所述前序编号为所述消息对应的顺序编号之前的编号。8.一种数据处理装置,其特征在于,包括:发送模块,用于将待处理数据发送至各个队列中,所述待处理数据包括多条具有同一数据标识的消息;调整模块,用于在确定所述消息未按照预设顺序消费的情况下,将各个队列中未消费的消息发送至第一堆栈进行顺序调整,得到调整后的目标消息;消费模块,用于将所述目标消息发送至消费端进行消费。9.一种电子设备,包括处理器和存储有计算机程序的存储器,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7任一项所述的数据处理方法。10.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执
行时实现权利要求1至7任一项所述的数据处理方法。
技术总结
本申请涉及数据处理技术领域,提供一种数据处理方法、装置、电子设备及程序产品。所述方法包括:将待处理数据发送至各个队列中,所述待处理数据包括多条具有同一数据标识的消息;在确定所述消息未按照预设顺序消费的情况下,将各个队列中未消费的消息发送至第一堆栈进行顺序调整,得到调整后的目标消息;将所述目标消息发送至消费端进行消费。本申请实施例提供的数据处理方法、装置、电子设备及程序产品,可以在保证队列负载均衡的情况下,保证数据处理的顺序性。理的顺序性。理的顺序性。
技术研发人员:李睿 王娟 苏士伟 田苗 陈劼
受保护的技术使用者:中国移动通信集团有限公司
技术研发日:2022.03.14
技术公布日:2023/9/22
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
航空商城 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/