本申请涉及数据处理技术领域,具体而言,涉及一种数据处理方法、装置、电子设备和计算机可读存储介质。
背景技术:
目前生产者与消费者的数据处理模式被业务系统广泛应用,基于生产者和消费者模式的数据处理需求,产生了各种类型的消息队列协议,例如,rabbitmq、rocketmq、activemq、kafka、zeromq、metamq,以及一些基于数据库、redis、zookeeper等实现的消息队列。但是上述消息队列都是基于先进先出的规则,实现按顺序处理消息,以及按顺序消费消息。但是此种模式消息处理的效率相对低,无法满足一些更复杂场景的需求。
技术实现要素:
本申请的目的在于提供一种数据处理方法、装置、电子设备和计算机可读存储介质,能够解决数据处理效率低的问题。
第一方面,本发明提供一种数据处理方法,包括:
将当前消息写入对应的数据存储表中;
使用一个处理线程或多个处理线程将所述数据存储表中的消息进行处理,并将处理得到的已处理数据存入所述数据存储表中;
通过消费线程按照身份标识的优先级从高到低,从所述数据存储表获取已处理数据;
在所述消费线程读取成功所述已处理数据后,将读取成功的所述已处理数据标记成已消费数据。
在可选的实施方式中,所述将当前消息写入对应的数据存储表中,包括:
根据当前消息的当前消息身份标识确定出所述当前消息所属的第一消息分区;
将所述当前消息身份标识写入所述第一身份标识表中所述第一消息分区对应的位置;
将所述当前消息写入所述第一消息分区对应的数据存储表中。
在上述实施方式中,通过将各条消息按照各条消息的身份标识进行分区存储,可以方便在数据处理阶段能够基于分区,将数据进行并发处理,以提高数据处理的效率。
在可选的实施方式中,所述使用一个处理线程或多个处理线程将所述数据存储表中的消息进行处理,并将处理得到的已处理数据存入所述数据存储表中,包括:
从所述第一身份标识表中获取待处理身份标识;
根据所述待处理身份标识,确定出所述待处理身份标识对应的第二消息分区;
从所述数据存储表中所述第二消息分区对应的位置中获取所述待处理身份标识对应的待处理消息;
对所述待处理消息按照设定处理逻辑进行处理;
若对所述待处理数据处理成功,则基于所述待处理身份标识对第二身份标识表进行更新,并将所述待处理身份标识对应的已处理数据写入所述第二消息分区对应的数据存储表中。
在上述实施方式中,通过建立两个身份标识表第一身份标识表和第二身份标识表,可实现将不同状态的数据的身份标识能够分表存储,能够实现有序数据处理,以及数据消费,减少重复处理数据,或数据未被处理就进入消费阶段的情况。
在可选的实施方式中,所述通过消费线程按照身份标识的优先级从高到低,从所述数据存储表获取已处理数据,包括:
使用目标消息分区对应的目标消费线程,从所述第二身份标识表中获取所述目标消息分区的当前身份标识;
根据所述当前身份标识从所述数据存储表中的所述目标消息分区对应的位置确定出所述目标消息分区的所有已处理数据;
确定出所述目标消息分区的所有已消费数据;
根据所述目标消息分区的所有已处理数据,确定出所述目标消息分区的所有已处理数据中优先级最高的身份标识;
根据所述目标消息分区的所有已消费数据、所述目标消息分区的当前身份标识以及所述目标消息分区的所有已处理数据中优先级最高的身份标识,确定出所述目标消息分区中的可消费数据;
从所述目标消息分区对应的数据存储表中,按照身份标识的优先级从高到低获取所述可消费数据。
在上述实施方式中,通过对已消费数据、已处理数据的确定,可以实现有序消费的同时,还能够减少重复消费的情况,提高数据处理消费的准确性。
在可选的实施方式中,所述方法还包括:
若对所述待处理数据处理失败,则将所述待处理身份标识写入所述第一身份标识表。
在上述实施方式中,通过对数据处理成功与否进行识别,以及针对数据处理成功的数据的身份标识,以及数据处理失败的数据的身份标识采用不同的处理流程,从而可以提高数据处理的总体的成功率。
在可选的实施方式中,所述方法还包括:
若一处理线程从所述第一身份标识表中第三消息分区对应的子表中未获取到身份标识,则判断所述第二身份标识表中第三消息分区对应的身份标识中记录的身份标识是否为已处理数据中可消费数据的优先级最低的身份标识;
若所述第二身份标识表中第三消息分区对应的身份标识中记录的身份标识不是已处理数据中可消费数据的最大身份标识,则将所述第二身份标识表中第三消息分区对应的身份标识更新为所述可消费数据中身份标识优先级最高的身份标识最大身份标识。
在上述实施方式中,动态地修改存储在第三消息分区的身份标识,从而可以方便后续的数据消费阶段能够消费更多的已经处理的数据,以提高数据消费的效率。
在可选的实施方式中,所述在所述消费线程读取成功所述已处理数据后,将读取成功的所述已处理数据标记为已消费数据,包括:
在所述消费线程读取成功所述已处理数据后,根据当前获取的已处理数据的身份标识对第三身份标识表进行更新,所述第三身份标识表中的身份标识对应的数据为已消费数据;
将所述第三身份标识表中记录的身份标识对应的已消费数据从所述数据存储表中删除。
在上述实施方式中,将消费完成的数据动态清除,可以减少数据占用空间。
第二方面,本发明提供一种数据处理装置,包括:
第一写入模块,用于将当前消息写入对应的数据存储表中;
处理模块,用于使用一个处理线程或多个处理线程将所述数据存储表中的消息进行处理,并将处理得到的已处理数据存入所述数据存储表中;
获取模块,用于通过消费线程按照身份标识的优先级从高到低,从所述数据存储表获取已处理数据;
标记模块,用于在所述消费线程读取成功所述已处理数据后,将读取成功的所述已处理数据标记成已消费数据。
第三方面,本发明提供一种电子设备,包括:处理器、存储器,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述机器可读指令被所述处理器执行时执行如前述实施方式任一所述的方法的步骤。
第四方面,本发明提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如前述实施方式任一所述的方法的步骤。
本申请实施例的有益效果是:通过将数据的处理和数据的消费分成两个阶段,在数据处理阶段可以采用高并发的处理方式,以提高数据处理的消息;在数据消费阶段可以按照身份标识的优先级从高到低,顺序获取数据存储表中的数据进行消费,从而可以保持数据的顺序消费。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的电子设备的方框示意图。
图2为本申请实施例提供的数据处理方法的流程图。
图3为本申请实施例提供的数据处理方法的步骤202的详细流程图。
图4为本申请实施例提供的数据处理方法的步骤204的详细流程图。
图5为本申请实施例提供的数据处理方法的步骤206的详细流程图。
图6为本申请实施例提供的数据处理装置的功能模块示意图。
具体实施方式
下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行描述。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本申请的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
目前的消息队列rabbitmq、rocketmq、activemq、kafka、zeromq、metamq等,这些队列都是秉持着一种先进先出fifo的消息处理方式。上述的消息队列不能处理以下场景:1)生产者把消息顺序写入消息队列;2)并发处理在队列中的消息;3)消费者顺序消费队列中的消息并有序使用。现有的做法通常是将消息完全处理完成之后,消费者端单线程消费消息。
基于此,本申请提供的一种数据处理方法、装置、电子设备和计算机可读存储介质,可以实现现有的消息队列不能够实现的上述场景。下面通过几个实施例描述。
实施例一
为便于对本实施例进行理解,首先对执行本申请实施例所公开的数据处理方法的电子设备进行详细介绍。
如图1所示,是电子设备的方框示意图。电子设备100可以包括存储器111、处理器113、输入输出单元115。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对电子设备100的结构造成限定。例如,电子设备100还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
上述的存储器111、处理器113、输入输出单元115各元件相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。上述的处理器113用于执行存储器中存储的可执行模块。
其中,存储器111可以是,但不限于,随机存取存储器(randomaccessmemory,简称ram),只读存储器(readonlymemory,简称rom),可编程只读存储器(programmableread-onlymemory,简称prom),可擦除只读存储器(erasableprogrammableread-onlymemory,简称eprom),电可擦除只读存储器(electricerasableprogrammableread-onlymemory,简称eeprom)等。其中,存储器111用于存储程序,所述处理器113在接收到执行指令后,执行所述程序,本申请实施例任一实施例揭示的过程定义的电子设备100所执行的方法可以应用于处理器113中,或者由处理器113实现。
上述的处理器113可能是一种集成电路芯片,具有信号的处理能力。上述的处理器113可以是通用处理器,包括中央处理器(centralprocessingunit,简称cpu)、网络处理器(networkprocessor,简称np)等;还可以是数字信号处理器(digitalsignalprocessor,简称dsp)、专用集成电路(applicationspecificintegratedcircuit,简称asic)、现场可编程门阵列(fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
上述的输入输出单元115用于提供给用户输入数据。所述输入输出单元115可以是,但不限于,鼠标和键盘等。
本实施例中的电子设备100可以用于执行本申请实施例提供的各个方法中的各个步骤。下面通过几个实施例详细描述数据处理方法的实现过程。
实施例二
请参阅图2,是本申请实施例提供的数据处理方法的流程图。下面将对图2所示的具体流程进行详细阐述。
步骤202,将当前消息写入对应的数据存储表中。
可选地,在步骤202之前还可以包括:步骤201,先创建数据处理和数据消费过程中所需使用到的数据存储表。
示例性地,该数据存储表可以是一队列。
示例性地,可以在远程字典服务(redis)中写入队列的配置信息到队列分区配置表。本实施例中,创建的队列可以用来存储数据处理过程中所涉及的消息。例如,可以使用map(key,value)存储的方式存储数据处理过程中所涉及的消息。
在一个实例中,使用方法“hsetqueue[name][np]”创建所需的队列。其中,name表示创建的队列名,np表示队列所包含的分区数。
可选地,在进行数据处理和数据消费之前还可以对全局计数器进行初始化,以方便使用该全局计数器为需要写入队列的消息生产身份标识。在一个实例中,可以使用方法“set[name]0”初始化全局计数器。
本实施中,如图3所示,步骤202可以包括以下步骤2021至步骤2023。
步骤2021,根据当前消息的当前消息身份标识确定出所述当前消息所属的第一消息分区。
可选地,消息的身份标识可以采用long型数据记录。
可选地,该当前消息身份标识可以是使用全局计数器生成的一个身份标识。示例性地,可以使用方法“incr[队列名]”使全局计数器加一,以使消息的身份标识按顺序递增。
可选地,该当前消息身份标识也可以是生产者在生成当前消息时,确定的当前身份标识。
若身份标识按顺序递增的long型数据,则可以将身份标识取模确定出该当前消息所属的第一消息分区。例如,当前的分区数为m,则将身份标识与m进行取模运算,可以理解为将身份标识除以m,以获取余数,余数则为对应的分区位序。例如,当前身份标识能够被m整除,则当前消息对应的分区为第m个分区,再例如,当前身份标识和m进行取模运算,余数为三,则当前消息对应的分区为第三个分区。
步骤2022,将所述当前消息身份标识写入所述第一身份标识表中所述第一消息分区对应的位置。
本实施例中,该第一身份标识表用于存储需要处理的消息的身份标识。
本实施例中,该第一身份标识表中包括各个消息分区对应的存储位置。
在一个实例中,可以使用方法lpush将当前消息身份标识写入所述第一身份标识表中所述第一消息分区对应的位置。
可选地,该第一身份标识表中可以包括多个子表,每个子表用于存储一个消息分区对应消息的身份标识。
步骤2023,将所述当前消息写入所述第一消息分区对应的数据存储表中。
本实施例中,该数据存储表中可以对应多个分区,每个分区用于存储该分区对应的生产者生产的消息,和基于生产者生产的消息得到的已处理数据。
以redis为例,可以使用方法“hset[name][pn][id][value]”将消息写入数据存储表。其中,pn表示分区编号,id表示当前消息的身份标识,value表示当前消息的值。
本实施例中,该数据存储表则可以为步骤201初始化创建的数据存储表。
步骤204,使用一个处理线程或多个处理线程将所述数据存储表中的消息进行处理,并将处理得到的已处理数据存入所述数据存储表中。
本实施例中,如图4所示,步骤204可以包括步骤2041至步骤2046。
步骤2041,从所述第一身份标识表中获取待处理身份标识。
针对任意一个处理线程,从第一身份标识表中获取待处理身份标识。
可选地,每个线程采用轮询的方式,从所述第一身份标识表中各个消息分区对应的子表中获取需要处理的消息对应的待处理身份标识。
在一个实例中,可以使用方法rpop从第一身份标识表中各个消息分区对应的子表中获取待处理身份标识。
步骤2042,根据所述待处理身份标识,确定出所述待处理身份标识对应的第二消息分区。
本实施例中,确定第二消息分区的方式与确定第一消息分区的方式相同,采用对待处理身份标识取模的方式确定出待处理身份标识对应的第二消息分区。
步骤2043,从所述数据存储表中所述第二消息分区对应的位置中获取所述待处理身份标识对应的待处理消息。
步骤2044,对所述待处理消息按照设定处理逻辑进行处理。
针对不同的应用场景,对待处理消息的处理逻辑可以不同。例如,针对计算机的功能的检测,该待处理消息可以是获取计算机的运行参数的消息,则可以基于该待处理消息的处理逻辑可以是获取计算机的当前运行参数。再例如,需要将写入的消息顺序存入数据库中,则该处理逻辑可以是将待处理消息转换成sql语句,拼接sql语句。在此不再赘述其它消息的处理逻辑。
步骤2045,若对所述待处理数据处理成功,则基于所述待处理身份标识对第二身份标识表进行更新,并将所述待处理身份标识对应的已处理数据写入所述第二消息分区对应的数据存储表中。
示例性地,该已处理数据可以是对待处理消息进行对应的处理逻辑处理后得到的数据。
上述第二身份标识表可以用于存储各个消息分区中已处理数据中身份标识优先级最低的身份标识。
本实施例中,该第二身份标识表中也可以包括各个消息分区对应的存储位置。
本实施例中,身份标识的优先级越高,则在消费阶段可以优先消费该身份标识对应的已处理数据。
示例性地,身份标识的优先级可以通过身份标识的大小确定,身份标识的值越小,该身份标识的优先级越高。例如,身份标识为long型,身份标识的数值越小,优先级越高。
本实施例中,针对任一指定消息分区而言,上述的第二身份标识表中的指定消息分区对应的子表存储的身份标识为指定身份标识。则该指定消息分区中所有优先级比指定身份标识优先级高的身份标识对应的已处理数据可以被消费。以身份标识为long型数据为例,该第二身份标识表中的指定消息分区对应的身份标识为n1,则表示该指定消息分区中所有身份标识不大于n1的消息都已经被处理成功,数据消费阶段可以指定消息分区中所有身份标识不大于n1的数据存储表中的已处理数据可以按顺序消费。
为了避免数据处理失败导致后续的消费阶段消费的数据为正确的数据,且处理失败的消息也能够再次被处理,因此,可再次参阅图4所示,本实施例中的方法还可以包括:步骤2046,若对所述待处理数据处理失败,则将所述待处理身份标识写入所述第一身份标识表。
示例性地,该第一身份标识表中的身份标识对应的数据还可以再次被处理线程获取,从而被处理线程处理。
上述的步骤2041至步骤2046描述了一个线程对消息处理的流程。本实施例中,可以使用多个线程并发处理步骤2041至步骤2046的过程,从而实现高并发处理数据,提高数据处理的效率。
本实施例中,在步骤206之前,还可能存在处理线程未能从第一身份标识表中获得身份标识。
本实施例中的数据处理方法还可以包括以下步骤2051和步骤2052。
步骤2051,若一处理线程从所述第一身份标识表中第三消息分区对应的子表中未获取到身份标识,则判断所述第二身份标识表中第三消息分区对应的身份标识中记录的身份标识是否为已处理数据中可消费数据的优先级最低的身份标识。
可选地,在判断第二身份标识表中第三消息分区对应的身份标识之前,还可以对数据存储表中的第三消息分区进行遍历,以得到该第三消息分区对应的所有身份标识,根据该第三消息分区的所有身份标识判断所述第二身份标识表中第三消息分区对应的身份标识中记录的身份标识是否为已处理数据中可消费数据的优先级最低的身份标识。
本实施例中,上述的可消费数据可以为已处理数据,且可消费数据的身份标识为在该第三消息分区中优先级连续的身份标识。
步骤2052,若所述第二身份标识表中第三消息分区对应的身份标识中记录的身份标识不是已处理数据中可消费数据的最大身份标识,则将所述第二身份标识表中第三消息分区对应的身份标识更新为所述可消费数据中身份标识优先级最高的身份标识最大身份标识。
步骤206,通过消费线程按照身份标识的优先级从高到低,从所述数据存储表获取已处理数据。
在一实施方式中,如图5所示,步骤206可以包括以下步骤2061至步骤2066。
步骤2061,使用目标消息分区对应的目标消费线程,从所述第二身份标识表中获取所述目标消息分区的当前身份标识。
本实施例中,每一个消息分区可以绑定一个消费线程,该消费线程可以用于获取该消费线程绑定的消费分区中的已处理数据。
步骤2062,根据所述当前身份标识从所述数据存储表中的所述目标消息分区对应的位置确定出所述目标消息分区的所有已处理数据。
在一种实施方式中,可以通过获取数据存储表中的所述目标消息分区对应的位置中的所有数据,以确定出该目标消息分区中已处理数据。
以身份标识为long型数据为例,该目标消息分区中所有已处理数据中不小于最小身份标识、且不大于前身份标识的身份标识对应的数据为可消费的数据。
步骤2063,确定出所述目标消息分区的所有已消费数据。
可选地,可以通过第三身份标识表中目标消息分区对应的身份标识确定出目标消息分区的所有已消费数据。
本实施例中,该第三身份标识表中也包括各个消息分区对应的存储位置。
示例性地,该第三身份标识表用于存储各个消息分区中已消费数据中的身份标识的优先级最低的身份标识。以身份标识为long型数据为例,该第三身份标识表中用于存储各个消息分区的已消费数据中身份标识最大的身份标识。
步骤2064,根据所述目标消息分区的所有已处理数据,确定出所述目标消息分区的所有已处理数据中优先级最高的身份标识。
以身份标识为long型数据为例,该目标消息分区的所有已处理数据中优先级最高的身份标识为该目标消息分区的所有已处理数据中身份标识最小的身份标识。
步骤2065,根据所述目标消息分区的所有已消费数据、所述目标消息分区的当前身份标识以及所述目标消息分区的所有已处理数据中优先级最高的身份标识,确定出所述目标消息分区中的可消费数据。
以身份标识为long型数据为例,确定出大于已消费数据中身份标识最大的身份标识,且不大于该目标消息分区的当前身份标识之间的身份标识对应的已处理数据为该目标消息分区中可消费数据。
步骤2066,从所述目标消息分区对应的数据存储表中,按照身份标识的优先级从高到低获取所述可消费数据。
本实施例中,通过从数据存储表中获取已处理数据,则可实现数据的消费。
步骤208,在所述消费线程读取成功所述已处理数据后,将读取成功的所述已处理数据标记成已消费数据。
在一种实施方式中,可以将已消费数据的身份标识存入一表中,以表示已处理数据已经被消费。
示例性地,步骤208可以包括步骤2081和步骤2082。
步骤2081,在所述消费线程读取成功所述已处理数据后,根据当前获取的已处理数据的身份标识对第三身份标识表进行更新。
其中,第三身份标识表中的身份标识对应的数据为已消费数据。
可选地,该第三身份标识表中可以仅存储各消息分区最新消费的数据的身份标识。可以理解为,该第三身份标识表中可以仅存储各消息分区中已消费数据中优先级最低的身份标识。以身份标识为long型数据为例,该第三身份标识表中可以仅存储各消息分区已消费数据对应的身份标识中最大的身份标识。
可选地,该第三身份标识也可以存储各消息分区所有已消费数据的身份标识。
步骤2082,将所述第三身份标识表中记录的身份标识对应的已消费数据从所述数据存储表中删除。
在一种实施方式中,可以在消费线程每消费一项数据后,删除数据存储表中的已消费数据。
在另一种实施方式中,可以每隔指定时间段后,根据该第三身份标识表中记录的身份标识,删除数据存储表中各消息分区中的已消费数据。
示例性地,该第三身份标识表中记录了所有已消费数据的身份标识时,则可以根据第三身份标识表中记录的身份标识删除数据存储表中所有已消费数据。
示例性地,该第三身份标识表中记录了已消费数据中优先级最低的身份标识时,则可以根据第三身份标识表中记录的身份标识,确定出所有优先级比第三身份标识表中记录的身份标识优先级高的身份标识,根据确定出的身份标识删除数据存储表中所有已消费数据。
在本申请实施例提供的数据处理方法中,通过将数据的处理和数据的消费分成两个阶段,在数据处理阶段可以采用高并发的处理方式,以提高数据处理的消息;在数据消费阶段可以按照身份标识的优先级从高到低,顺序获取数据存储表中的数据进行消费,从而可以保持数据的顺序消费。
本申请实施例提供的数据处理方法,通过支持了中间的数据处理过程采用高并发处理,可以提高需要严格要求数据消费顺序的场景下的数据处理效率。例如,涉及增删改的数据,对某一条的数据增删改都必须要严格顺序执行,否则就会导致数据错乱;生产者按照顺序传入的消息,需要写入到最终的数据库中,需要在中间的数据处理过程中需要把消息转换成sql语句,拼接sql语句的过程会消耗大量的时间,而中间的拼接sql语句的过程可以使用高并发处理,在这种情况下,既能够保证拼装的sql顺序处理,又能够大大提高吞吐量。
实施例三
基于同一申请构思,本申请实施例中还提供了与数据处理方法对应的数据处理装置,由于本申请实施例中的装置解决问题的原理与前述的数据处理方法实施例相似,因此本实施例中的装置的实施可以参见上述方法的实施例中的描述,重复之处不再赘述。
请参阅图6,是本申请实施例提供的数据处理装置的功能模块示意图。本实施例中的数据处理装置中的各个模块用于执行上述方法实施例中的各个步骤。数据处理装置包括:第一写入模块301、处理模块302、获取模块303以及标记模块304;其中,
第一写入模块301,用于将当前消息写入对应的数据存储表中;
处理模块302,用于使用一个处理线程或多个处理线程将所述数据存储表中的消息进行处理,并将处理得到的已处理数据存入所述数据存储表中;
获取模块303,用于通过消费线程按照身份标识的优先级从高到低,从所述数据存储表获取已处理数据;
标记模块304,用于在所述消费线程读取成功所述已处理数据后,将读取成功的所述已处理数据标记成已消费数据。
一种可能的实施方式中,第一写入模块301,用于:
根据当前消息的当前消息身份标识确定出所述当前消息所属的第一消息分区;
将所述当前消息身份标识写入所述第一身份标识表中所述第一消息分区对应的位置;
将所述当前消息写入所述第一消息分区对应的数据存储表中。
一种可能的实施方式中,处理模块302,用于:
从所述第一身份标识表中获取待处理身份标识;
根据所述待处理身份标识,确定出所述待处理身份标识对应的第二消息分区;
从所述数据存储表中所述第二消息分区对应的位置中获取所述待处理身份标识对应的待处理消息;
对所述待处理消息按照设定处理逻辑进行处理;
若对所述待处理数据处理成功,则基于所述待处理身份标识对第二身份标识表进行更新,并将所述待处理身份标识对应的已处理数据写入所述第二消息分区对应的数据存储表中。
一种可能的实施方式中,获取模块303,用于:
使用目标消息分区对应的目标消费线程,从所述第二身份标识表中获取所述目标消息分区的当前身份标识;
根据所述当前身份标识从所述数据存储表中的所述目标消息分区对应的位置确定出所述目标消息分区的所有已处理数据;
确定出所述目标消息分区的所有已消费数据;
根据所述目标消息分区的所有已处理数据,确定出所述目标消息分区的所有已处理数据中优先级最高的身份标识;
根据所述目标消息分区的所有已消费数据、所述目标消息分区的当前身份标识以及所述目标消息分区的所有已处理数据中优先级最高的身份标识,确定出所述目标消息分区中的可消费数据;
从所述目标消息分区对应的数据存储表中,按照身份标识的优先级从高到低获取所述可消费数据。
一种可能的实施方式中,本申请实施例提供的数据处理装置还可以包括:第二写入模块,用于若对所述待处理数据处理失败,则将所述待处理身份标识写入所述第一身份标识表。
一种可能的实施方式中,本申请实施例提供的数据处理装置还可以包括:
判断模块,用于若一处理线程从所述第一身份标识表中第三消息分区对应的子表中未获取到身份标识,则判断所述第二身份标识表中第三消息分区对应的身份标识中记录的身份标识是否为已处理数据中可消费数据的优先级最低的身份标识;
更新模块,用于若所述第二身份标识表中第三消息分区对应的身份标识中记录的身份标识不是已处理数据中可消费数据的最大身份标识,则将所述第二身份标识表中第三消息分区对应的身份标识更新为所述可消费数据中身份标识优先级最高的身份标识最大身份标识。
一种可能的实施方式中,标记模块304,用于:
在所述消费线程读取成功所述已处理数据后,根据当前获取的已处理数据的身份标识对第三身份标识表进行更新,所述第三身份标识表中的身份标识对应的数据为已消费数据;
将所述第三身份标识表中记录的身份标识对应的已消费数据从所述数据存储表中删除。
此外,本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的数据处理方法的步骤。
本申请实施例所提供的数据处理方法的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行上述方法实施例中所述的数据处理方法的步骤,具体可参见上述方法实施例,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。