CN105700962A - 数据更新处理方法及装置 - Google Patents
数据更新处理方法及装置 Download PDFInfo
- Publication number
- CN105700962A CN105700962A CN201410705473.1A CN201410705473A CN105700962A CN 105700962 A CN105700962 A CN 105700962A CN 201410705473 A CN201410705473 A CN 201410705473A CN 105700962 A CN105700962 A CN 105700962A
- Authority
- CN
- China
- Prior art keywords
- data
- shared drive
- updated
- completion message
- message
- 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.)
- Withdrawn
Links
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/54—Interprogram communication
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
技术领域
本发明涉及通信领域,具体而言,涉及数据更新处理方法及装置。
背景技术
随着Internet的发展,路由器的功能日益复杂,集中式的控制面处理已经不能满足运营商的需求,控制面的分布式、多进程的实现方式成为由器的一个发展趋势。IP的开放性、多样性、以及传统电信的各种业务都不断的迁移到IP承载上,导致IP各种新协议、新业务不断快速推出。为支持协议功能的裁剪、独立发布版本、独立升级,导致了多进程的实现方式,且进程划分的非常细,甚至每个协议都运行在独立的进程空间中。支持协议分布式运行,不同的协议进程可运行在不同的协议处理单元中。另外,采用多进程的实现方式,也解决了软件各组件故障相互影响的问题,避免随着软件规模扩大,开发功能的难度不断增加及版本稳定性降低,故障收敛慢的问题。
各协议运行在不同进程,但有些数据信息是各个进程都需要的,例如端口信息。在运行的协议进程越来越多的情况下,如果各进程都保存一份重复的数据,对内存资源是很大的浪费。在运营商对通信设备功能需求不断增多,性能要求不断提高的情况下,设备需要支持的端口类型、数量越来越多,系统的内存资源越来越紧缺(其对内存的消耗是按照端口数量和协议进程数量乘积的形式进行增长)。图1是相关技术中数据同步模型的示意图,如图1所示,在使用消息进行进程间数据同步的方式下,各个进程空间都申请内存保存了一份数据。
如果各个进程使用共享内存的方式对数据进行共享访问,则可以极大的降低系统内存的消耗。但操作系统所支持的共享内存,仅提供进程对共享内存进行主动读、写。在共享内存中的数据变化时,相关进程无法及时的被动感知,只能在后续主动查询时得到变化后的数据,此时已无法知道具体哪些信息字段发生了变化,以及变化前的值是多少。这种方式难以满足一些场景的实现需要。例如,对端口进行IP配置,将IP信息写入共享内存后,路由协议进程需要及时感知到端口上IP的添加事件,对路由进行重新计算;将光纤插入PPP口,PPP端口的物理UP状态更新到共享内存后,PPP协议进程需要及时感知物理UP事件,和对端设备进行协商建链。如果各个协议都定时轮询检查数据的变化,定时周期太长,则及时性得不到保证;定时周期太短,则对系统性能是很大的消耗,影响设备对正常业务的处理能力。且通过轮询的方式,在数据修或删除之后才能发现,已获取不到修改前或删除前的数据。
针对相关技术中多进程使用共享内存时,无法及时感知共享内存中数据变化的问题,目前尚未提出有效的解决方案。
发明内容
本发明提供了数据更新处理方法及装置,以至少解决相关技术中多进程使用共享内存时,无法及时感知共享内存中数据变化的问题。
根据本发明的一个方面,提供了一种数据更新处理方法,包括:对共享内存中的数据进行更新;向一个或多个线程发送对共享内存中的所述数据更新完成的完成消息;根据所述完成消息将共享内存中更新后的所述数据提供给所述一个或多个线程进行业务处理。
进一步地,在对共享内存中的所述数据进行更新之前还包括:向所述一个或多个线程发送指示消息,其中,所述指示消息用于指示所述一个或多个线程所述数据处于更新状态。
根据本发明的另一方面,提供了一种数据更新处理方法,包括:接收对共享内存中的数据更新完成的完成消息;根据所述完成消息访问共享内存中更新完成后的所述数据。
进一步地,在接收对共享内存中的数据更新完成的完成消息之前还包括:接收用于指示共享内存中的所述数据处于更新状态的指示消息;
根据所述指示消息建立所述数据处于更新状态的标识;
在接收到对共享内存中的数据更新完成的完成消息之后,删除所述标识。
进一步地,在根据所述完成消息访问共享内存中更新完成后的所述数据之前,还包括以下至少之一:在对共享内存中的数据更新为添加数据的情况下,接收携带有所述数据的关键字的指示消息,创建与所述数据的关键字对应的空数据,在对所述共享内存添加数据完成后,删除所述空数据;在对共享内存中的数据更新为修改或删除数据的情况下,接收携带有所述数据的关键字的指示消息,根据所述数据的关键字获取共享内存中的更新前的旧数据并进行备份,在所述共享内存修改或删除数据完成后,删除所述旧数据;在对共享内存中的数据更新为一个或多个线程新加入或重启的情况下,接收携带有所述数据的关键字的指示消息,根据所述数据的关键字标记为整体同步阶段所述数据已创建,在接收到共享内存中的所有数据创建完成后整体同步完成消息后,删除所有已创建标记;在对共享内存中的数据更新为Source进程重启的情况下,创建用于禁止从所述共享内存中访问数据的空数据;或者,标记上用于继续访问所述共享内存中数据的老化标记。
根据本发明的另一方面,提供了一种数据更新处理装置,包括:更新模块,用于对共享内存中的数据进行更新;第一发送模块,用于向一个或多个线程发送对共享内存中的所述数据更新完成的完成消息;提供发送模块,用于根据所述完成消息将共享内存中更新后的所述数据提供给所述一个或多个线程进行业务处理。
进一步地,所述装置还包括:第二发送模块,用于向所述一个或多个线程发送指示消息,其中,所述指示消息用于指示所述一个或多个线程所述数据处于更新状态。
根据本发明的另一方面,提供了一种数据更新处理装置,包括:第一接收模块,用于接收对共享内存中的数据更新完成的完成消息;访问模块,用于根据所述完成消息访问共享内存中更新完成后的所述数据。
进一步地,所述装置还包括:第二接收模块,用于接收用于指示共享内存中的所述数据处于更新状态的指示消息;建立模块,用于根据所述指示消息建立所述数据处于更新状态的标识;删除模块,用于在接收到对共享内存中的数据更新完成的完成消息之后,删除所述标识。
进一步地,所述装置还包括以下至少之一:第一处理模块,用于在对共享内存中的数据更新为添加数据的情况下,接收携带有所述数据的关键字的指示消息,创建与所述数据的关键字对应的空数据,在对所述共享内存添加数据完成后,删除所述空数据;第二处理模块,用于在对共享内存中的数据更新为修改或删除数据的情况下,接收携带有所述数据的关键字的指示消息,根据所述数据的关键字获取共享内存中的更新前的旧数据并进行备份,在所述共享内存修改或删除数据完成后,删除所述旧数据;第三处理模块,用于在对共享内存中的数据更新为一个或多个线程新加入或重启的情况下,接收携带有所述数据的关键字的指示消息,根据所述数据的关键字标记为整体同步阶段所述数据已创建,在接收到共享内存中的所有数据创建完成后整体同步完成消息后,删除所有已创建标记;第四处理模块,用于在对共享内存中的数据更新为Source进程重启的情况下,创建用于禁止从所述共享内存中访问数据的空数据;或者,标记上用于继续访问所述共享内存中数据的老化标记。
通过本发明,采用对共享内存中的数据进行更新;向一个或多个线程发送对共享内存中的所述数据更新完成的完成消息;根据所述完成消息将共享内存中更新后的所述数据提供给所述一个或多个线程进行业务处理,解决了相关技术中多进程使用共享内存时,无法及时感知共享内存中数据变化的问题,从而能够及时获知共享内存中数据的状态。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是相关技术中数据同步模型的示意图;
图2是根据本发明实施例的数据更新处理方法的流程图一;
图3是根据本发明实施例的数据更新处理方法的流程图二;
图4是根据本发明实施例的数据更新处理装置的框图一;
图5是根据本发明优选实施例的数据更新处理装置的框图一;
图6是根据本发明实施例的数据更新处理装置的框图二;
图7是根据本发明优选实施例的数据更新处理装置的框图二;
图8是根据本发明优选实施例的数据更新处理装置的框图三;
图9是根据本发明实施例的数据同步模型的示意图;
图10是根据本发明实施例的数据同步中数据添加的示意图;
图11是根据本发明实施例的数据同步中数据修改的示意图;
图12是根据本发明实施例的数据同步中数据删除的示意图;
图13是根据本发明实施例的数据同步中整体同步的示意图;
图14是根据本发明实施例的数据同步中Source重启的示意图一;
图15是根据本发明实施例的数据同步中Source重启的示意图二;
图16是根据本发明实施例的数据同步模型部署的示意图一;
图17是根据本发明实施例的数据同步模型部署的示意图二;
图18是根据本发明实施例的数据同步模型部署的示意图三;
图19是根据本发明实施例的数据同步模型部署的示意图四;
图20是根据本发明实施例的数据同步模型部署的示意图五。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
在本实施例中提供了一种数据更新处理方法,图2是根据本发明实施例的数据更新处理方法的流程图一,如图2所示,该流程包括如下步骤:
步骤S202,对共享内存中的数据进行更新;
步骤S204,向一个或多个线程发送对共享内存中的该数据更新完成的完成消息;
步骤S206,根据该完成消息将共享内存中更新后的该数据提供给该一个或多个线程进行业务处理。
通过上述步骤,对共享内存中的数据进行更新,向一个或多个线程发送对共享内存中的该数据更新完成的完成消息,根据该完成消息将共享内存中更新后的该数据提供给该一个或多个线程进行业务处理,解决了相关技术中多进程使用共享内存时,无法及时感知共享内存中数据变化的问题,从而能够及时获知共享内存中数据的状态。
进一步地,在对共享内存中的该数据进行更新之前还包括:向该一个或多个线程发送指示消息,其中,该指示消息用于指示该一个或多个线程该数据处于更新状态。
本发明实施例还提供了一种数据更新处理方法,图3是根据本发明实施例的数据更新处理方法的流程图二,如图3所示,包括:
步骤S302,接收对共享内存中的数据更新完成的完成消息;
步骤S304,根据该完成消息访问共享内存中更新完成后的该数据。
通过上述步骤,接收对共享内存中的数据更新完成的完成消息,根据该完成消息访问共享内存中更新完成后的该数据,解决了相关技术中多进程使用共享内存时,无法及时感知共享内存中数据变化的问题,从而能够及时获知共享内存中数据的状态。
为了更好的获知共享内存中数据的状态,在一个可选的实施例中中,在接收对共享内存中的数据更新完成的完成消息之前,接收用于指示共享内存中的该数据处于更新状态的指示消息;根据该指示消息建立该数据处于更新状态的标识;在接收到对共享内存中的数据更新完成的完成消息之后,删除该标识,之后确定共享内存中的数据位更新后的数据。
在根据该完成消息访问共享内存中更新完成后的该数据之前,还可以包括以下至少之一:在对共享内存中的数据更新为添加数据的情况下,接收携带有该数据的关键字的指示消息,创建与该数据的关键字对应的空数据,在对该共享内存添加数据完成后,删除该空数据;在对共享内存中的数据更新为修改或删除数据的情况下,接收携带有该数据的关键字的指示消息,根据该数据的关键字获取共享内存中的更新前的旧数据并进行备份,在该共享内存修改或删除数据完成后,删除该旧数据;在对共享内存中的数据更新为一个或多个线程新加入或重启的情况下,接收携带有该数据的关键字的指示消息,根据该数据的关键字标记为整体同步阶段该数据已创建,在接收到共享内存中的所有数据创建完成后整体同步完成消息后,删除所有已创建标记;在对共享内存中的数据更新为Source进程重启的情况下,创建用于禁止从该共享内存中访问数据的空数据;或者,标记上用于继续访问该共享内存中数据的老化标记。
本发明实施例提供了一种数据更新处理装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图4是根据本发明实施例的数据更新处理装置的框图一,如图4所示,包括:更新模块42、第一发送模块44和提供发送模块46,下面对各个模块进行简要说明。
更新模块42,用于对共享内存中的数据进行更新;
第一发送模块44,用于向一个或多个线程发送对共享内存中的该数据更新完成的完成消息;
提供发送模块46,用于根据该完成消息将共享内存中更新后的该数据提供给该一个或多个线程进行业务处理。
图5是根据本发明优选实施例的数据更新处理装置的框图一,如图5所示,该装置还包括:
第二发送模块52,用于向该一个或多个线程发送指示消息,其中,该指示消息用于指示该一个或多个线程该数据处于更新状态。
本发明实施例还提供了一种数据更新处理装置,图6是根据本发明实施例的数据更新处理装置的框图二,如图6所示,包括:
第一接收模块62,用于接收对共享内存中的数据更新完成的完成消息;
访问模块64,用于根据该完成消息访问共享内存中更新完成后的该数据。
图7是根据本发明优选实施例的数据更新处理装置的框图二,如图7所示,该装置还包括:
第二接收模块72,用于接收用于指示共享内存中的该数据处于更新状态的指示消息;
建立模块74,用于根据该指示消息建立该数据处于更新状态的标识;
删除模块76,用于在接收到对共享内存中的数据更新完成的完成消息之后,删除该标识。
图8是根据本发明优选实施例的数据更新处理装置的框图三,如图8所示,该装置还包括以下至少之一:
第一处理模块82,用于在对共享内存中的数据更新为添加数据的情况下,接收携带有该数据的关键字的指示消息,创建与该数据的关键字对应的空数据,在对该共享内存添加数据完成后,删除该空数据;
第二处理模块84,用于在对共享内存中的数据更新为修改或删除数据的情况下,接收携带有该数据的关键字的指示消息,根据该数据的关键字获取共享内存中的更新前的旧数据并进行备份,在该共享内存修改或删除数据完成后,删除该旧数据;
第三处理模块86,用于在对共享内存中的数据更新为一个或多个线程新加入或重启的情况下,接收携带有该数据的关键字的指示消息,根据该数据的关键字标记为整体同步阶段该数据已创建,在接收到共享内存中的所有数据创建完成后整体同步完成消息后,删除所有已创建标记;
第四处理模块88,用于在对共享内存中的数据更新为Source进程重启的情况下,创建用于禁止从该共享内存中访问数据的空数据;或者,标记上用于继续访问该共享内存中数据的老化标记。
下面以一个或多个线程为Reader为例对本发明实施例进行进一步说明。
本可选实施例使需要访问共享内存的相关进程可及时感知到共享内存中数据的添加、修改、删除操作事件,并依据事件控制进程对共享内存中数据的访问。在感知到数据添加事件前进程不能访问到共享内存中的数据,感知到数据添加事件后才能访问到数据;在感知到数据修改事件前,进程只能访问到修改前的数据,在感知到数据修改事件时,能同时访问到修改前和修改后的数据(可对比修改前、后的数据),在感知到修改事件后,进程可以访问到修改后的数据;在感知数据删除事件前,进程可以访问到共享内存中的数据,感知到数据删除事件后,不能访问到共享内存中的数据。对于进程重启的情况,同样依据事件来控制进程对共享内存的访问。该方法可以使进程参与到共享内存数据添加、修改、删除的过程中,使进程能及时进行相关逻辑处理,并在处理时能获取到所需的数据信息。
本可选实施例提供了一种基于共享内存的数据同步方法,在共享内存中的数据发生变化时,可及时通知到相关进程,并协调进程及时进行相关逻辑处理,即处理时能访问到所需的数据,对于新数据添加,可以获取到新数据;对于数据修改,能获取到修改前和修改后的数据;对于数据删除,能获取到即将删除的数据。在减少内存开销的同时,也满足各种应用场景的要求,达到与使用消息进行进程间数据同步方式同样的效果。
下面基于共享内存的数据同步方法模型中涉及的三个角色进行说明。
源Source,数据的产生源头,接受Writer和Reader注册。
写者Writer,负责将Source产生的数据写入共享内存。
读者Reader,需要访问共享内存数据的进程(或线程),例如各协议进程。
Source是数据的产生源头,可以是一个单独的进程,在该进程空间保存了一份源数据。Source接受Writer和Reader的注册,并以CPU为单位,维护各个CPU上的Writer和Reader的注册信息。一个CPU上可以存在多个Reader,但只能存在一个Writer。在Source中的源数据添加、修改、删除时通过共享内存方式向Reader同步数据,可使Reader感知到数据的添加、修改、删除事件。Writer是负责对共享内存进行写操作的进程(或线程),在收到Source的数据添加、修改、删除消息时,将数据变化写入共享内存。Reader是需要访问共享内存数据的进程,具有对共享内存的只读权限。例如,路由进程、PPP进程等各协议进程。另外,LOD(LocalOldDatabase)是本地“旧数据”库,在共享内存数据修改提交前,在各Reader本地进程空间保存修改前的“旧数据”。LND(LocalNullDatabase)是本地“空数据”库,在共享内存数据创建前,在各Reader本地进程空间创建相应数据的“空数据”,用于表示相应数据还没有创建。当某进程本地存在“空数据”时,即使共享内存中已经存在相应的数据,对该进程也不可见。
图9是根据本发明实施例的数据同步模型的示意图,如图9所示,Source中数据添加、修改、删除时,首先通知各个Reader进行预处理,所有Reader预处理完成后,通知Writer更新共享内存中的数据,Writer操作完成后,Source再通知各个Reader更新完成,Reader进行相应的业务逻辑处理。
图10是根据本发明实施例的数据同步中数据添加的示意图,如图10所示,Source通过消息将数据的关键字发送给Reader,通知Reader在LND中创建该关键字对应的“空数据”,以表示该关键字对应的数据还没有创建(即使共享内存中已经有了,也不可见);所有Reader创建完“空数据”后,Source通知Writer在共享内存中创建新数据,完成后Source再通知Reader创建完成,Reader做新数据创建逻辑处理,并将该关键字对应的“空数据”删除,表示该关键字对应的数据已经创建完成,后续Reader可以直接从共享内存中访问该数据。
图11是根据本发明实施例的数据同步中数据修改的示意图,如图11所示,Source通过消息将数据的关键字发送给Reader,Reader通过关键字在共享内存中查询修改前的“旧数据”,并将“旧数据”备份到Reader进程本地的LOD中,以表示共享内存中的该数据处于不稳定状态,正发生变化(LOD中存在“旧数据”时,Reader只能查询到LOD中的“旧数据”,共享内存中的相应数据不可见)。Source通知Writer将共享内存中的数据修改完成后,再通知Reader数据修改完成,Reader做数据修改逻辑处理(此时能访问到LOD中的“旧数据”和共享内存中的修改后的数据,),并将LOD中备份的“旧数据”删除,表示该关键字对应的数据已经修改完成,目前处于稳定状态,后续Reader可以直接从共享内存中访问该数据。
图12是根据本发明实施例的数据同步中数据删除的示意图,如图12所示,Reader进行数据备份的流程与数据修改时所做的备份流程类似。Source通过消息将数据的关键字发送给Reader,Reader通过关键字从共享内存中查询数据,并将数据备份到Reader进程本地的LOD中,以表示共享内存中的该数据处于不稳定状态,正进行删除。Source通知Writer将共享内存中的数据删除完成后,再通知Reader删除完成,Reader做数据删除逻辑处理(此时可以查询到即将删除的数据信息),并将LOD中的备份数据删除,表示该关键字对应的数据已经删除完成。后续Reader在共享内存中将查询不到该关键字对应的数据。
图13是根据本发明实施例的数据同步中整体同步的示意图,如图13所示,对于共享内存中已经存在数据,新的Reader后加入的情况,因该Reader还没有感知过相应数据的创建,没有进行过新数据创建逻辑处理,此时不允许该Reader访问到共享内存中的数据。需要将共享内存中已经存在的数据向Reader进行一次整体同步,Reader感知到数据创建事件后,才能访问到共享内存中的数据。
对于新加入的Reader,将同步状态标记为整体同步阶段,Source直接将已经存在的数据关键字发送给Reader,使Reader感知创建事件。对于已经收到过创建事件的数据,Reader在本地创建相应的记录,打上“已创建”标记。对于具有“已创建”记录的数据,Reader可以在共享内存中查询到数据,否则共享内存中的数据对该Reader不可见。Source将所有的数据通知Reader创建完成后,通知Reader整体同步完成,Reader将同步状态标志修改变化同步阶段,并将本地所有的“已创建”记录删除。
Reader重启的情况下,Reader进程退出时,Source将该Reader从注册列表中删除,数据可继续向其他Reader同步。该Reader起来后,重新向Source注册,Source按照整体同步流程,向该Reader进行数据同步。某个Reader重启过程中,Source可以向其他Reader正常同步数据,对其他Reader无影响。
Source重启:对于Source进程重启的情况,可根据场景需要分别采用如下两种实现方式。
图14是根据本发明实施例的数据同步中Source重启的示意图一,如图14所示,Reader感知到Source退出时,遍历共享内存中的所有数据,进行数据删除逻辑处理,并在LND中创建相应的“空数据”,后续不能从共享内存中访问到相应数据。Writer感知到Source退出后,对共享内存中的数据打上“老化”标记。Source进程重新启动后,重新恢复数据,并向Reader和Writer进行“数据添加”同步流程。Source通过消息将数据的关键字发送给Reader,Reader在LND中创建该关键字对应的“空数据”,若此时LND中已经存在相应的“空数据”,则直接跳过该处理步骤。所有Reader创建完“空数据”后,Source通知Writer在共享内存中创建数据,此时若共享内存中已经存在相应数据,则直接对共享内存中的数据进行更新,并去除该数据的“老化”标记。Writer完成共享内存数据的创建或更新后,Source再通知Reader创建完成,Reader做数据创建逻辑处理,并将相应的“空数据”删除,表示该关键字对应的数据已经创建完成,后续Reader可以直接从共享内存中访问该数据。Source中数据恢复,并同步完成后,通知Reader和Writer进行“垃圾”数据处理,Reader删除LND中的仍然存在的“空数据”,Writer删除共享内存中仍然具有“老化”标记的数据。
图15是根据本发明实施例的数据同步中Source重启的示意图二,如图15所示,Reader感知到Source退出后,遍历共享内存中的所有数据,在本地创建相应的记录,打上“老化”标记,仍然可继续访问共享内存中的数据。Writer感知到Source退出后,对共享内存中的数据打上“老化”标记。Source进程重新起来后,重新恢复数据,并向Reader和Writer进行“数据添加”或“数据修改”同步流程。Source通过消息将数据的关键字发送给Reader,此时若Reader已经存在具有“老化”标记的相应记录,则将共享内存中的“旧数据”备份到本地LOD,并将“老化”标记记录删除;否则Reader在LND中创建该关键字对应的“空数据”。所有Reader预处理完后,Source通知Writer在共享内存中创建数据,此时若共享内存中已经存在相应数据,则直接对共享内存中的数据进行更新,并去除该数据的“老化”标记。Writer完成共享内存数据的创建或更新后,Source通知Reader创建或更新完成,对于存在“空数据”的情况,Reader做数据创建逻辑处理,并将相应的“空数据”删除;对于存在“旧数据”的情况,Reader做数据修改逻辑处理,并将“旧数据”删除。Source中数据恢复,并同步完成后,先通知Reader进行“垃圾”数据处理,Reader对仍然具有“老化”标记记录的数据进行删除逻辑处理(此时仍然可以查询到共享内存中的数据),并删除“老化”标记记录。Reader对“垃圾”数据处理完后,Source再通知Writer进行“垃圾”数据处理,删除共享内存中仍然存在“老化”标记的数据。
在使用该方法进行数据同步时,相关进程可以感知到数据的添加、修改、删除事件,并在感知到事件进行相应的逻辑处理时能获取到相应的数据信息。达到与使用消息进行进程间数据同步同样的效果。进程中的业务可不关心数据是通过何种方式进行同步,只需专注于自身的业务逻辑处理。在数据处于稳定状态时,只有Source进程和共享内存会申请内存保存数据,如图9所示,Reader本地进程空间不再申请内存保存数据,系统内存开销与进程数量不成正比例关系。相比使用消息进行进程间同步的方式,极大的节约了系统内存开销。
对照上述基于共享内存的数据同步模型中的三个角色,在实施部署时,只需要遵循Writer和Reader分布于同一个CPU的原则,部署时有较大的灵活性。在单CPU环境,只需设置一个Writer,在多CPU环境,可在每个CPU上分别设置一个Writer。对于三种角色,也可以按照实际需要,灵活设置。在集中式和分布式环境,可使用的不同部署方式有很多种,下面进行举例说明。
图16是根据本发明实施例的数据同步模型部署的示意图一,如图16所示,集中式环境下,独立设置一个共享内存写者进程(Writer),负责操作共享内存数据。多个Reader可处于同一个进程中,也可处于不同的进程中,Reader所处的进程和Writer进程映射到相同的共享内存空间。
图17是根据本发明实施例的数据同步模型部署的示意图二,如图17所示,集中式环境下,Writer和Source处于同一个进程中,Writer作为Source进程中的一个线程来负责操作共享内存。多个Reader可处于同一个进程中,也可分布在不同的进程中,Reader所处的进程和Writer进程映射到相同的共享内存空间。
图18是根据本发明实施例的数据同步模型部署的示意图三,如图18所示,分布式环境下,R-CPU上的Writer和Source处于同一个进程中,L-CPU中部署单独的Writer进程,分别为各自CPU上的Reader提供数据服务,进程B中有两个线程同时使能共享内存,但是只占一份线性空间,Source仍然看到两个Reader。
图19是根据本发明实施例的数据同步模型部署的示意图四,如图19所示,分布式环境下,各个CPU都独立设置一个共享内存写进程(Writer),负责各自CPU上的共享内存写操作,为各自CPU上的Reader提供数据服务。
图20是根据本发明实施例的数据同步模型部署的示意图五,如图20所示,多个Source的情况,不同的数据可以有不同的Source,但统一由一个Writer负责写共享内存。在集中式环境,多个Source可以处于不同的进程,也可以处于同一进程的不同线程。在分布式环境,多个Source可以处于同一个CPU上,也可以处于不同的CPU上,可采用的部署方式更多。为集中式环境下的两个Source处于不同进程的时的部署方式。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种数据更新处理方法,其特征在于,包括:
对共享内存中的数据进行更新;
向一个或多个线程发送对共享内存中的所述数据更新完成的完成消息;
根据所述完成消息将共享内存中更新后的所述数据提供给所述一个或多个线程进行业务处理。
2.根据权利要求1所述的方法,其特征在于,在对共享内存中的所述数据进行更新之前还包括:
向所述一个或多个线程发送指示消息,其中,所述指示消息用于指示所述一个或多个线程所述数据处于更新状态。
3.一种数据更新处理方法,其特征在于,包括:
接收对共享内存中的数据更新完成的完成消息;
根据所述完成消息访问共享内存中更新完成后的所述数据。
4.根据权利要求3所述的方法,其特征在于,在接收对共享内存中的数据更新完成的完成消息之前还包括:
接收用于指示共享内存中的所述数据处于更新状态的指示消息;
根据所述指示消息建立所述数据处于更新状态的标识;
在接收到对共享内存中的数据更新完成的完成消息之后,删除所述标识。
5.根据权利要求3所述的方法,其特征在于,在根据所述完成消息访问共享内存中更新完成后的所述数据之前,还包括以下至少之一:
在对共享内存中的数据更新为添加数据的情况下,接收携带有所述数据的关键字的指示消息,创建与所述数据的关键字对应的空数据,在对所述共享内存添加数据完成后,删除所述空数据;
在对共享内存中的数据更新为修改或删除数据的情况下,接收携带有所述数据的关键字的指示消息,根据所述数据的关键字获取共享内存中的更新前的旧数据并进行备份,在所述共享内存修改或删除数据完成后,删除所述旧数据;
在对共享内存中的数据更新为一个或多个线程新加入或重启的情况下,接收携带有所述数据的关键字的指示消息,根据所述数据的关键字标记为整体同步阶段所述数据已创建,在接收到共享内存中的所有数据创建完成后整体同步完成消息后,删除所有已创建标记;
在对共享内存中的数据更新为Source进程重启的情况下,创建用于禁止从所述共享内存中访问数据的空数据;或者,标记上用于继续访问所述共享内存中数据的老化标记。
6.一种数据更新处理装置,其特征在于,包括:
更新模块,用于对共享内存中的数据进行更新;
第一发送模块,用于向一个或多个线程发送对共享内存中的所述数据更新完成的完成消息;
提供发送模块,用于根据所述完成消息将共享内存中更新后的所述数据提供给所述一个或多个线程进行业务处理。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括:
第二发送模块,用于向所述一个或多个线程发送指示消息,其中,所述指示消息用于指示所述一个或多个线程所述数据处于更新状态。
8.一种数据更新处理装置,其特征在于,包括:
第一接收模块,用于接收对共享内存中的数据更新完成的完成消息;
访问模块,用于根据所述完成消息访问共享内存中更新完成后的所述数据。
9.根据权利要求8所述的装置,其特征在于,所述装置还包括:
第二接收模块,用于接收用于指示共享内存中的所述数据处于更新状态的指示消息;
建立模块,用于根据所述指示消息建立所述数据处于更新状态的标识;
删除模块,用于在接收到对共享内存中的数据更新完成的完成消息之后,删除所述标识。
10.根据权利要求8所述的装置,其特征在于,所述装置还包括以下至少之一:
第一处理模块,用于在对共享内存中的数据更新为添加数据的情况下,接收携带有所述数据的关键字的指示消息,创建与所述数据的关键字对应的空数据,在对所述共享内存添加数据完成后,删除所述空数据;
第二处理模块,用于在对共享内存中的数据更新为修改或删除数据的情况下,接收携带有所述数据的关键字的指示消息,根据所述数据的关键字获取共享内存中的更新前的旧数据并进行备份,在所述共享内存修改或删除数据完成后,删除所述旧数据;
第三处理模块,用于在对共享内存中的数据更新为一个或多个线程新加入或重启的情况下,接收携带有所述数据的关键字的指示消息,根据所述数据的关键字标记为整体同步阶段所述数据已创建,在接收到共享内存中的所有数据创建完成后整体同步完成消息后,删除所有已创建标记;
第四处理模块,用于在对共享内存中的数据更新为Source进程重启的情况下,创建用于禁止从所述共享内存中访问数据的空数据;或者,标记上用于继续访问所述共享内存中数据的老化标记。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410705473.1A CN105700962A (zh) | 2014-11-26 | 2014-11-26 | 数据更新处理方法及装置 |
PCT/CN2015/087950 WO2016082594A1 (zh) | 2014-11-26 | 2015-08-24 | 数据更新处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410705473.1A CN105700962A (zh) | 2014-11-26 | 2014-11-26 | 数据更新处理方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105700962A true CN105700962A (zh) | 2016-06-22 |
Family
ID=56073550
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410705473.1A Withdrawn CN105700962A (zh) | 2014-11-26 | 2014-11-26 | 数据更新处理方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN105700962A (zh) |
WO (1) | WO2016082594A1 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109343979A (zh) * | 2018-09-28 | 2019-02-15 | 珠海沙盒网络科技有限公司 | 一种配置管理方法及系统 |
CN109814891A (zh) * | 2017-11-16 | 2019-05-28 | 中兴通讯股份有限公司 | 一种数据更新方法及装置 |
CN116401317A (zh) * | 2023-04-19 | 2023-07-07 | 中国环球租赁有限公司 | 一种缓存数据同步方法、装置、电子设备及介质 |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112559196B (zh) * | 2019-09-10 | 2024-03-26 | 航天科工惯性技术有限公司 | 一种进程间通讯数据共享的传输方法 |
CN112379952B (zh) * | 2020-12-09 | 2023-04-07 | 成都傲梅科技有限公司 | 一种跨进程回调的实现方法 |
CN114490141B (zh) * | 2022-04-14 | 2022-07-05 | 中国电子科技集团公司第二十八研究所 | 一种基于共享内存的高并发ipc数据交互方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050044551A1 (en) * | 2003-08-19 | 2005-02-24 | Sodhi Ajit S. | System and method for shared memory based IPC queue template having event based notification |
US20090328059A1 (en) * | 2008-06-27 | 2009-12-31 | Microsoft Corporation | Synchronizing Communication Over Shared Memory |
US20100174875A1 (en) * | 2009-01-08 | 2010-07-08 | David Dice | System and Method for Transactional Locking Using Reader-Lists |
CN102385526A (zh) * | 2011-11-16 | 2012-03-21 | 深圳市大赢家网络有限公司 | 在多进程之间共享股票数据的方法及装置 |
CN102426536A (zh) * | 2011-10-26 | 2012-04-25 | 深圳市亚特尔科技有限公司 | 一种多任务间数据通信的实现方法及系统 |
CN102541663A (zh) * | 2011-12-28 | 2012-07-04 | 创新科软件技术(深圳)有限公司 | 一种多进程使用共享内存进行通信的方法 |
CN103150220A (zh) * | 2011-12-07 | 2013-06-12 | 腾讯科技(深圳)有限公司 | 进程间的通信方法和通信系统 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101207515B (zh) * | 2007-12-12 | 2011-11-30 | 中兴通讯股份有限公司 | 一种多机共享内存的处理方法、实现方法和同步方法 |
CN103064748A (zh) * | 2013-01-05 | 2013-04-24 | 浪潮电子信息产业股份有限公司 | 一种Linux下处理多进程间通讯的方法 |
-
2014
- 2014-11-26 CN CN201410705473.1A patent/CN105700962A/zh not_active Withdrawn
-
2015
- 2015-08-24 WO PCT/CN2015/087950 patent/WO2016082594A1/zh active Application Filing
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050044551A1 (en) * | 2003-08-19 | 2005-02-24 | Sodhi Ajit S. | System and method for shared memory based IPC queue template having event based notification |
US20090328059A1 (en) * | 2008-06-27 | 2009-12-31 | Microsoft Corporation | Synchronizing Communication Over Shared Memory |
US20100174875A1 (en) * | 2009-01-08 | 2010-07-08 | David Dice | System and Method for Transactional Locking Using Reader-Lists |
CN102426536A (zh) * | 2011-10-26 | 2012-04-25 | 深圳市亚特尔科技有限公司 | 一种多任务间数据通信的实现方法及系统 |
CN102385526A (zh) * | 2011-11-16 | 2012-03-21 | 深圳市大赢家网络有限公司 | 在多进程之间共享股票数据的方法及装置 |
CN103150220A (zh) * | 2011-12-07 | 2013-06-12 | 腾讯科技(深圳)有限公司 | 进程间的通信方法和通信系统 |
CN102541663A (zh) * | 2011-12-28 | 2012-07-04 | 创新科软件技术(深圳)有限公司 | 一种多进程使用共享内存进行通信的方法 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109814891A (zh) * | 2017-11-16 | 2019-05-28 | 中兴通讯股份有限公司 | 一种数据更新方法及装置 |
CN109814891B (zh) * | 2017-11-16 | 2023-08-08 | 中兴通讯股份有限公司 | 一种数据更新方法及装置 |
CN109343979A (zh) * | 2018-09-28 | 2019-02-15 | 珠海沙盒网络科技有限公司 | 一种配置管理方法及系统 |
CN116401317A (zh) * | 2023-04-19 | 2023-07-07 | 中国环球租赁有限公司 | 一种缓存数据同步方法、装置、电子设备及介质 |
CN116401317B (zh) * | 2023-04-19 | 2023-11-17 | 中国环球租赁有限公司 | 一种缓存数据同步方法、装置、电子设备及介质 |
Also Published As
Publication number | Publication date |
---|---|
WO2016082594A1 (zh) | 2016-06-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105700962A (zh) | 数据更新处理方法及装置 | |
ES2703901T3 (es) | Sistema de archivo distribuido mediante nodos de consenso | |
US20150363124A1 (en) | System and method for data replication using a single master failover protocol | |
US7903665B2 (en) | System and method for synchronizing packet forwarding information | |
CN112286905A (zh) | 数据迁移方法及装置、存储介质、电子设备 | |
CN104021200B (zh) | 一种数据库的数据同步方法和装置 | |
CA2896973A1 (en) | Methods, devices and systems for dynamically managing memberships in replicated state machines within a distributed computing environment | |
CN103701913A (zh) | 数据同步方法及装置 | |
CN105814544A (zh) | 用于支持分布式数据网格中的持久化分区发现的系统和方法 | |
CN105242990A (zh) | 基于云平台的数据备份方法和装置 | |
CN111104069A (zh) | 分布式存储系统的多区域数据处理方法、装置及电子设备 | |
CN109376197A (zh) | 一种数据同步方法、服务器及计算机存储介质 | |
US20100042639A1 (en) | Configuration file framework to support high availability schema based upon asynchronous checkpointing | |
CN111143382A (zh) | 数据处理方法、系统和计算机可读存储介质 | |
CN103064717A (zh) | 一种集群系统并行安装软件的装置和方法 | |
CN104462342B (zh) | 数据库快照同步处理方法及装置 | |
CN104281631A (zh) | 分布式数据库系统及其数据同步方法和节点 | |
CN106855869B (zh) | 一种实现数据库高可用的方法、装置和系统 | |
CN101242251A (zh) | 提高p2p重叠网稳定性的方法和装置 | |
CN110489491B (zh) | 一种适用于a/b网双集群的全量数据同步装置 | |
US11860828B2 (en) | Methods, devices and systems for writer pre-selection in distributed data systems | |
CN101420327A (zh) | 平滑重启过程中避免路由振荡的方法及平滑重启设备 | |
CN116303789A (zh) | 多分片多副本数据库并行同步方法、装置及可读介质 | |
CN103327105B (zh) | hadoop系统中从属节点服务自动恢复方法 | |
CN111737348B (zh) | 基于数据库表的时效同步方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WW01 | Invention patent application withdrawn after publication | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20160622 |