CN109284177B - 一种数据更新方法和装置 - Google Patents
一种数据更新方法和装置 Download PDFInfo
- Publication number
- CN109284177B CN109284177B CN201710594880.3A CN201710594880A CN109284177B CN 109284177 B CN109284177 B CN 109284177B CN 201710594880 A CN201710594880 A CN 201710594880A CN 109284177 B CN109284177 B CN 109284177B
- Authority
- CN
- China
- Prior art keywords
- data
- processing
- execution machine
- authority
- processing authority
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据更新方法和装置,涉及计算机技术领域。该方法的一具体实施方式包括:利用预设算法将输入的数据中对应相同业务编号的数据分发到同一执行机;在每个执行机中按照预设规则配置本执行机中数据的处理权限,所述预设规则为:在同一时刻对应相同业务编号的数据中只有一项数据被配置有所述处理权限;通过每个执行机将各自的被配置有所述处理权限的数据传送至数据存储集群以执行数据更新处理;当一执行机中被配置有所述处理权限的数据被执行完所述数据更新处理之后,该执行机释放该数据的所述处理权限。该实施方式能够在保证数据正确更新的前提下,降低处理延迟,提升系统吞吐量。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种数据更新方法和装置。
背景技术
如今大数据在实际业务中应用越来越多,与数据处理相关的技术也得到飞速发展。在大数据场景下,为了匹配不同系统的处理速度,通常会采用管道来缓存以及传递数据,同时为了提升系统的处理能力,在实际应用中会采用多实例并行的方式处理数据,这种方式虽然加快了系统的处理速度,但也带来了数据的同步更新问题。
在电商业务中,订单状态的更新是常见的业务场景,业务方总是希望获取到订单最新的状态,而多条订单状态的更新信息有可能在多台实例上同时被处理,因此系统要确保订单状态被正确地更新。现有的技术方案采用对整个订单更新方法或对每个订单进行事务处理,即事务加锁。其中,无论是使用Spring的事务注解,还是使用Synchronized关键字(是Spring框架提供的一种加锁方法,底层实现是对Synchronized的包装),对整个订单更新方法进行加锁,将整个系统由并行处理变成了串行处理,并且需要考虑加锁解锁的开销,而对每个订单进行加锁需要对每个订单进行加解锁操作,性能开销较大,同时不同实例对同一订单进行加锁涉及到分布式锁,增加了系统的复杂度。
在实现本发明过程中,发明人发现现有技术中至少存在如下问题:
现有方案会造成系统的处理能力大幅下降,增大了状态更新的延迟。
发明内容
有鉴于此,本发明实施例提供一种数据更新方法和装置,能够在保证数据正确更新的前提下,降低处理延迟,提升系统吞吐量。
为实现上述目的,根据本发明实施例的一个方面,提供了一种数据更新方法。
一种数据更新方法,包括:利用预设算法将输入的数据中对应相同业务编号的数据分发到同一执行机;在每个执行机中按照预设规则配置本执行机中数据的处理权限,所述预设规则为:在同一时刻对应相同业务编号的数据中只有一项数据被配置有所述处理权限;通过每个执行机将各自的被配置有所述处理权限的数据传送至数据存储集群以执行数据更新处理;当一执行机中被配置有所述处理权限的数据被执行完所述数据更新处理之后,该执行机释放该数据的所述处理权限。
可选地,所述预设算法为哈希算法或一致性哈希算法。
可选地,在每个执行机中按照预设规则配置本执行机中数据的处理权限的步骤,包括:按照数据达到本执行机的时间逐一配置各项数据的处理权限,其中,在配置每项数据的处理权限时,执行如下步骤:步骤一,判断与该项数据相同业务编号的其他数据中是否有数据已被配置有所述处理权限,若是,则执行步骤二,若否,则执行步骤三;步骤二,等待预设时间间隔,然后返回执行所述步骤一;步骤三,使该项数据被配置有所述处理权限。
可选地,所述输入的数据包括时间戳信息,所述执行数据更新处理的步骤包括:对每一项传送到所述数据存储集群的数据,所述数据存储集群判断是否存在与该传送的数据相同业务编号的已存数据;若是,则比对所述已存数据与所述传送的数据二者的时间戳信息,将所述二者中时间戳最新的数据作为新的已存数据;若否,则将所述传送的数据存入所述数据存储集群。
可选地,所述处理权限为使用线程的权限,通过每个执行机将各自的被配置有所述处理权限的数据传送至数据存储集群的步骤,包括:通过每个执行机将各自的被配置有使用线程的权限的数据通过随机分配的线程传送至数据存储集群,所述该执行机释放该数据的所述处理权限的步骤,包括:所述该执行机清除该数据对线程的占用,判断与该项数据相同业务编号的其他数据中是否有数据已被配置有所述处理权限的步骤,包括:判断与该项数据相同业务编号的其他数据中是否有数据正在占用线程。
可选地,在每个执行机中使用Java内置的多线程哈希集合按照预设规则配置本执行机中数据的处理权限。
根据本发明实施例的另一方面,提供了一种数据更新装置。
一种数据更新装置,包括:数据分发模块,用于利用预设算法将输入的数据中对应相同业务编号的数据分发到同一执行机;权限配置模块,用于在每个执行机中按照预设规则配置本执行机中数据的处理权限,所述预设规则为:在同一时刻对应相同业务编号的数据中只有一项数据被配置有所述处理权限;数据传送模块,用于通过每个执行机将各自的被配置有所述处理权限的数据传送至数据存储集群以执行数据更新处理;权限释放模块,用于当一执行机中被配置有所述处理权限的数据被执行完所述数据更新处理之后,该执行机释放该数据的所述处理权限。
可选地,所述预设算法为哈希算法或一致性哈希算法。
可选地,所述权限配置模块还用于:按照数据达到本执行机的时间逐一配置各项数据的处理权限,其中,在配置每项数据的处理权限时,执行如下步骤:步骤一,判断与该项数据相同业务编号的其他数据中是否有数据已被配置有所述处理权限,若是,则执行步骤二,若否,则执行步骤三;步骤二,等待预设时间间隔,然后返回执行所述步骤一;步骤三,使该项数据被配置有所述处理权限。
可选地,所述输入的数据包括时间戳信息,所述执行数据更新处理的步骤包括:对每一项传送到所述数据存储集群的数据,所述数据存储集群判断是否存在与该传送的数据相同业务编号的已存数据;若是,则比对所述已存数据与所述传送的数据二者的时间戳信息,将所述二者中时间戳最新的数据作为新的已存数据;若否,则将所述传送的数据存入所述数据存储集群。
可选地,所述处理权限为使用线程的权限,所述数据传送模块还用于:通过每个执行机将各自的被配置有使用线程的权限的数据通过随机分配的线程传送至数据存储集群,所述权限释放模块还用于:所述该执行机清除该数据对线程的占用,所述权限配置模块还用于:判断与该项数据相同业务编号的其他数据中是否有数据正在占用线程。
可选地,所述权限配置模块还用于:在每个执行机中使用Java内置的多线程哈希集合按照预设规则配置本执行机中数据的处理权限。
根据本发明实施例的又一方面,提供了一种服务器。
一种服务器,包括:一个或多个处理器;存储器,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现数据更新方法。
根据本发明实施例的又一方面,提供了一种计算机可读介质。
一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现数据更新方法。
上述发明中的一个实施例具有如下优点或有益效果:利用预设算法将输入的数据中对应相同业务编号的数据分发到同一执行机;在每个执行机中按照预设规则配置本执行机中数据的处理权限,其中预设规则为在同一时刻对应相同业务编号的数据中只有一项数据被配置有处理权限;通过每个执行机将各自的被配置有处理权限的数据传送至数据存储集群以执行数据更新处理;当一执行机中被配置有处理权限的数据被执行完数据更新处理之后,该执行机释放该数据的处理权限。能够在保证数据正确更新的前提下,降低处理延迟,提升系统吞吐量。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明实施例的数据更新方法的主要步骤示意图;
图2是根据本发明实施例的订单状态数据更新方法的框架示意图;
图3是根据本发明实施例的基于一致性哈希算法分发订单状态数据的订单状态数据更新流程示意图;
图4是根据本发明实施例的数据更新装置的主要模块示意图;
图5是本发明实施例可以应用于其中的示例性系统架构图;
图6是适于用来实现本发明实施例的服务器的计算机系统的结构示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1是根据本发明实施例的数据更新方法的主要步骤示意图。
如图1所示,本发明实施例的数据更新方法主要包括如下的步骤S101至步骤S104。
步骤S101:利用预设算法将输入的数据中对应相同业务编号的数据分发到同一执行机。
其中,输入的数据可包括时间戳信息,本发明实施例的数据更新主要是根据输入的数据将已存数据更新为时间戳最新的数据,因此,本发明实施例的数据更新方法适用于各种数据更新的场景,例如电商领域的订单状态数据更新的场景,相应地,输入的数据可以为订单状态数据,业务编号可以为订单号。
预设算法可以为哈希算法或一致性哈希算法。需要说明的是,此处所述的哈希算法可以为除一致性哈希算法之外各种哈希算法。
步骤S102:在每个执行机中按照预设规则配置本执行机中数据的处理权限。
具体可按照数据达到本执行机的时间逐一配置各项数据的处理权限,其中,在配置每项数据的处理权限时,执行如下步骤:
步骤一,判断与该项数据相同业务编号的其他数据中是否有数据已被配置有处理权限,若是,则执行步骤二,若否,则执行步骤三;
步骤二,等待预设时间间隔,然后返回执行步骤一;
步骤三,使该项数据被配置有处理权限。
其中,预设规则为:在同一时刻对应相同业务编号的数据中只有一项数据被配置有处理权限。
在每个执行机中,可使用Java内置的多线程哈希集合按照预设规则配置本执行机中数据的处理权限。
处理权限具体可以为使用线程的权限。
步骤S103:通过每个执行机将各自的被配置有处理权限的数据传送至数据存储集群以执行数据更新处理。
通过每个执行机将各自的被配置有处理权限的数据传送至数据存储集群的步骤,具体可以包括:通过每个执行机将各自的被配置有使用线程的权限的数据通过随机分配的线程传送至数据存储集群。
当一项数据被配置有使用线程的权限之后,可以被随机分配一线程以处理该项数据,该线程处理该项数据主要是将该项数据传送到数据存储集群并在数据存储集群中执行数据更新处理,具体地,该线程可以调用数据存储集群中执行数据更新处理的方法,将数据传送到数据存储集群,由数据存储集群执行该方法以实现数据更新处理。
数据存储集群例如Redis集群。
执行数据更新处理的步骤具体可以包括:对每一项传送到数据存储集群的数据,数据存储集群判断是否存在与该传送的数据相同业务编号的已存数据;若是,则比对已存数据与传送的数据二者的时间戳信息,将二者中时间戳最新的数据作为新的已存数据;若否,则将传送的数据存入数据存储集群。
步骤S104:当一执行机中被配置有处理权限的数据被执行完数据更新处理之后,该执行机释放该数据的处理权限。
执行机释放数据的处理权限主要是清除该数据对线程的占用。
步骤S102中判断与该项数据相同业务编号的其他数据中是否有数据已被配置有处理权限的步骤,具体可以包括:判断与该项数据相同业务编号的其他数据中是否有数据正在占用线程。
下面以输入的数据为订单状态数据、业务编号为订单号为例详细介绍本发明实施例的数据更新方法的主要流程。
图2是根据本发明实施例的订单状态数据更新方法的框架示意图。如图2所示,以输入的数据为订单状态数据为例,本发明实施例的订单状态数据更新方法可由服务器执行,其中可以包括主服务器和多个执行机(执行机也可称为实例),通过主服务器接收通过各个订单状态数据管道(订单状态数据管道1,订单状态数据管道2,订单状态数据管道3,订单状态数据管道4,……)输入的订单状态数据,利用哈希算法将输入的数据重新分发,将其中对应相同订单号的订单状态数据分发到同一执行机,通过各执行机(执行机1,执行机2,执行机3,执行机4,……)将各自的订单状态数据传送到数据存储集群以执行数据更新处理。
在哈希算法的实现上,可将订单状态数据的数量M以执行机的数量N(N为自然数)取余的方法将订单状态数据分发到各执行机,以10台执行机(N=10)、20条订单状态数据(M=20)为例,每遇10取余,则第1条和第11条订单状态数据被分发到第1台执行机,第2条和第12条订单状态数据被分发到第2台执行机,……,以此类推。本发明实施例所使用的哈希算法具体为高可靠高容错的一致性哈希算法,一致性哈希算法是一种稳定性更好的哈希算法,本领域技术人员可以理解的是,本发明实施例通过其他哈希算法也可以实现。
图3是根据本发明实施例的基于一致性哈希算法分发订单状态数据的订单状态数据更新流程示意图。如图3所示,当执行机收到经过一致性哈希算法分发后的订单状态数据之后,通过Java内置的ConcurrentHashMap(即多线程哈希集合,也称线程安全的哈希集合)为该执行机中的订单状态数据配置处理权限(处理权限具体可以为使用线程的权限),其中,当该执行机处理某一条订单状态数据时,ConcurrentHashMap判断是否将处理权限配置给该条订单状态数据,具体地,ConcurrentHashMap判断是否有其他线程在处理具有相同订单号的其他订单状态数据,即,判断是否有具有相同订单号的其他订单状态数据正在占用线程,如果有,则等待预设时间间隔(即阻塞时间),预设时间间隔(即阻塞时间)可设置为1ms(毫秒),然后ConcurrentHashMap再次判断是否有其他线程在处理具有相同订单号的其他订单状态数据,直到其他线程处理完具有该相同订单号的其他订单状态数据,ConcurrentHashMap将相同订单号的其他订单状态数据使用线程的权限释放(即清除该相同订单号的其他订单状态数据对线程的占用)之后,ConcurrentHashMap将处理权限(具体为使用线程的权限)配置给该条订单状态数据,从而该条订单状态数据被配置有使用线程的权限,再通过随机分配的线程处理该条订单状态数据。
为该执行机中的订单状态数据配置使用线程的权限的具体算法如下:
一、初始化ConcurrentHashMap,该初始化例如申请内存资源等初始化处理;
二、循环调用ConcurrentHashMap的putIfAbsent方法。putIfAbsent方法有两个参数key和value。以同时被分发到该执行机中的两条订单状态数据为锁单状态数据和删单状态数据为例,那么该执行机在处理锁单状态数据和删单状态数据时分别调用putIfAbsent方法以分别为锁单状态数据和删单状态数据配置各自的使用线程的权限,其中通过抢占的方式确定锁单状态数据和删单状态数据二者中只有一者被配置有使用线程的权限。假设当锁单状态数据被配置有使用线程的权限时,在处理该锁单状态数据时调用的putIfAbsent方法以锁单状态数据的订单号作为key,以随机值作为value,其中该随机值具体可以为锁单状态数据的状态值也可以为其他自定义的随机数,并且该putIfAbsent方法的返回值为NULL,而在处理删单状态数据时调用的putIfAbsent方法的返回值为上述随机值value(具体例如锁单状态数据的状态值或其他自定义随机数);
三、如果为某条订单状态数据配置使用线程的权限而调用的putIfAbsent方法返回值为NULL,表示没有与该条订单状态数据相同订单号的其他订单状态数据被配置有使用线程的权限,而是本条订单状态数据被配置有使用线程的权限,则为本条订单状态数据随机分配一个线程,通过该线程将本条订单状态数据传送至数据存储集群以执行数据更新处理。在执行完成数据更新处理之后调用ConcurrentHashMap的remove方法,删除为本条订单状态数据配置使用线程的权限而调用的putIfAbsent方法的key及相应的订单号,以释放本条订单状态数据的使用线程的权限,从而清除本条订单状态数据对线程的占用;
四、如果为某条订单状态数据配置使用线程的权限而调用的putIfAbsent方法返回不为NULL,表示与该订单状态数据相同订单号的其他订单状态数据被配置有使用线程的权限,即,有线程正在处理该订单号的其他状态信息,则等待处理该其他状态信息的线程处理完成并释放使用线程的权限之后,再调用ConcurrentHashMap的putIfAbsent方法重新进行使用线程的权限的配置,如果配置成功,则该条订单状态信息被配置有使用线程的权限,如果配置失败,则等待一预定时间间隔(例如1毫秒),再重新调用ConcurrentHashMap的putIfAbsent方法以重新配置上述权限,直到被配置有该权限。可以定时轮询是否有线程正在处理该订单号的其他订单状态数据,轮询的间隔时间可以设置为1毫秒或根据需要设置其他值,提取该条订单状态数据的订单号,判断该订单号对应的key是否存在,如果存在,则表明有线程正在处理该订单号的其他订单状态数据,如果该key不存在,则表明处理该订单号的其他订单状态数据的线程已处理完毕。
ConcurrentHashMap的putIfAbsent方法是通过分段锁实现的数据同步方法,以订单号1的订单状态数据a、订单号2的订单状态数据b被分发到该执行机为例(订单号1不同于订单号2),由于ConcurrentHashMap的该分段锁机制,当为订单状态数据a配置使用线程的权限而调用putIfAbsent方法的同时,为订单状态数据b配置使用线程的权限也可以调用putIfAbsent方法,后者不需要等待前者调用结束,且如果二者调用putIfAbsent方法返回值均为NULL,那么,订单状态数据a和订单状态数据b可同时通过各自的线程被传送到数据存储集群,从而能够同步不同线程间的订单状态数据,高效实现数据同步更新。
数据存储集群例如Redis集群。下面以数据存储集群为Redis集群为例,介绍执行数据更新处理的具体过程。由Redis集群执行的数据更新处理主要是检查更新的二步操作(即检查Redis集群中的数据是否需要更新以及在需要更新时执行更新的二步操作),考虑到存在多线程同步问题,该检查更新的二步操作需要包装成原子操作(原子操作是最基本的操作,在执行时其不会被其他线程打断)。
Redis集群执行数据更新处理的过程如下:对传送过来的该条订单状态数据,Redis集群首先检查Redis集群中的已存数据是否需要更新,其中,当Redis集群中没有与该条订单状态数据订单号相同的已存数据,或者,当Redis集群中有与该条订单状态数据订单号相同的已存数据,但该已存数据的时间戳早于该条订单状态数据的时间戳时,Redis集群中的数据需要更新,其中,可以使用Redis集群的get方法来判断Redis集群中是否有与该条订单状态数据订单号相同的已存数据。然后,Redis集群在需要更新数据时执行更新,相应地,当Redis集群中没有与该条订单状态数据订单号相同的已存数据,则Redis集群需将该条订单状态数据插入Redis集群对各订单状态信息的存储记录中以便保存,当Redis集群中有与该条订单状态数据订单号相同的已存数据,但该已存数据的时间戳早于该条订单状态数据的时间戳时,表明Redis集群中记录的是比该条订单状态数据更早的相同订单号的订单状态,则将Redis集群中记录的该订单号的已存数据更新为该条订单状态数据。如果Redis集群中的数据不需要更新,即Redis集群中有与该条订单状态数据订单号相同的已存数据,但该已存数据的时间戳晚于该条订单状态数据的时间戳,表明Redis集群中记录的是该条订单状态数据对应订单号的最新订单状态,则保持Redis集群中与该条订单状态数据订单号相同的已存数据不变。
现有技术中的数据更新方案为了避免数据更新出错,需要在Redis集群中加锁,以使得在检查更新某一订单状态时,其他订单状态处于等待状态直到该订单状态检查更新完毕再进行其他订单状态的检查更新处理,这样会严重影响整个Redis集群的性能,并且Java的事务加锁机制存在加锁流程长以及性能开销大的问题。为克服现有技术的上述缺陷,可以通过使具有相同订单号的状态信息被同一线程进行处理,然而这种方式需要对每个实例(即执行机)接收到的订单状态数据依据线程ID(标识)进行再次分发,实现复杂度较高,而且数据被多次分发,增加了处理延迟。根据本发明实施例,当执行机收到经过一致性哈希算法分发后的订单状态数据之后,通过Java内置的ConcurrentHashMap(即多线程哈希集合,也称线程安全的哈希集合)为该执行机中的订单状态数据配置使用线程的权限,使得在同一时刻对应相同订单号的订单状态数据中只有一条订单状态数据被配置有使用线程的权限,即,在同一时刻只有一个线程处理该订单号的订单状态数据,从而使得通过该唯一线程传送的该订单号的订单状态数据到达Redis集群之后,Redis集群对该订单号的订单状态数据更新不会出错,且无需在Redis集群更新订单状态数据时加锁,克服了现有技术中加锁带来的诸多缺陷。
使用本发明实施例的技术方案,将性能开销大的事务加锁操作转换成基于ConcurrentHashMap的处理权限(具体可以为使用线程的权限)的分配,提升了系统处理能和性能,可以使得单条订单状态数据的平均处理时间由现有技术基于加锁的方案的10ms下降至3ms,而且系统吐吞量大幅提升,此外,使用一致性哈希算法则从数据分发角度进一步提升了系统的稳定性。
图4是根据本发明实施例的数据更新装置的主要模块示意图。
如图4所示,本发明实施例的数据更新装置400主要包括数据分发模块401、权限配置模块402、数据传送模块403、权限释放模块404。
数据分发模块401,用于利用预设算法将输入的数据中对应相同业务编号的数据分发到同一执行机。
其中,预设算法可以为哈希算法或一致性哈希算法。
输入的数据可以包括时间戳信息。
权限配置模块402,用于在每个执行机中按照预设规则配置本执行机中数据的处理权限,预设规则为:在同一时刻对应相同业务编号的数据中只有一项数据被配置有处理权限。
处理权限可以为使用线程的权限。
权限配置模块402还可以用于:按照数据达到本执行机的时间逐一配置各项数据的处理权限,其中,在配置每项数据的处理权限时,执行如下步骤:步骤一,判断与该项数据相同业务编号的其他数据中是否有数据已被配置有处理权限,若是,则执行步骤二,若否,则执行步骤三;步骤二,等待预设时间间隔,然后返回执行步骤一;步骤三,使该项数据被配置有处理权限。
权限配置模块402还可以用于:判断与该项数据相同业务编号的其他数据中是否有数据正在占用线程。
权限配置模块402还可以用于:在每个执行机中使用Java内置的多线程哈希集合按照预设规则配置本执行机中数据的处理权限。
数据传送模块403,用于通过每个执行机将各自的被配置有处理权限的数据传送至数据存储集群以执行数据更新处理。
数据传送模块403还可以用于:通过每个执行机将各自的被配置有使用线程的权限的数据通过随机分配的线程传送至数据存储集群。
执行数据更新处理的步骤具体可以包括:对每一项传送到数据存储集群的数据,数据存储集群判断是否存在与该传送的数据相同业务编号的已存数据;若是,则比对已存数据与所述传送的数据二者的时间戳信息,将二者中时间戳最新的数据作为新的已存数据;若否,则将传送的数据存入数据存储集群。
权限释放模块404,用于当一执行机中被配置有处理权限的数据被执行完数据更新处理之后,该执行机释放该数据的处理权限,其中,该执行机释放数据的处理权限主要是清除该数据对线程的占用。
图5示出了可以应用本发明实施例的数据更新方法或数据更新装置的示例性系统架构500。
如图5所示,系统架构500可以包括终端设备501、502、503,网络504和服务器505。网络504用以在终端设备501、502、503和服务器505之间提供通信链路的介质。网络504可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备501、502、503通过网络504与服务器505交互,以接收或发送消息等。终端设备501、502、503上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等。
终端设备501、502、503可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器505可以是提供各种服务的服务器,例如对用户利用终端设备501、502、503所浏览的购物类网站提供支持的后台管理服务器。后台管理服务器可以对接收到的产品信息查询请求等数据进行分析等处理,并将处理结果(产品的订单状态数据)反馈给终端设备。
需要说明的是,本发明实施例所提供的数据更新方法一般由服务器505执行,相应地,数据更新装置一般设置于服务器505中。
应该理解,图5中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
下面参考图6,其示出了适于用来实现本申请实施例的服务器的计算机系统600的结构示意图。图6示出的服务器仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图6所示,计算机系统600包括中央处理单元(CPU)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储部分608加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。在RAM 603中,还存储有系统600操作所需的各种程序和数据。CPU 601、ROM 602以及RAM 603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
以下部件连接至I/O接口605:包括键盘、鼠标等的输入部分606;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至I/O接口605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装入存储部分608。
特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。在该计算机程序被中央处理单元(CPU)601执行时,执行本申请的系统中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括数据分发模块401、权限配置模块402、数据传送模块403、权限释放模块404。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,数据分发模块401还可以被描述为“用于利用预设算法将输入的数据中对应相同业务编号的数据分发到同一执行机的模块”。
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:利用预设算法将输入的数据中对应相同业务编号的数据分发到同一执行机;在每个执行机中按照预设规则配置本执行机中数据的处理权限,预设规则为:在同一时刻对应相同业务编号的数据中只有一项数据被配置有处理权限;通过每个执行机将各自的被配置有处理权限的数据传送至数据存储集群以执行数据更新处理;当一执行机中被配置有处理权限的数据被执行完数据更新处理之后,该执行机释放该数据的处理权限。
根据本发明实施例的技术方案,利用预设算法将输入的数据中对应相同业务编号的数据分发到同一执行机;在每个执行机中按照预设规则配置本执行机中数据的处理权限,其中预设规则为在同一时刻对应相同业务编号的数据中只有一项数据被配置有处理权限;通过每个执行机将各自的被配置有处理权限的数据传送至数据存储集群以执行数据更新处理;当一执行机中被配置有处理权限的数据被执行完数据更新处理之后,该执行机释放该数据的处理权限。使用本发明实施例的技术方案,能够在保证数据正确更新的前提下,降低处理延迟,提升系统吞吐量。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
Claims (14)
1.一种数据更新方法,其特征在于,包括:
利用预设算法将输入的数据中对应相同业务编号的数据分发到同一执行机;
在每个执行机中根据数据达到本执行机的时间,按照预设规则配置本执行机中数据的处理权限,所述预设规则为:在同一时刻对应相同业务编号的数据中只有一项数据被配置有所述处理权限;
通过每个执行机将各自的被配置有所述处理权限的数据传送至数据存储集群以执行数据更新处理;
当一执行机中被配置有所述处理权限的数据被执行完所述数据更新处理之后,该执行机释放该数据的所述处理权限。
2.根据权利要求1所述的方法,其特征在于,所述预设算法为哈希算法或一致性哈希算法。
3.根据权利要求1所述的方法,其特征在于,在每个执行机中根据数据达到本执行机的时间,按照预设规则配置本执行机中数据的处理权限的步骤,包括:
按照数据达到本执行机的时间逐一配置各项数据的处理权限,其中,在配置每项数据的处理权限时,执行如下步骤:
步骤一,判断与该项数据相同业务编号的其他数据中是否有数据已被配置有所述处理权限,若是,则执行步骤二,若否,则执行步骤三;
步骤二,等待预设时间间隔,然后返回执行所述步骤一;
步骤三,使该项数据被配置有所述处理权限。
4.根据权利要求1所述的方法,其特征在于,所述输入的数据包括时间戳信息,
所述执行数据更新处理的步骤包括:
对每一项传送到所述数据存储集群的数据,所述数据存储集群判断是否存在与该传送的数据相同业务编号的已存数据;
若是,则比对所述已存数据与所述传送的数据二者的时间戳信息,将所述二者中时间戳最新的数据作为新的已存数据;
若否,则将所述传送的数据存入所述数据存储集群。
5.根据权利要求3所述的方法,其特征在于,所述处理权限为使用线程的权限,
通过每个执行机将各自的被配置有所述处理权限的数据传送至数据存储集群的步骤,包括:通过每个执行机将各自的被配置有使用线程的权限的数据通过随机分配的线程传送至数据存储集群,
所述该执行机释放该数据的所述处理权限的步骤,包括:所述该执行机清除该数据对线程的占用,
判断与该项数据相同业务编号的其他数据中是否有数据已被配置有所述处理权限的步骤,包括:判断与该项数据相同业务编号的其他数据中是否有数据正在占用线程。
6.根据权利要求1所述的方法,其特征在于,在每个执行机中使用Java内置的多线程哈希集合按照预设规则配置本执行机中数据的处理权限。
7.一种数据更新装置,其特征在于,包括:
数据分发模块,用于利用预设算法将输入的数据中对应相同业务编号的数据分发到同一执行机;
权限配置模块,用于在每个执行机中根据数据达到本执行机的时间,按照预设规则配置本执行机中数据的处理权限,所述预设规则为:在同一时刻对应相同业务编号的数据中只有一项数据被配置有所述处理权限;
数据传送模块,用于通过每个执行机将各自的被配置有所述处理权限的数据传送至数据存储集群以执行数据更新处理;
权限释放模块,用于当一执行机中被配置有所述处理权限的数据被执行完所述数据更新处理之后,该执行机释放该数据的所述处理权限。
8.根据权利要求7所述的装置,其特征在于,所述预设算法为哈希算法或一致性哈希算法。
9.根据权利要求7所述的装置,其特征在于,所述权限配置模块还用于:
按照数据达到本执行机的时间逐一配置各项数据的处理权限,其中,在配置每项数据的处理权限时,执行如下步骤:
步骤一,判断与该项数据相同业务编号的其他数据中是否有数据已被配置有所述处理权限,若是,则执行步骤二,若否,则执行步骤三;
步骤二,等待预设时间间隔,然后返回执行所述步骤一;
步骤三,使该项数据被配置有所述处理权限。
10.根据权利要求7所述的装置,其特征在于,所述输入的数据包括时间戳信息,
所述执行数据更新处理的步骤包括:
对每一项传送到所述数据存储集群的数据,所述数据存储集群判断是否存在与该传送的数据相同业务编号的已存数据;
若是,则比对所述已存数据与所述传送的数据二者的时间戳信息,将所述二者中时间戳最新的数据作为新的已存数据;
若否,则将所述传送的数据存入所述数据存储集群。
11.根据权利要求9所述的装置,其特征在于,所述处理权限为使用线程的权限,
所述数据传送模块还用于:通过每个执行机将各自的被配置有使用线程的权限的数据通过随机分配的线程传送至数据存储集群,
所述权限释放模块还用于:所述该执行机清除该数据对线程的占用,
所述权限配置模块还用于:判断与该项数据相同业务编号的其他数据中是否有数据正在占用线程。
12.根据权利要求7所述的装置,其特征在于,所述权限配置模块还用于:在每个执行机中使用Java内置的多线程哈希集合按照预设规则配置本执行机中数据的处理权限。
13.一种服务器,其特征在于,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如权利要求1-6中任一所述的方法。
14.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-6中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710594880.3A CN109284177B (zh) | 2017-07-20 | 2017-07-20 | 一种数据更新方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710594880.3A CN109284177B (zh) | 2017-07-20 | 2017-07-20 | 一种数据更新方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109284177A CN109284177A (zh) | 2019-01-29 |
CN109284177B true CN109284177B (zh) | 2021-03-30 |
Family
ID=65185367
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710594880.3A Active CN109284177B (zh) | 2017-07-20 | 2017-07-20 | 一种数据更新方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109284177B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110825762A (zh) * | 2019-11-14 | 2020-02-21 | 北京融易做科技有限公司 | 数据存储方法、装置及系统 |
CN114358779B (zh) * | 2022-03-18 | 2022-06-28 | 汇承金融科技服务(南京)有限公司 | 订单处理方法以及装置、存储介质、电子装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102354316A (zh) * | 2011-09-22 | 2012-02-15 | 用友软件股份有限公司 | 数据更新装置和数据更新方法 |
CN102467570A (zh) * | 2010-11-17 | 2012-05-23 | 日电(中国)有限公司 | 用于分布式数据仓库的连接查询系统和方法 |
CN103632250A (zh) * | 2013-12-06 | 2014-03-12 | 湖南御家汇化妆品有限公司 | 一种销售订单快速排序分组筛选方法 |
CN105045791A (zh) * | 2014-03-26 | 2015-11-11 | 日本电气株式会社 | 数据库设备 |
CN105139151A (zh) * | 2015-09-25 | 2015-12-09 | 佛山市中格威电子有限公司 | 一种基于二维码技术的信息化管理系统 |
CN106651402A (zh) * | 2016-12-29 | 2017-05-10 | 江西博瑞彤芸科技有限公司 | 用于商品退货操作的数据处理方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8677344B2 (en) * | 2008-10-10 | 2014-03-18 | Sony Corporation | Software upgrade using single source channel |
US20150199318A1 (en) * | 2011-09-02 | 2015-07-16 | Micah Lemonik | System and Method for Using a Third-Party Add-On in a Collaborative On-Line Software Development Environment |
US9684853B2 (en) * | 2014-04-15 | 2017-06-20 | Kyocera Document Solutions Inc. | Image forming apparatus that writes data from volatile memory to non-volatile memory |
US9684689B2 (en) * | 2015-02-03 | 2017-06-20 | Ca, Inc. | Distributed parallel processing system having jobs processed by nodes based on authentication using unique identification of data |
-
2017
- 2017-07-20 CN CN201710594880.3A patent/CN109284177B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102467570A (zh) * | 2010-11-17 | 2012-05-23 | 日电(中国)有限公司 | 用于分布式数据仓库的连接查询系统和方法 |
CN102354316A (zh) * | 2011-09-22 | 2012-02-15 | 用友软件股份有限公司 | 数据更新装置和数据更新方法 |
CN103632250A (zh) * | 2013-12-06 | 2014-03-12 | 湖南御家汇化妆品有限公司 | 一种销售订单快速排序分组筛选方法 |
CN105045791A (zh) * | 2014-03-26 | 2015-11-11 | 日本电气株式会社 | 数据库设备 |
CN105139151A (zh) * | 2015-09-25 | 2015-12-09 | 佛山市中格威电子有限公司 | 一种基于二维码技术的信息化管理系统 |
CN106651402A (zh) * | 2016-12-29 | 2017-05-10 | 江西博瑞彤芸科技有限公司 | 用于商品退货操作的数据处理方法 |
Non-Patent Citations (1)
Title |
---|
基于数据服务的数据组合视图的优化更新;张鹏等;《计算机学报》;20111231;第34卷(第12期);第2344-2354页 * |
Also Published As
Publication number | Publication date |
---|---|
CN109284177A (zh) | 2019-01-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109274731B (zh) | 基于多租户技术的web服务的部署、调用方法和装置 | |
CN109032796B (zh) | 一种数据处理方法和装置 | |
CN111897633A (zh) | 一种任务处理的方法和装置 | |
CN110928912A (zh) | 一种生成唯一标识的方法和装置 | |
CN111478781B (zh) | 一种消息广播的方法和装置 | |
CN110909022A (zh) | 一种数据查询方法和装置 | |
CN109284177B (zh) | 一种数据更新方法和装置 | |
CN115525411A (zh) | 处理业务请求的方法、装置、电子设备和计算机可读介质 | |
CN112860505A (zh) | 一种分布式集群的调控方法及装置 | |
CN112398669A (zh) | 一种Hadoop部署方法和装置 | |
CN111290842A (zh) | 一种任务执行方法和装置 | |
CN110413427B (zh) | 订阅数据拉取方法、装置、设备及存储介质 | |
CN113010238A (zh) | 一种微应用调用接口的权限确定方法、装置和系统 | |
CN112306695A (zh) | 数据的处理方法、装置、电子设备及计算机存储介质 | |
CN108683608B (zh) | 分配流量的方法和装置 | |
CN113541987A (zh) | 一种更新配置数据的方法和装置 | |
CN113765871A (zh) | 堡垒机管理的方法和装置 | |
CN114374657B (zh) | 一种数据处理方法和装置 | |
CN112948138A (zh) | 一种处理消息的方法和装置 | |
CN112214500A (zh) | 数据对比的方法、装置、电子设备和存储介质 | |
CN114756173A (zh) | 文件合并的方法、系统、设备和计算机可读介质 | |
CN113760487A (zh) | 一种业务处理方法和装置 | |
CN112182003A (zh) | 一种数据同步方法和装置 | |
CN114528140A (zh) | 一种业务降级的方法和装置 | |
CN110909269B (zh) | 一种日志上报的方法和装置 |
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 |