CN112817995B - 数据处理方法和装置、电子设备及存储介质 - Google Patents
数据处理方法和装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN112817995B CN112817995B CN202110198581.4A CN202110198581A CN112817995B CN 112817995 B CN112817995 B CN 112817995B CN 202110198581 A CN202110198581 A CN 202110198581A CN 112817995 B CN112817995 B CN 112817995B
- Authority
- CN
- China
- Prior art keywords
- target data
- operation result
- version number
- response
- value
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2336—Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
- G06F16/2343—Locking methods, e.g. distributed locking or locking implementation details
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
Abstract
本申请公开了一种数据处理方法和装置、电子设备及存储介质,该方法包括:响应于接收到M个并发请求,并发执行M个并发请求对应的响应操作,M为正整数,并发请求用于请求对目标数据进行更新;响应于得到任意一个响应操作对应的操作结果,基于操作结果与第二版本号,对操作结果进行验证;其中,操作结果携带第一版本号,第一版本号为执行与操作结果相关联的响应操作之前,目标数据对应的版本号;第二版本号为目标数据当前对应的版本号;当验证通过时,更新目标数据,并更新目标数据对应的第二版本号。这样,能够在保证数据安全性的前提下,解决现有技术中分布式锁方案更新目标数据时存在的稳定性较差的问题。
Description
技术领域
本申请属于分布式锁技术领域,具体涉及一种数据处理方法和装置、电子设备及存储介质。
背景技术
现有的分布式锁,如ZooKeeper等,一般都是基于悲观锁思想对共享数据进行操作:为了避免分布式系统中同时接收到多个请求对同一数据进行修改,造成数据最终结果错误,往往需要先对数据进行加锁。例如,假设分布式系统中同时有多个请求需要变更某一条数据,这时,就需要对该数据进行加锁,只有解锁成功的请求才可以对该数据进行操作,其他请求需要等待该这个请求执行完操作后,才能继续获取锁并对数据进行操作。这样,当获得锁的请求对应的节点出现故障时,会导致其他处于等待状态的请求无法继续执行,从而使得分布式系统的稳定性较低。
发明内容
本申请实施例的目的是提供一种数据处理方法和装置、电子设备及存储介质,能够解决现有的分布式锁在获得锁的请求对应的节点出现故障时,其他处于等待状态的请求无法继续执行,导致分布式系统的稳定性较低的问题。
为了解决上述技术问题,本申请是这样实现的:
第一方面,本申请实施例提供了一种数据处理方法,该方法包括:
响应于接收到M个并发请求,并发执行所述M个并发请求对应的响应操作,M为正整数,所述并发请求用于请求对目标数据进行更新;
响应于得到任意一个响应操作对应的操作结果,基于所述操作结果与第二版本号,对所述操作结果进行验证;其中,所述操作结果携带第一版本号,所述第一版本号为执行与所述操作结果相关联的响应操作之前,所述目标数据对应的版本号;所述第二版本号为所述目标数据当前对应的版本号;
当验证通过时,更新所述目标数据,并更新所述目标数据对应的所述第二版本号。
进一步地,在所述响应于接收到M个并发请求,并发执行所述M个并发请求对应的响应操作之后,所述方法还包括:
响应于同时接收到多个响应操作对应的多个操作结果,基于多个所述操作结果与第二版本号,依次对多个所述操作结果进行验证。
进一步地,所述基于所述操作结果与第二版本号,对所述操作结果进行验证,包括:
调用数据库服务对所述操作结果进行验证,其中,所述数据库服务用于根据预设数据库中的所述第二版本号对所述操作结果进行验证。
进一步地,所述基于所述操作结果与第二版本号,调用数据库服务对所述操作结果进行验证,包括:
获取所述预设数据库中所述目标数据的当前数值和所述第二版本号;
在第一数值与第二数值之间的关系满足所述目标数据的数据变化逻辑,且所述操作结果携带的第一版本号与所述第二版本号一致的情况下,判定所述操作结果验证通过;
在第一数值与第二数值之间的关系不满足所述目标数据的数据变化逻辑,和/或,所述操作结果携带的第一版本号与所述第二版本号不一致的情况下,判定所述操作结果验证失败;
其中,所述第一数值为所述操作结果对应的数值,所述第二数值为所述目标数据的当前数值。
进一步地,所述目标数据的数据变化逻辑,包括:
在所述目标数据为递增式更新的情况下,所述操作结果对应的数值大于所述目标数据的当前数值;或者,
在所述目标数据为递减式更新的情况下,所述操作结果对应的数值小于所述目标数据的当前数值,且所述操作结果对应的数值处于所述目标数据所允许的修改范围内,其中,所述修改范围为所述目标数据允许达到的最小值与最大值之间的取值范围。
进一步地,所述方法还包括:
在所述操作结果验证失败,且所述目标数据的当前数值处于所述修改范围内的情况下,重新执行所述操作结果对应的并发请求的响应操作;或者,
在所述操作结果验证失败,且所述目标数据的当前数值超出所述修改范围的情况下,停止执行所述操作结果对应的并发请求的响应操作。
进一步地,所述并发执行所述M个并发请求对应的响应操作,包括:
基于预设的N个逻辑核,并发执行所述M个并发请求对应的响应操作,其中,N为正整数,所述N个逻辑核用于在M大于或等于N的情况下,并发执行N个并发请求对应的响应操作,以及,在M小于N的情况下,并发执行M个并发请求对应的响应操作。
进一步地,在所述当验证通过时,更新所述目标数据,并更新所述目标数据对应的所述第二版本号之后,还包括:
向客户端发送响应消息,以使所述客户端基于所述响应消息,显示更新后的所述目标数据,所述客户端为发送与所述操作结果相关联的并发请求的客户端,所述响应消息携带有更新后的所述目标数据。
进一步地,所述目标数据包括如下至少一项:
与时间戳相关的单号、商品剩余量。
第二方面,本申请实施例还提供了一种数据处理装置,所述装置包括:
执行模块,用于响应于接收到M个并发请求,并发执行所述M个并发请求对应的响应操作,M为正整数,所述并发请求用于请求对目标数据进行更新;
第一验证模块,用于响应于得到任意一个响应操作对应的操作结果,基于所述操作结果与第二版本号,对所述操作结果进行验证;其中,所述操作结果携带第一版本号,所述第一版本号为执行与所述操作结果相关联的响应操作之前,所述目标数据对应的版本号;所述第二版本号为所述目标数据当前对应的版本号;
更新模块,用于当验证通过时,更新所述目标数据,并更新所述目标数据对应的所述第二版本号。
进一步地,所述装置还包括:
第二验证模块,用于响应于同时接收到多个响应操作对应的多个操作结果,基于多个所述操作结果与第二版本号,依次对多个所述操作结果进行验证。
进一步地,所述第一验证模块包括:
验证子模块,用于调用数据库服务对所述操作结果进行验证,其中,所述数据库服务用于根据预设数据库中的所述第二版本号对所述操作结果进行验证。
进一步地,所述第一验证模块还包括:
获取子模块,用于获取预设数据库中所述目标数据的当前数值和所述第二版本号;
第一判定子模块,用于在第一数值与第二数值之间的关系满足所述目标数据的数据变化逻辑,且所述操作结果携带的第一版本号与所述第二版本号一致的情况下,判定所述操作结果验证通过;
第二判定子模块,用于在第一数值与第二数值之间的关系不满足所述目标数据的数据变化逻辑,和/或,所述操作结果携带的第一版本号与所述第二版本号不一致的情况下,判定所述操作结果验证失败;
其中,所述第一数值为所述操作结果对应的数值,所述第二数值为所述目标数据的当前数值。
进一步地,所述目标数据的数据变化逻辑,包括:
在所述目标数据为递增式更新的情况下,所述第一数值大于所述第二数值;或者,
在所述目标数据为递减式更新的情况下,所述第一数值小于所述第二数值,且所述第一数值处于所述目标数据所允许的修改范围内,其中,所述修改范围为所述目标数据允许达到的最小值与最大值之间的取值范围。
进一步地,所述装置还包括:
重新执行模块,用于在所述操作结果验证失败,且所述目标数据的当前数值处于所述修改范围内的情况下,重新执行所述操作结果对应的并发请求的响应操作;或者,
停止执行模块,用于在所述操作结果验证失败,且所述目标数据的当前数值超出所述修改范围的情况下,停止执行所述操作结果对应的并发请求的响应操作。
进一步地,所述执行模块具体用于:
基于预设的N个逻辑核,并发执行所述M个并发请求对应的响应操作,其中,N为正整数,所述N个逻辑核用于在M大于或等于N的情况下,并发执行N个并发请求对应的响应操作,以及,在M小于N的情况下,并发执行M个并发请求对应的响应操作。
进一步地,所述装置还包括:
发送模块,用于向客户端发送响应消息,以使所述客户端基于所述响应消息,显示更新后的所述目标数据,所述客户端为发送与所述操作结果相关联的并发请求的客户端,所述响应消息携带有更新后的所述目标数据。
进一步地,所述目标数据包括如下至少一项:
与时间戳相关的单号、商品剩余量。
第三方面,本申请实施例还提供了一种电子设备,该电子设备包括处理器、存储器及存储在所述存储器上并可在所述处理器上运行的程序或指令,所述程序或指令被所述处理器执行时实现如第一方面所述的方法的步骤。
第四方面,本申请实施例还提供了一种可读存储介质,所述可读存储介质上存储程序或指令,所述程序或指令被处理器执行时实现如第一方面所述的方法的步骤。
在本申请实施例中,响应于接收到M个并发请求,并发执行所述M个并发请求对应的响应操作,M为正整数,所述并发请求用于请求对目标数据进行更新;响应于得到任意一个响应操作对应的操作结果,基于所述操作结果与第二版本号,对所述操作结果进行验证;其中,所述操作结果携带第一版本号,所述第一版本号为执行与所述操作结果相关联的响应操作之前,所述目标数据对应的版本号;所述第二版本号为所述目标数据当前对应的版本号;当验证通过时,更新所述目标数据,并更新所述目标数据对应的所述第二版本号。通过这种方式,在接收到M个并发请求时,可以并发执行该M个并发请求的响应操作,区别于现有技术中对该M个并发请求逐个执行的方式,即便在分布式系统中的某一并发请求对应的节点出现故障,也不影响其他节点的并发请求的响应操作的执行,因而提高了分布式系统的稳定性;同时,通过操作结果携带的第一版本号与目标数据的第二版本号,对每个并发请求对应的操作结果进行验证,可以避免在同一时刻存在多个并发请求同时对目标数据进行更新,而可能出现的目标数据的更新结果出现错漏的情况,从而有利于提高目标数据的安全性。综上,本申请实施例所提供的技术方案能够在保证数据安全性的前提下,解决现有技术中分布式锁方案更新目标数据时存在的稳定性较差的问题。
附图说明
图1为本申请实施例提供的数据处理方法的流程图;
图2为本申请实施例提供的现有技术中并发请求的执行过程的示意图;
图3为本申请实施例提供的并发请求的执行过程的示意图;
图4为本申请实施例提供的数据处理装置的结构示意图;
图5为本申请实施例提供的电子设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请的说明书和权利要求书中的术语“第一”、“第二”等是用于区别类似的对象,而不用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施,且“第一”、“第二”等所区分的对象通常为一类,并不限定对象的个数,例如第一对象可以是一个,也可以是多个。此外,说明书以及权利要求中“和/或”表示所连接对象的至少其中之一,字符“/”,一般表示前后关联对象是一种“或”的关系。
下面结合附图,通过具体的实施例及其应用场景对本申请实施例提供的数据处理方法进行详细地说明。
本申请实施例提供的数据处理方法应用于分布式系统。在该分布式系统中包括多个节点,多个节点可以并发请求对系统中的目标数据进行更新,以实现多个节点并发对目标数据的修改。在实际应用过程中,本发明实施例涉及的数据处理方法的应用场景包括但不限于如下至少一种:与时间戳相关的单号生成场景、商品售卖场景(包括但不限于商品秒杀活动)、对共享文档进行编辑场景等等。
具体而言,以与时间戳相关的单号生成场景为例进行说明。分布式系统中,多个节点都可以分别调用生成单号的接口,生成与时间戳相关联的单号,示例性的一种实施例中,该单号可以是根据调用单号生成接口的当前时间戳确定得到。在该场景中,可能存在多个节点在同一时刻并发请求生成单号的情况,此时,由于单号与时间戳相关联,则可能会出现在同一时刻生成多个重复的单号的情况。
以商品售卖场景为例进行说明。在商品售卖场景中,尤其是商品秒杀活动场景中,经常会涉及到多个用户端在同一时刻并发购买同一商品的情况,此时,该商品的库存量(或称为商品剩余量)的记录就比较困难,可能会出现库存不准确以致多售出商品的情况。例如,在商品秒杀活动中,商品库存量只有30件,但由于秒杀活动,在同一时刻有多个用户端发起购买请求,可能会导致实际卖出去了40件商品的情况发生。
以对共享文档进行编辑的应用场景为例进行说明。应当理解,共享文档可以由多个用户进行编辑修改,这就可能存在多个用户在同一时刻并行对同一共享文档(或者同一共享文档中的同一个数据)进行编辑修改的情况。这种多方并行编辑同一共享文档的情况,也可能会存在共享文档(或文档内数据)的错误。
针对前述场景中存在的并行处理容易导致数据异常的问题,现有技术中都是通过分布式锁技术来解决的。如背景技术,现有的分布式锁,如ZooKeeper等,一般都是基于悲观锁思想对共享数据进行操作:为了避免分布式系统中同时接收到多个请求对同一数据进行修改,造成数据最终结果错误,往往需要先对数据进行加锁。例如,假设分布式系统中同时有多个请求需要变更某一条数据,这时,就需要对该数据进行加锁,只有解锁成功的请求才可以对该数据进行操作,其他请求需要等待该这个请求执行完操作后,才能继续获取锁并对数据进行操作。这样,当获得锁的请求对应的节点出现故障时,会导致其他处于等待状态的请求无法继续执行,从而使得分布式系统的稳定性较低。
针对现有技术存在的前述问题,本发明实施例提供如下设计思路:突破现有技术中的分布式锁的悲观锁思维,并发执行接收到的多个并发请求,所有并发请求不再排队等待,而是乐观地认为执行所有并发请求不会造成数据安全问题;当并发请求执行完后,再通过目标数据的版本号,判断每个并发请求对应的操作结果是否对目标数据造成安全问题,如果某一并发请求对应的操作结果未对目标数据造成安全问题,则根据该操作结果修改目标数据;反之,则重新执行该并发请求,直至该并发请求对应的操作结果不会对目标数据造成安全问题。
具体而言,该分布式系统中包括:服务器和至少一个客户端,服务器和客户端之间通信连接。服务器和客户端可以为分布式系统中的任一节点。客户端用于与用户交互,向服务器发送并发请求;服务器用于响应客户端发送的并发请求,执行并发请求对应的响应操作,并对响应操作的操作结果进行验证,最后在验证通过时,更新目标数据,同时向客户端返回响应消息。
参见图1,图1为本申请实施例提供的数据处理方法的流程图。如图1所示,该数据处理方法可应用于服务器,具体包括以下步骤:
步骤101、响应于接收到M个并发请求,并发执行M个并发请求对应的响应操作,M为正整数,并发请求用于请求对目标数据进行更新。
其中,上述M个并发请求是并发的,对同一目标数据进行更新的M个请求,如M个创建单号的请求、M个对同一商品的抢购请求,M个对同一共享文档的编辑请求等等。上述M个并发请求由M个客户端发起,服务器在接收到M个并发请求时,可以并发执行该M个并发请求对应的响应操作。需要说明的是,此处的并发执行是指服务器可以根据接收到的并发请求的先后顺序,以并行处理的方式,对接收到的并发请求进行响应,即并发执行并发请求对应的响应操作。假设在同一时刻接收到多个并发请求,则服务器可以同时对该多个并发请求对应的响应操作进行执行。
上述响应操作可以包括但不限于:服务器调用该并发请求对应的接口来对目标数据进行更新。例如,假设并发请求为创建单号的请求,则该响应操作为调用生成单号的接口生成新的单号;假设并发请求为对某一商品的抢购请求,则该响应操作为调用购买商品的接口对该商品下单,以实现对该商品的剩余数量更新。
具体地,参见图2和图3,图2为现有技术中并发请求的执行过程的示意图,图3为本申请实施例提供的并发请求的执行过程的示意图。
如图2所示,在现有技术的分布式系统中,服务器接收到多个并发请求如并发请求1、并发请求2、并发请求3,…,并发请求n时,需要将这多个并发请求加入至队列中,根据这多个并发请求在队列中的排序顺序依次对各个并发请求进行执行,这样,在并发请求1正在执行响应操作时,并发请求2需要在队列中等待,直到并发请求1执行完;在并发请求2正在执行响应操作时,并发请求3需要在队列中等待,直到并发请求2执行完;在并发请求3正在执行响应操作,并发请求4需要在队列中等待,直到并发请求3执行完,依次类推,依次对队列中的各个并发请求进行执行。因此,采用现有技术的并发请求的执行方式,执行完多个并发请求需要花费较长的等待时间,并且,如果当前正在执行的请求对应的节点出现故障时,会导致其他处于等待状态的请求无法继续执行,从而使得分布式系统的稳定性较低。
而在本申请实施例的分布式系统中,如图3所示,当某一分布式系统中接收到多个并发请求如并发请求1、并发请求2、并发请求3,…,并发请求n时,可以对这多个并发请求并发执行对应的响应操作。这样,不仅可以有效降低多个并发请求的等待时间,而且,即便当前正在执行的请求对应的节点出现故障时,也不会影响其他节点的并发请求对应的响应操作的执行,从而使得分布式系统的稳定性提升。
步骤102、响应于得到任意一个响应操作对应的操作结果,基于操作结果与第二版本号,对操作结果进行验证。
其中,上述操作结果携带第一版本号,该第一版本号为执行与该操作结果相关联的响应操作之前,目标数据对应的版本号。上述第二版本号为目标数据当前对应的版本号。
具体而言,服务器可以获取到目标数据当前对应的第二版本号,该第二版本号可以是存储在服务器的本地存储空间,也可以是存储在与服务器连接的数据库中。当服务器在执行对任意一个并发请求的响应操作时,需要将执行该响应操作之前目标数据对应的第一版本号与操作结果一起打包。当服务器在得到该操作结果后,可以根据该操作结果中携带的第一版本号,与目标数据当前对应的第二版本号进行比较,若第一版本号与第二版本号相匹配,则表示在执行该响应操作时,没有其他响应操作对目标数据进行修改,目标数据没有安全问题,此时,该操作结果验证通过。否则,该操作结果验证失败,此时,该操作结果对应的并发请求的发起节点,可以重新执行该并发请求对应的响应操作,具体在下文中进行阐述。
例如,在与时间戳相关的单号生成场景中,假设当前目标数据对应的第二版本号为10,若某一节点调用单号生成接口,生成单号之前,服务器获得的目标数据对应的第一版本号也为10,则表示第一版本号与第二版本号相匹配,该操作结果验证通过;若某一节点调用单号生成接口,生成单号之前,服务器获得的目标数据对应的第一版本号不是10,则表示第一版本号与第二版本号不匹配,该操作结果验证失败。
步骤103、当验证通过时,更新目标数据,并更新目标数据对应的第二版本号。
在操作结果验证通过的情况下,服务器可以基于该操作结果对目标数据进行更新,从而实现对目标数据的修改。与此同时,服务器还需要对目标数据的第二版本号进行更新,方便服务器对后续得到的操作结果进行验证。
为方便理解,以下以商品售卖场景(包括但不限于商品秒杀活动)的场景为例进行说明。在该场景下,假设商品剩余数量(即目标数据)为100,该商品剩余数量当前对应的第二版本号为10,且假设每个并发请求用于请求购买1件商品,那么执行该并发请求对应的响应操作得到的操作结果是,对当前的商品剩余数量减一,假设商品剩余数量每更新一次,商品剩余数量对应的版本号加一。当服务器得到第一个操作结果时,该第一个操作结果携带的第一版本号为执行与该操作结果相关联的响应操作之前,该商品剩余数量对应的版本号,即为10,此时,第一版本号与第二版本号相匹配,因此,该第一个操作结果验证通过,商品剩余数量更新为99,对应的第二版本号为11。当服务器并发执行第二个并发请求和第三个并发请求对应的响应操作,得到第二个操作结果和第三个操作结果时,该第二个操作结果和第三个操作结果携带的第一版本号均为11,由于第二个操作结果的第一版本号与第二版本号相匹配,因此,第二个操作结果验证通过,商品剩余数量更新为98,对应的第二版本号为12。此时,服务器再对第三个操作结果进行验证时,由于第三个操作结果携带的第一版本号(版本号为11)与当前的第二版本号(版本号为12)不匹配,因此,第三个操作结果验证失败。依次类推,在服务器得到任意一个并发请求的操作结果时,需要根据该操作结携带的第一版本号与目标数据的当前的第二版本号进行验证,在每次验证通过时,对目标数据和目标数据的第二版本号进行更新,并根据更新后的第二版本号对后续操作结果进行验证。
在本实施例中,在接收到M个并发请求时,可以并发执行该M个并发请求的响应操作,区别于现有技术中对该M个并发请求逐个执行的方式,即便在分布式系统中的某一并发请求对应的节点出现故障,也不影响其他节点的并发请求的响应操作的执行,因而提高了分布式系统的稳定性;同时,通过操作结果携带的第一版本号与目标数据的第二版本号,对每个并发请求对应的操作结果进行验证,可以避免在同一时刻存在多个并发请求同时对目标数据进行更新,而可能出现的目标数据的更新结果出现错漏的情况,从而有利于提高目标数据的安全性。综上,本申请实施例所提供的技术方案能够在保证数据安全性的前提下,解决现有技术中分布式锁方案更新目标数据时存在的稳定性较差的问题。
在一实施例中,由于并发请求的数量较多,会存在多个并发请求对应的响应操作同时执行完的情况,这时,服务器可能同时接收到多个操作结果。
基于此,在上述步骤101中,响应于接收到M个并发请求,并发执行M个并发请求对应的响应操作之后,方法还包括以下步骤:
响应于同时接收到多个响应操作对应的多个操作结果,基于多个操作结果与第二版本号,依次对多个操作结果进行验证。
当服务器同时接收到多个响应操作对应的多个操作结果,需要分别将多个操作结果携带的第一版本号和目标数据的第二版本号进行验证,以此保证目标数据的安全性。继续基于上述举例进行说明,假设服务器同时接收到两个操作结果(如上述举例中的第二个操作结果和第三个操作结果),且两个操作结果均是在服务器验证完第一个操作结果后执行响应操作得到的,那么,服务器在接收到两个操作结果时,需要对这两个操作结果依次进行验证。具体地,可以将其中一个操作结果携带的第一版本号先与商品剩余数量当前对应的第二版本号比较,此时,该操作结果携带的第一版本号为11,商品剩余数量对应的第二版本号也为11,该操作结果验证成功,服务器将商品剩余数量更新为98,商品剩余数量对应的第二版本号更新为12,接着,再将另一个操作结果携带的第一版本号与商品剩余数量当前对应的第二版本号比较,此时,该操作结果携带的第一版本号仍为11,商品剩余数量当前对应的第二版本号为12,该操作结果验证失败,取消对该操作对商品剩余数量以及其对应的第二版本号的修改。通过对操作结果依次验证的方式,可以避免在同一时刻存在多个并发请求同时对目标数据进行更新,导致目标数据的最终结果错误,从而提供了目标数据的安全性。
在一实施例中,服务器可以调用数据库服务对操作结果进行验证。基于此,上述图1所示的实施例中,上述步骤102、基于操作结果与第二版本号,对操作结果进行验证,具体包括如下步骤:
调用数据库服务对操作结果进行验证,其中,数据库服务用于根据预设数据库中的第二版本号对操作结果进行验证。
具体地,上述数据库服务可以是服务器端自带的服务功能,也可以是服务器通过调用第三方服务接口来实现,本申请不做具体限定。上述数据库服务用于根据预设数据库中的第二版本号对操作结果进行验证。在调用数据库服务前,需要在预设数据库中预先存储目标数据和目标数据对应的第二版本号。当服务器需要对操作结果进行验证时,可以通过数据库服务访问预设数据库中的目标数据和第二版本号,并将操作结果携带的第一版本号与第二版本号比较,由此实现对操作结果的验证过程。
需要说明的是,此处的预设数据库可以为OracleDB、MySQL、SQLServer等任意类型的数据库,针对数据库类型的不同,数据库服务可以根据所访问的数据库类型的不同,对数据库语言进行相应调整。为方便说明,以MySQL数据库作为预设数据库为例,对不同场景下的分布式数据处理进行说明。
在商品售卖场景中,服务器可以将商品剩余数量count和商品剩余数量对应的第二版本号old_version预先存储在MySQL数据库中的预设表格中,例如命名为goods_lock的表中。假设商品剩余数量count当前为100,该商品剩余数量当前对应的第二版本号old_version为10,则MySQL数据库中存储有count和old_version这两个字段的数据,且假设每个并发请求用于请求购买1件商品,那么执行该并发请求对应的响应操作得到的操作结果是,对当前的商品剩余数量减一,假设商品剩余数量每更新一次,商品剩余数量对应的版本号加一。当服务器得到第一个操作结果时,服务器调用数据库服务,对该第一个操作结果携带的第一版本号version与商品剩余数量对应的第二版本号old_version进行比较,如使用MySQL语句“update goods_lock set count=count-1,version=version+1where count>0and version=old_version”,此时,若MySQL数据库中存储有count和old_version这两个字段的数据满足MySQL语句中的where条件,则MySQL数据库中的商品剩余数量count更新为99和商品剩余数量对应的第二版本号old_version更新为11,当服务器后续接收到下一个并发请求的操作结果时,则可以以MySQL数据库中更新后的count和old_version对其进行验证。
在与时间戳相关的单号生成场景中,服务器可以将生成的单号count和单号对应的第二版本号old_version预先存储在MySQL数据库中的预设表格中,例如命名为order_lock的表中。假设生成的单号count当前为1606217903,该单号对应的第二版本号old_version为10,则MySQL数据库中存储有count和old_version这两个字段的数据,且假设每个并发请求用于请求生成1个新的单号,那么执行该并发请求对应的响应操作得到的操作结果是,生成得到新的单号,假设每生成得到一次新的单号,单号对应的版本号加一。当服务器得到第一个操作结果时,服务器调用数据库服务,对该第一个操作结果携带的第一版本号version与当前单号对应的第二版本号old_version进行比较,如使用MySQL语句“update order_lock set orderId=1606217904,version=version+1where version=old_version and orderId>old_orderId”,此时,若MySQL数据库中存储有count和old_version这两个字段的数据满足MySQL语句中的where条件,则MySQL数据库中的单号更新为1606217904和单号对应的第二版本号old_version更新为11,当服务器后续再接收到下一个并发请求的操作结果时,则可以以MySQL数据库中更新后的count和old_version对其进行验证。
在本实施例中,通过调用数据库服务对操作结果进行验证,不仅提高了验证效率,还提高了验证的准确性。
在另一实施例中,服务器可以不调用数据库服务进行验证,而是直接基于得到的操作结果与第二版本号,对操作结果进行验证。基于此,上述步骤102中,基于操作结果与第二版本号,对操作结果进行验证,具体包括以下步骤:
步骤201、获取预设数据库中目标数据的当前数值和第二版本号;
在本实施例中,该预设数据库为服务器本地的数据库,也可以是与该服务器连接的其他数据库,本申请不做具体限定。服务器可以将目标数据和目标数据对应的第二版本号预先存储在该预设数据库中,便于后续分析使用。
基于数据之间的关系,存在步骤202或步骤203所示的情况:
步骤202、在第一数值与第二数值之间的关系满足目标数据的数据变化逻辑,且操作结果携带的第一版本号与第二版本号一致的情况下,判定操作结果验证通过。
步骤203、在第一数值与第二数值之间的关系不满足目标数据的数据变化逻辑,和/或,操作结果携带的第一版本号与第二版本号不一致的情况下,判定操作结果验证失败。
其中,上述第一数值为操作结果对应的数值。上述第二数值为目标数据的当前数值。上述目标数据的数据变化逻辑是指目标数据在响应请求对应的操作结果验证通过时的变化规律。例如,在商品售卖场景中,商品剩余数量(即目标数据)会越来越小,直至减小到0;在与时间戳相关的单号生成场景中,生成的单号的(即目标数据)会越来越大等等。
在该步骤中,服务器可以通过比较第一数值与第二数值之间的关系,以及第一版本号与第二版本号的匹配度,确定操作结果的验证结果。
若在第一数值与第二数值之间的关系满足目标数据的数据变化逻辑,且操作结果携带的第一版本号与第二版本号一致的情况下,则表示该操作结果对应的数值符合目标数据的变化逻辑,且在执行该操作结果对应的响应操作的过程中,没有其他并发请求对目标数据进行修改,因此,可以判定该操作结果验证通过。
反之,若在第一数值与第二数值之间的关系不满足目标数据的数据变化逻辑,则表示该操作结果对应的数值不符合目标数据的变化逻辑;另外,操作结果携带的第一版本号与第二版本号不一致的情况下,则表示在执行该操作结果对应的响应操作的过程中,存在其他并发请求对目标数据进行修改。因此,若第一数值与第二数值之间的关系不满足目标数据的数据变化逻辑,和/或,第一版本号与第二版本号不一致,则可以判定操作结果验证失败。
在本实施例中,服务器自身可以通过操作结果与第二版本号,对操作结果进行验证,以此确保在某一并发请求在对目标数据进行修改时,不会有其他并发请求对该目标数据进行修改,从而保证目标数据的安全性。
针对不同的应用场景,各应用场景下的目标数据的数据变化逻辑可以相同,也可以不同,本申请不做具体限定。例如,在与时间戳相关的单号生成场景中,目标数据会随着单号的生成次数逐渐增大,而在商品售卖场景中,目标数据会随着秒杀次数逐渐减小等。
具体而言,对于上述实施例中的目标数据的数据变化逻辑,可以包括如下情况:
在目标数据为递增式更新的情况下,第一数值大于第二数值;或者,
在目标数据为递减式更新的情况下,第一数值小于第二数值,且第一数值处于目标数据所允许的修改范围内,其中,修改范围为目标数据允许达到的最小值与最大值之间的取值范围。
具体地,目标数据的数据变化逻辑可以根据不同的使用场景进行不同的定义,目标数据可以是递增式更新,也可以是递减式更新等等。在目标数据为递增式更新的情况下,目标数据每更新一次,目标数据对应的数值就增大一次。例如,在与时间戳相关的单号生成场景中,随着时间戳的数值增大,生成的单号也随之增大。在目标数据为递减式更新的情况下,目标数据每更新一次,目标数据对应的数值就减小一次。例如,在商品售卖场景中,随着成功下单的数值增大,商品剩余数量会随之减小,但只要商品剩余数量大于0,并发请求就能继续对商品剩余数量进行更新。
在本实施例中,可以对不同场景下的目标数据,设置不同的数据变化逻辑,以满足不同场景下的操作结果的验证要求,使得分布式系统的数据处理方法可以适用于多种不同的场景,提升分布式系统的灵活性。
在一实施例中,当服务器判定某一操作结果验证失败时,可以根据目标数据的当前数值与目标数据的修改范围,对该操作结果做出不同的执行逻辑。基于此,在服务器判定某一操作结果验证失败后,该方法还包括如下步骤:
在操作结果验证失败,且目标数据的当前数值处于修改范围内的情况下,重新执行操作结果对应的并发请求的响应操作;或者,
在操作结果验证失败,且目标数据的当前数值超出修改范围的情况下,停止执行操作结果对应的并发请求的响应操作。
具体地,上述修改范围是指目标数据允许达到的最小值与最大值之间的取值范围。其中,对于目标数据的当前数值超出修改范围的判断逻辑是,判断目标数据的当前数值是否在目标数据允许达到的最小值与最大值之间,若目标数据的当前数值小于目标数据允许达到的最小值,或者大于目标数据允许达到的最大值,则目标数据的当前数值超出修改范围。而对于操作结果验证失败的判断逻辑,在上述实施例中已进行详细说明,在此不再赘述。
例如,在商品售卖场景(包括但不限于商品秒杀活动)中,每次并发请求在对商品剩余数量进行更新时,商品剩余数量需要小于或等于商品剩余数量设置的初始值,且大于或等于0,不能在执行响应操作过程中出现比设置的初始值还大的数值,或者比0还小的数值,这样才能符合商品购买的处理逻辑。当服务器判定某一操作结果验证失败,且目标数据的当前数值处于修改范围内(如商品剩余数量大于0)的情况下,服务器可以重新执行该操作结果对应的并发请求的响应操作,以避免该并发请求的发起端需要重新发起并发请求,从而降低了客户端发起请求的次数,且提高了整体的数据处理效率。
当服务器判定某一操作结果验证失败,且目标数据的当前数值超出修改范围(如商品剩余数量小于0)的情况下,表示目标数据不需要继续更新,此时,服务器不需要重新执行这些并发请求的响应操作。
需要说明的是,判定操作结果是否验证失败的步骤和判定目标数据的当前数值是否超出修改范围的步骤,可以同时执行,也可以先执行判定操作结果是否验证失败的步骤后,再执行判定目标数据的当前数值是否超出修改范围的步骤,还可以先执行判定目标数据的当前数值是否超出修改范围的步骤后,再执行判定操作结果是否验证失败的步骤,本申请不做具体限定。在本实施例中,服务器可以根据目标数据的当前数值与目标数据的修改范围对验证失败的操作结果对应的并发请求重新执行响应操作,或者停止执行响应操作,不仅可以保证目标数据的安全性,还能提高整体的数据处理效率。
在一实施例,服务器执行并发请求对应的响应操作的数量,与服务器的逻辑核的数量有关。在该实施例中,服务器的多个逻辑核可用于并行处理多个响应操作,例如,M个逻辑核可用于并行处理M个响应操作。这种情况下,服务器上预设的逻辑核的数量越多,服务器可以同时执行的响应操作的数量就越多;服务器上预设的逻辑核的数量越少,服务器可以同时执行的响应操作的数量就越少。
基于此,在上述实施例中,上述步骤101中,并发执行M个并发请求对应的响应操作,可以通过如下方式实现:
基于预设的N个逻辑核,并发执行M个并发请求对应的响应操作,其中,N为正整数,N个逻辑核用于在M大于或等于N的情况下,并发执行N个并发请求对应的响应操作,以及,在M小于N的情况下,并发执行M个并发请求对应的响应操作。
在本实施例中,服务器可以预设N个逻辑核,N可以为任意一个正整数,如1、2、3、4等等。每个逻辑核可以独立执行并发请求对应的响应操作,因而,当服务器接收到的并发请求的数量大于或等于逻辑核的数量时,N个逻辑核可以并发执行N个并发请求对应的响应操作;当服务器接收到的并发请求的数量小于逻辑核的数量时,N个逻辑核可以并发执行所有并发请求对应的响应操作。这样,当服务器的逻辑核的数量较多时,允许并发执行的并发请求的数量就越大,由此缩短了M个并发请求对应的响应操作的执行时间,提高了响应操作的执行效率。
在一实施例中,服务器在完成对目标数据和目标数据对应的第二版本号进行更新之后,需要将目标数据的更新结果反馈给客户端,以使用户能通过客户端了解并发请求的执行结果。基于上述实施例,在上述步骤103、当验证通过时,更新目标数据,并更新目标数据对应的第二版本号之后,还包括如下步骤:
向客户端发送响应消息,以使客户端基于响应消息,显示更新后的目标数据,客户端为发送与操作结果相关联的并发请求的客户端,响应消息携带有更新后的目标数据。
在本实施例中,服务器在更新目标数据后,需要向客户端发送携带有更新后的目标数据对应的响应消息,这样,客户端可以基于该响应消息,对更新后的目标数据进行显示,以方便用户查看。此处的响应消息,可以根据应用场景的不同,有不同的响应方式。例如,当应用场景为与时间戳相关的单号生成场景时,响应消息可以是具体的工单信息,包括但不限于:单号,如1606217903、1606217904等;当应用场景为商品购买活动(包括但不限于商品秒杀活动)时,响应消息可以是购买结果或商品剩余量中的至少一种,其中,购买结果可以包括但不限于:购买成功通知、购买失败通知、订单信息等。
在一实施例中,基于不同的应用场景,其对应的目标数据也不相同。基于上述实施例,上述目标数据可以包括如下至少一项:
与时间戳相关的单号、商品剩余量。
具体地,在实际应用过程中,本发明实施例涉及的数据处理方法的应用场景可以包括与时间戳相关的单号生成场景、商品售卖场景(包括但不限于商品秒杀活动)等。也就是说,本申请实施例中的目标数据可以包括与时间戳相关的单号、商品剩余量中的至少一个。
在目标数据为商品剩余量时,该数据处理方法的应用场景为商品售卖场景(包括但不限于商品秒杀活动)。在该场景下,服务器可以将商品剩余数量和商品剩余数量对应的第二版本号预先存储在预设数据库中。假设商品剩余数量当前为100,该商品剩余数量对应的第二版本号为10,且假设每个并发请求更新商品剩余数量时,商品剩余数量对应的第二版本号加一。当服务器得到一个操作结果时,服务器将该操作结果携带的第一版本号与商品剩余数量对应的第二版本号进行比较,如果该操作结果携带的第一版本号与商品剩余数量对应的第二版本号一致,则服务器将商品剩余数量更新为99,并更新该商品剩余数量对应的第二版本号为11。在服务器后续接收到下一个并发请求的操作结果时,再基于更新后的商品剩余数量和对应的第二版本号对下一个操作结果进行验证。
在本实施例中,目标数据可以为与时间戳相关的单号、商品剩余量等,因而服务器可以在多个不同的场景下进行数据处理,以实现分布式系统的不同类型的并发请求的处理性能。
通过本申请实施例提供的数据处理方法,可以在接收到M个并发请求时,并发执行该M个并发请求的响应操作,区别于现有技术中对该M个并发请求逐个执行的方式,即便在分布式系统中的某一并发请求对应的节点出现故障,也不影响其他节点的并发请求的响应操作的执行,因而提高了分布式系统的稳定性;同时,通过操作结果携带的第一版本号与目标数据的第二版本号,对每个并发请求对应的操作结果进行验证,可以避免在同一时刻存在多个并发请求同时对目标数据进行更新,而可能出现的目标数据的更新结果出现错漏的情况,从而有利于提高目标数据的安全性。另外,当出现操作结果验证失败,且目标数据的当前数值未超出修改范围时,可以重新执行操作结果对应的并发请求的响应操作,以此来降低客户端发起请求的次数,有利于提高整体的数据处理效率。
除此之外,本申请实施例还提供了一种数据处理装置。参见图4,图4为本申请实施例提供的数据处理装置的结构示意图。如图4所示,该数据处理装置400包括:
执行模块401,用于响应于接收到M个并发请求,并发执行M个并发请求对应的响应操作,M为正整数,并发请求用于请求对目标数据进行更新;第一验证模块402,用于响应于得到任意一个响应操作对应的操作结果,基于操作结果与第二版本号,对操作结果进行验证;其中,操作结果携带第一版本号,第一版本号为执行与操作结果相关联的响应操作之前,目标数据对应的版本号;第二版本号为目标数据当前对应的版本号;
更新模块403,用于当验证通过时,更新目标数据,并更新目标数据对应的第二版本号。进一步地,该数据处理装置400还包括:
第二验证模块,用于响应于同时接收到多个响应操作对应的多个操作结果,基于多个操作结果与第二版本号,依次对多个操作结果进行验证。
进一步地,第一验证模块402包括:
验证子模块,用于调用数据库服务对操作结果进行验证,其中,数据库服务用于根据预设数据库中的第二版本号对操作结果进行验证。
进一步地,第一验证模块402还包括:
获取子模块,用于获取预设数据库中目标数据的当前数值和第二版本号;
第一判定子模块,用于在第一数值与第二数值之间的关系满足目标数据的数据变化逻辑,且操作结果携带的第一版本号与第二版本号一致的情况下,判定操作结果验证通过;
第二判定子模块,用于在第一数值与第二数值之间的关系不满足目标数据的数据变化逻辑,和/或,操作结果携带的第一版本号与第二版本号不一致的情况下,判定操作结果验证失败;
其中,第一数值为操作结果对应的数值,第二数值为目标数据的当前数值。
进一步地,目标数据的数据变化逻辑,包括:
在目标数据为递增式更新的情况下,第一数值大于第二数值;或者,
在目标数据为递减式更新的情况下,第一数值小于第二数值,且第一数值处于目标数据所允许的修改范围内,其中,修改范围为目标数据允许达到的最小值与最大值之间的取值范围。
进一步地,该数据处理装置400还包括:
重新执行模块,用于在操作结果验证失败,且目标数据的当前数值处于修改范围内的情况下,重新执行操作结果对应的并发请求的响应操作;或者,
停止执行模块,用于在操作结果验证失败,且目标数据的当前数值超出修改范围的情况下,停止执行操作结果对应的并发请求的响应操作。
进一步地,执行模块401具体用于:
基于预设的N个逻辑核,并发执行M个并发请求对应的响应操作,其中,N为正整数,N个逻辑核用于在M大于或等于N的情况下,并发执行N个并发请求对应的响应操作,以及,在M小于N的情况下,并发执行M个并发请求对应的响应操作。
进一步地,该数据处理装置400还包括:
发送模块,用于向客户端发送响应消息,以使客户端基于响应消息,显示更新后的目标数据,客户端为发送与操作结果相关联的并发请求的客户端,响应消息携带有更新后的目标数据。
进一步地,目标数据包括如下至少一项:
与时间戳相关的单号、商品剩余量。
本申请实施例中的数据处理装置400,在接收到M个并发请求时,可以并发执行该M个并发请求的响应操作,区别于现有技术中对该M个并发请求逐个执行的方式,即便在分布式系统中的某一并发请求对应的节点出现故障,也不影响其他节点的并发请求的响应操作的执行,因而提高了分布式系统的稳定性;同时,通过操作结果携带的第一版本号与目标数据的第二版本号,对每个并发请求对应的操作结果进行验证,可以避免在同一时刻存在多个并发请求同时对目标数据进行更新,而可能出现的目标数据的更新结果出现错漏的情况,从而有利于提高目标数据的安全性。综上,本申请实施例所提供的技术方案能够在保证数据安全性的前提下,解决现有技术中分布式锁方案更新目标数据时存在的稳定性较差的问题。
本申请实施例中的数据处理装置400可以是装置,也可以是终端中的部件、集成电路、或芯片。该装置可以是移动电子设备,也可以为非移动电子设备。示例性的,移动电子设备可以为手机、平板电脑、笔记本电脑、掌上电脑、车载电子设备、可穿戴设备、超级移动个人计算机(ultra-mobile personal computer,UMPC)、上网本或者个人数字助理(personaldigital assistant,PDA)等,非移动电子设备可以为服务器、网络附属存储器(NetworkAttached Storage,NAS)、个人计算机(personal computer,PC)、电视机(television,TV)、柜员机或者自助机等,本申请实施例不作具体限定。
本申请实施例中的数据处理装置400可以为具有操作系统的装置。该操作系统可以为安卓(Android)操作系统,可以为ios操作系统,还可以为其他可能的操作系统,本申请实施例不作具体限定。
本申请实施例提供的数据处理装置400能够实现图1至图3的方法实施例实现的各个过程,为避免重复,这里不再赘述。
可选的,如图5所示,本申请实施例还提供一种电子设备500,包括处理器501,存储器502,存储在存储器502上并可在处理器501上运行的程序或指令,该程序或指令被处理器501执行时实现上述数据处理方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
需要说明的是,本申请实施例中的电子设备包括上述的移动电子设备和非移动电子设备。
本申请实施例还提供一种可读存储介质,可读存储介质上存储有程序或指令,该程序或指令被处理器执行时实现上述数据处理方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
其中,处理器为上述实施例中的电子设备中的处理器。可读存储介质,包括计算机可读存储介质,如计算机只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、磁碟或者光盘等。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。此外,需要指出的是,本申请实施方式中的方法和装置的范围不限按示出或讨论的顺序来执行功能,还可包括根据所涉及的功能按基本同时的方式或按相反的顺序来执行功能,例如,可以按不同于所描述的次序来执行所描述的方法,并且还可以添加、省去、或组合各种步骤。另外,参照某些示例所描述的特征可在其他示例中被组合。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本申请各个实施例的方法。
上面结合附图对本申请的实施例进行了描述,但是本申请并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本申请的启示下,在不脱离本申请宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本申请的保护之内。
Claims (10)
1.一种数据处理方法,其特征在于,所述方法包括:
响应于接收到M个并发请求,并发执行所述M个并发请求对应的响应操作,M为正整数,所述并发请求用于请求对目标数据进行更新;
响应于得到任意一个响应操作对应的操作结果,基于所述操作结果与第二版本号,对所述操作结果进行验证;其中,所述操作结果携带第一版本号,所述第一版本号为执行与所述操作结果相关联的响应操作之前,所述目标数据对应的版本号;所述第二版本号为所述目标数据当前对应的版本号;
当验证通过时,更新所述目标数据,并更新所述目标数据对应的所述第二版本号;
在所述响应于接收到M个并发请求,并发执行所述M个并发请求对应的响应操作之后,所述方法还包括:
响应于同时接收到多个响应操作对应的多个操作结果,基于多个所述操作结果与第二版本号,依次对多个所述操作结果进行验证;
所述基于所述操作结果与第二版本号,对所述操作结果进行验证,包括:
获取预设数据库中所述目标数据的当前数值和所述第二版本号;
在第一数值与第二数值之间的关系满足所述目标数据的数据变化逻辑,且所述操作结果携带的第一版本号与所述第二版本号一致的情况下,判定所述操作结果验证通过;
在第一数值与第二数值之间的关系不满足所述目标数据的数据变化逻辑,和/或,所述操作结果携带的第一版本号与所述第二版本号不一致的情况下,判定所述操作结果验证失败;
其中,所述第一数值为所述操作结果对应的数值,所述第二数值为所述目标数据的当前数值。
2.根据权利要求1所述的方法,其特征在于,所述基于所述操作结果与第二版本号,对所述操作结果进行验证,包括:
调用数据库服务对所述操作结果进行验证,其中,所述数据库服务用于根据预设数据库中的所述第二版本号对所述操作结果进行验证。
3.根据权利要求1所述的方法,其特征在于,所述目标数据的数据变化逻辑,包括:
在所述目标数据为递增式更新的情况下,所述第一数值大于所述第二数值;或者,
在所述目标数据为递减式更新的情况下,所述第一数值小于所述第二数值,且所述第一数值处于所述目标数据所允许的修改范围内,其中,所述修改范围为所述目标数据允许达到的最小值与最大值之间的取值范围。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
在所述操作结果验证失败,且所述目标数据的当前数值处于所述修改范围内的情况下,重新执行所述操作结果对应的并发请求的响应操作;
或者,
在所述操作结果验证失败,且所述目标数据的当前数值超出所述修改范围的情况下,停止执行所述操作结果对应的并发请求的响应操作。
5.根据权利要求1-4任一项所述的方法,其特征在于,所述并发执行所述M个并发请求对应的响应操作,包括:
基于预设的N个逻辑核,并发执行所述M个并发请求对应的响应操作,其中,N为正整数,所述N个逻辑核用于在M大于或等于N的情况下,并发执行N个并发请求对应的响应操作,以及,在M小于N的情况下,并发执行M个并发请求对应的响应操作。
6.根据权利要求1-4任一项所述的方法,其特征在于,在所述当验证通过时,更新所述目标数据,并更新所述目标数据对应的所述第二版本号之后,还包括:
向客户端发送响应消息,以使所述客户端基于所述响应消息,显示更新后的所述目标数据,所述客户端为发送与所述操作结果相关联的并发请求的客户端,所述响应消息携带有更新后的所述目标数据。
7.根据权利要求1-4任一项所述的方法,其特征在于,所述目标数据包括如下至少一项:
与时间戳相关的单号、商品剩余量。
8.一种数据处理装置,其特征在于,所述装置包括:
执行模块,用于响应于接收到M个并发请求,并发执行所述M个并发请求对应的响应操作,M为正整数,所述并发请求用于请求对目标数据进行更新;
第一验证模块,用于响应于得到任意一个响应操作对应的操作结果,基于所述操作结果与第二版本号,对所述操作结果进行验证;其中,所述操作结果携带第一版本号,所述第一版本号为执行与所述操作结果相关联的响应操作之前,所述目标数据对应的版本号;所述第二版本号为所述目标数据当前对应的版本号;
更新模块,用于当验证通过时,更新所述目标数据,并更新所述目标数据对应的所述第二版本号;
所述装置还包括:
第二验证模块,用于响应于同时接收到多个响应操作对应的多个操作结果,基于多个所述操作结果与第二版本号,依次对多个所述操作结果进行验证;
所述第一验证模块还包括:
获取子模块,用于获取预设数据库中所述目标数据的当前数值和所述第二版本号;
第一判定子模块,用于在第一数值与第二数值之间的关系满足所述目标数据的数据变化逻辑,且所述操作结果携带的第一版本号与所述第二版本号一致的情况下,判定所述操作结果验证通过;
第二判定子模块,用于在第一数值与第二数值之间的关系不满足所述目标数据的数据变化逻辑,和/或,所述操作结果携带的第一版本号与所述第二版本号不一致的情况下,判定所述操作结果验证失败;
其中,所述第一数值为所述操作结果对应的数值,所述第二数值为所述目标数据的当前数值。
9.一种电子设备,其特征在于,包括处理器,存储器及存储在所述存储器上并可在所述处理器上运行的程序或指令,所述程序或指令被所述处理器执行时实现如权利要求1-7任一项所述的数据处理方法的步骤。
10.一种可读存储介质,其特征在于,所述可读存储介质上存储程序或指令,所述程序或指令被处理器执行时实现如权利要求1-7任一项所述的数据处理方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110198581.4A CN112817995B (zh) | 2021-02-22 | 2021-02-22 | 数据处理方法和装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110198581.4A CN112817995B (zh) | 2021-02-22 | 2021-02-22 | 数据处理方法和装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112817995A CN112817995A (zh) | 2021-05-18 |
CN112817995B true CN112817995B (zh) | 2023-09-15 |
Family
ID=75864789
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110198581.4A Active CN112817995B (zh) | 2021-02-22 | 2021-02-22 | 数据处理方法和装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112817995B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113177085B (zh) * | 2021-05-25 | 2023-04-14 | 上海安畅网络科技股份有限公司 | 一种接口幂等调用的方法、装置、设备及存储介质 |
CN113472856A (zh) * | 2021-06-08 | 2021-10-01 | 北京城市网邻信息技术有限公司 | 一种消息推送处理方法、装置、电子设备及存储介质 |
CN114490691B (zh) * | 2022-02-15 | 2022-08-16 | 北京中电兴发科技有限公司 | 一种分布式系统数据一致性方法 |
CN115033585B (zh) * | 2022-08-09 | 2022-11-15 | 北京奥星贝斯科技有限公司 | 针对目标数据库的数据合并处理方法及装置 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108234641A (zh) * | 2017-12-29 | 2018-06-29 | 北京奇虎科技有限公司 | 基于分布式一致性协议实现的数据读写方法及装置 |
CN108829413A (zh) * | 2018-05-07 | 2018-11-16 | 北京达佳互联信息技术有限公司 | 数据更新方法、装置及计算机可读存储介质、服务器 |
CN109783504A (zh) * | 2019-01-23 | 2019-05-21 | 广州华多网络科技有限公司 | 数据同步方法、装置、计算机设备及存储介质 |
WO2020023150A1 (en) * | 2018-07-25 | 2020-01-30 | Microsoft Technology Licensing, Llc | Constant time database recovery |
CN110888858A (zh) * | 2019-10-29 | 2020-03-17 | 北京奇艺世纪科技有限公司 | 数据库的操作方法和装置、存储介质、电子装置 |
CN110928887A (zh) * | 2018-09-19 | 2020-03-27 | 北京国双科技有限公司 | 一种数据处理方法及装置 |
CN111177121A (zh) * | 2019-12-26 | 2020-05-19 | 平安普惠企业管理有限公司 | 订单数据反馈方法、装置、计算机设备及存储介质 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9336258B2 (en) * | 2013-10-25 | 2016-05-10 | International Business Machines Corporation | Reducing database locking contention using multi-version data record concurrency control |
US11120002B2 (en) * | 2016-07-20 | 2021-09-14 | Verizon Media Inc. | Method and system for concurrent database operation |
US10606820B2 (en) * | 2017-05-12 | 2020-03-31 | International Business Machines Corporation | Synchronizing data values by requesting updates |
-
2021
- 2021-02-22 CN CN202110198581.4A patent/CN112817995B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108234641A (zh) * | 2017-12-29 | 2018-06-29 | 北京奇虎科技有限公司 | 基于分布式一致性协议实现的数据读写方法及装置 |
WO2019127916A1 (zh) * | 2017-12-29 | 2019-07-04 | 北京奇虎科技有限公司 | 基于分布式一致性协议实现的数据读写方法及装置 |
CN108829413A (zh) * | 2018-05-07 | 2018-11-16 | 北京达佳互联信息技术有限公司 | 数据更新方法、装置及计算机可读存储介质、服务器 |
WO2020023150A1 (en) * | 2018-07-25 | 2020-01-30 | Microsoft Technology Licensing, Llc | Constant time database recovery |
CN110928887A (zh) * | 2018-09-19 | 2020-03-27 | 北京国双科技有限公司 | 一种数据处理方法及装置 |
CN109783504A (zh) * | 2019-01-23 | 2019-05-21 | 广州华多网络科技有限公司 | 数据同步方法、装置、计算机设备及存储介质 |
CN110888858A (zh) * | 2019-10-29 | 2020-03-17 | 北京奇艺世纪科技有限公司 | 数据库的操作方法和装置、存储介质、电子装置 |
CN111177121A (zh) * | 2019-12-26 | 2020-05-19 | 平安普惠企业管理有限公司 | 订单数据反馈方法、装置、计算机设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112817995A (zh) | 2021-05-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112817995B (zh) | 数据处理方法和装置、电子设备及存储介质 | |
US11893000B2 (en) | Data processing methods, apparatuses and devices | |
CA3176449A1 (en) | Sales locking method and system based on a caching | |
CN111198769A (zh) | 信息处理方法及其系统、计算机系统及计算机可读介质 | |
CN107133788A (zh) | 一种退款处理方法及装置 | |
US11775509B1 (en) | Systems and methods to fully process an initially incomplete replicated and committed transaction for a non-static application by using a plurality of transaction pattern tables | |
CN110599305A (zh) | 业务处理方法、装置及存储介质 | |
CN112446786A (zh) | 一种异常交易处理方法、装置、电子设备和可读存储介质 | |
CN111353841B (zh) | 单据数据处理方法、装置及系统 | |
CN111415146A (zh) | 资源数据的处理方法、装置及设备 | |
CN108829495B (zh) | 多数据库修改事务的验证方法、装置、设备及存储介质 | |
CN111143041B (zh) | 一种数据一致性方法、分布式协调器及中央协调器 | |
CN113377875A (zh) | 跨链数据处理方法、装置、电子设备及可读存储介质 | |
CN112596801A (zh) | 事务处理方法、装置、设备、存储介质、数据库 | |
CN111324622A (zh) | 一种资源抢购的处理方法、装置、设备及存储介质 | |
US10728323B2 (en) | Method and apparatus for operating infrastructure layer in cloud computing architecture | |
US20210149709A1 (en) | Method and apparatus for processing transaction | |
CN113420090A (zh) | 跨链处理方法、装置、电子设备及可读存储介质 | |
CN113360547A (zh) | 跨链查询方法、装置、电子设备及可读存储介质 | |
CN114519440A (zh) | 一种客票的数据处理方法、装置、设备及存储介质 | |
CN113051008A (zh) | 接口请求处理方法、装置、计算机设备和存储介质 | |
CN111061576A (zh) | 一种实体对象的创建方法及系统 | |
CN106878369B (zh) | 一种业务处理方法和装置 | |
CN116431367B (zh) | 一种修改票证信息的方法、系统及计算机可读存储介质 | |
US11934879B1 (en) | Data processing using application sequence identifiers in cloud environments |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |