CN109814891A - 一种数据更新方法及装置 - Google Patents
一种数据更新方法及装置 Download PDFInfo
- Publication number
- CN109814891A CN109814891A CN201711136821.8A CN201711136821A CN109814891A CN 109814891 A CN109814891 A CN 109814891A CN 201711136821 A CN201711136821 A CN 201711136821A CN 109814891 A CN109814891 A CN 109814891A
- Authority
- CN
- China
- Prior art keywords
- data
- written
- version number
- version
- unit
- 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.)
- Granted
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明实施例公开了一种数据更新方法及装置,该方法可以包括:通过第一进程获取第一待写入数据;为第一待写入数据分配第一版本号;将第一版本号和第一待写入数据的对应关系,添加至共享内存中存储的待访问数组中;利用第一版本号更新至少一个进程中存储的至少一个版本号,至少一个进程包括第一进程,至少一个进程中的一个进程中存储一个版本号;当至少一个进程中的第二进程未更新完成时,保留待访问数组中小于第一版本号的第二版本号,和第二版本号对应的第二待写入数据;当接收到第二进程对第二版本号的访问请求时,按照第二版本号访问待访问数组中的第二待写入数据。
Description
技术领域
本发明涉及计算机软件领域,尤其涉及一种数据更新方法及装置。
背景技术
随着互联网的高速发展,用户对电信设备的容量指标、性能指标和稳定性指标的要求变得越来越高。现有技术中,多进程由于在故障隔离、功能裁剪等方面体现出来的优势,被广泛应用在电信设备中,如图1所示,多进程中的每一个进程存储一份完整的软件表项,当软件表项发生变化时,每一个进程都能同步软件表项的变化,从而指示业务同步最新的软件表项。然而,稳定情况下的软件表项是不会发生变化的,只有在出现变更时,软件表项才会发生变化,而为每一个进程分配一份软件表项会导致内存浪费的问题。
现有技术中,将软件表项存储在共享内存中,多进程在共享内存中进行数据读写的功能,由于将软件表项存储在共享内存中,写操作时会对共享内存中数据造成更改,从而影响其他进行的读操作,故利用读写锁机制,即在一个进程进行写操作时,其他进程不能访问共享内存。
然而,当一个进程进行写操作时,其他进程不能访问共享内存,会导致多进程的访问速度变低。
发明内容
为解决上述技术问题,本发明实施例期望提供一种数据更新方法及装置,能够提高多进程的访问速度。
本发明实施例提供一种数据更新方法,该方法可以包括:
通过第一进程获取第一待写入数据;
为所述第一待写入数据分配第一版本号;
将所述第一版本号和所述第一待写入数据的对应关系,添加至共享内存中存储的待访问数组中;
利用所述第一版本号更新至少一个进程中存储的至少一个版本号,所述至少一个进程包括所述第一进程,所述至少一个进程中的一个进程中存储一个版本号;
当所述至少一个进程中的第二进程未更新完成时,保留所述待访问数组中小于所述第一版本号的第二版本号,和所述第二版本号对应的第二待写入数据;
当接收到所述第二进程对所述第二版本号的访问请求时,按照所述第二版本号访问所述待访问数组中的所述第二待写入数据。
在上述方法中,所述利用所述第一版本号更新至少一个进程存储的至少一个版本号之后,所述方法还包括:
当所述至少一个进程更新完成,且检测到所述至少一个进程未访问所述共享内存时,对所述共享内存中存储的版本号及对应的待写入数据进行相应的删除操作。
在上述方法中,所述保留所述待访问数组中小于所述第一版本号的第二版本号,和所述第二版本号对应的第二待写入数据之后,所述方法还包括:
当所述第二进程未更新完成,且接收到第三进程对所述第一版本号的访问请求时,按照所述第一版本号访问所述待访问数组中的所述第一待写入数据,所述第三进程为所述至少一个进程中更新完成的进程。
在上述方法中,所述第一进程包括读进程,所述通过第一进程获取第一待写入数据,包括:
通过所述读进程获取第一更新指令;
获取所述第一更新指令对应的所述第一待写入数据;
将所述第一更新指令携带的所述第一待写入数据,存储至读进程内存中。
在上述方法中,所述将所述第一更新指令携带的所述第一待写入数据,存储至读进程内存中之后,所述方法还包括:
为所述第一待写入数据分配第三版本号;
将所述第三版本号和所述第一待写入数据关联;
将关联后的所述第三版本号存储至所述读进程内存中。
在上述方法中,所述将所述第一版本号更新至至少一个进程对应的至少一个进程内存中,还包括:
指示所述读进程将所述第一版本号更新至所述读进程内存中;
将所述第一版本号和所述第三版本号进行比较;
当所述第一版本号大于或等于所述第三版本号时,删除所述读进程内存中的所述第三版本号和所述第一待写入数据。
在上述方法中,所述第一进程还包括写进程,所述通过第一进程获取第一待写入数据,包括:
通过所述写进程获取第一当前业务发送的第一更新指令;
获取所述第一更新指令携带的所述第一待写入数据。
在上述方法中,所述第一更新指令中携带第一操作类型,所述对所述共享内存中存储的版本号及对应的待写入数据进行相应的删除操作,包括:
当所述第一操作类型为添加操作时,无需删除所述共享内存中存储的所述版本号及所述待写入数据;
当所述第一操作类型为更新操作时,将所述第二版本号和所述第二待写入数据进行删除;
当所述第一操作类型为删除操作时,将所述第一版本号、所述第一待写入数据、所述第二版本号和所述第二待写入数据进行删除。
在上述方法中,所述共享内存中存储有第一并发序列号,所述对所述共享内存中存储的版本号及对应的待写入数据进行相应的删除操作之前,所述方法还包括:
获取所述至少一个进程对应的至少一个并发序列号;
判断所述至少一个并发序列号与所述第一并发序列号是否一致;
当所述至少一个并发序列号与所述第一并发序列号一致时,检测出所述至少一个进程未访问所述共享内存;
当所述至少一个并发序列号中的第二并发序列号与所述第一并发序列号不一致时,检测出所述至少一个进程正在访问所述共享内存。
在上述方法中,所述至少一个进程对应至少一个初始并发序列号,所述按照所述第二版本号访问所述待访问数组中的所述第二待写入数据之后,所述方法还包括:
获取所述第二进程对应的第一初始并发序列号,所述第一初始并发序列号为所述至少一个初始并发序列号中,所述第二进程对应的一个初始并发序列号;
将所述第一初始并发序列号更新为所述第一并发序列号;
当所述至少一个初始并发序列号与所述第一并发序列号相同时,将所述第一并发序列号加一。
在上述方法中,所述利用所述第一版本号更新至少一个进程存储的至少一个版本号,所述方法还包括:
检测所述共享内存对应的当前存储空间;
当所述当前存储空间达到预设容量上限时,从所述至少一个进程中查找出第四进程,所述第四进程对应的当前版本号最接近所述第一版本号;
禁止所述第四进程同步所述当前版本号;
当所述当前存储空间达到预设容量下限时,允许所述第四进程同步所述当前版本号的过程。
本发明实施例提供一种数据更新装置,所述数据更新装置包括:
获取单元,用于通过第一进程获取第一待写入数据;
分配单元,用于为所述第一待写入数据分配第一版本号;
添加单元,用于将所述第一版本号和所述第一待写入数据的对应关系,添加至共享内存中存储的待访问数组中;
更新单元,用于利用所述第一版本号更新至少一个进程中存储的至少一个版本号,所述至少一个进程包括所述第一进程,所述至少一个进程中的一个进程中存储一个版本号;
保留单元,用于当所述至少一个进程中的第二进程未更新完成时,保留所述待访问数组中小于所述第一版本号的第二版本号,和所述第二版本号对应的第二待写入数据;
访问单元,用于当接收到所述第二进程对所述第二版本号的访问请求时,按照所述第二版本号访问所述待访问数组中的所述第二待写入数据。
在上述数据更新装置中,所述数据更新装置还包括:删除单元;
所述删除单元,用于当所述至少一个进程更新完成,且检测到所述至少一个进程未访问所述共享内存时,对所述共享内存中存储的版本号及对应的待写入数据进行相应的删除操作。
在上述数据更新装置中,所述访问单元,还用于当所述第二进程未更新完成,且接收到第三进程对所述第一版本号的访问请求时,按照所述第一版本号访问所述待访问数组中的所述第一待写入数据,所述第三进程为所述至少一个进程中除所述第二进程外的进程。
在上述数据更新装置中,所述第一进程包括读进程,所述数据更新装置还包括:存储单元;
所述获取单元,还用于通过所述读进程获取第一更新指令;获取所述第一更新指令对应的所述第一待写入数据;
所述存储单元,用于将所述第一更新指令携带的所述第一待写入数据,存储至读进程内存中。
在上述数据更新装置中,所述分配单元,还用于为所述第一待写入数据分配第三版本号;
所述存储单元,还用于将所述第三版本号和所述第一待写入数据的对应关系存储至所述读进程内存中。
在上述数据更新装置中,所述数据更新装置还包括:比较单元;
所述更新单元,还用于指示所述读进程将所述第一版本号更新至所述读进程内存中;
所述比较单元,用于将所述第一版本号和所述第三版本号进行比较;
所述删除单元,还用于当所述第一版本号大于或等于所述第三版本号时,删除所述读进程内存中的所述第三版本号和所述第一待写入数据。
在上述数据更新装置中,所述第一进程还包括写进程,
所述获取单元,还用于通过所述写进程获取第一当前业务发送的第一更新指令;获取所述第一更新指令携带的所述第一待写入数据。
在上述数据更新装置中,所述第一更新指令中携带第一操作类型,
所述删除单元,具体用于当所述第一操作类型为添加操作时,无需删除所述共享内存中存储的所述版本号及所述待写入数据;当所述第一操作类型为更新操作时,将所述第二版本号和所述第二待写入数据进行删除;当所述第一操作类型为删除操作时,将所述第一版本号、所述第一待写入数据、所述第二版本号和所述第二待写入数据进行删除。
在上述数据更新装置中,所述数据更新装置还包括:判断单元和检测单元;
所述获取单元,还用于获取所述至少一个进程对应的至少一个并发序列号;
所述判断单元,用于判断所述至少一个并发序列号与第一并发序列号是否一致;
所述检测单元,用于当所述至少一个并发序列号与所述第一并发序列号一致时,检测出所述至少一个进程未访问所述共享内存;当所述至少一个并发序列号中的第二并发序列号与所述第一并发序列号不一致时,检测出所述至少一个进程正在访问所述共享内存。
在上述数据更新装置中,所述数据更新装置还包括:增加单元;
所述获取单元,还用于获取所述第二进程对应的第一初始并发序列号,所述第一初始并发序列号为所述至少一个初始并发序列号中,所述第二进程对应的一个初始并发序列号;
所述更新单元,还用于将所述第一初始并发序列号更新为所述第一并发序列号;
所述增加模块,用于当所述至少一个初始并发序列号与所述第一并发序列号相同时,将所述第一并发序列号加一。
在上述数据更新装置中,所述数据更新装置还包括:查找单元、禁止单元和允许单元;
所述检测单元,还用于检测所述共享内存对应的当前存储空间;
所述查找单元,用于当所述当前存储空间达到预设容量上限时,从所述至少一个进程中查找出第四进程,所述第四进程对应的当前版本号最接近所述第一版本号;
所述禁止单元,用于禁止所述第四进程同步所述当前版本号;
所述允许单元,用于当所述当前存储空间达到预设容量下限时,允许所述第四进程同步所述当前版本号的过程。
本发明实施例提供一种数据更新装置,所述数据更新装置包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,当所述程序被处理器执行时,执行如下操作:
所述处理器,用于通过第一进程获取第一待写入数据;为所述第一待写入数据分配第一版本号;将所述第一版本号和所述第一待写入数据的对应关系,添加至共享内存中存储的待访问数组中;利用所述第一版本号更新至少一个进程中存储的至少一个版本号,所述至少一个进程包括所述第一进程,所述至少一个进程中的一个进程中存储一个版本号;当所述至少一个进程中的第二进程未更新完成时,保留所述待访问数组中小于所述第一版本号的第二版本号,和所述第二版本号对应的第二待写入数据;当接收到所述第二进程对所述第二版本号的访问请求时,按照所述第二版本号访问所述待访问数组中的所述第二待写入数据。
本发明实施例提供一种计算机可读存储介质,其上存储有计算机程序,应用于数据更新装置,其特征在于,该计算机程序被处理器执行时实现上述任一项数据更新方法。
本发明实施例提供了一种数据更新方法及装置,该方法可以包括:通过第一进程获取第一待写入数据;为第一待写入数据分配第一版本号;将第一版本号和第一待写入数据的对应关系,添加至共享内存中存储的待访问数组中;利用第一版本号更新至少一个进程中存储的至少一个版本号,至少一个进程包括第一进程,至少一个进程中的一个进程中存储一个版本号;当至少一个进程中的第二进程未更新完成时,保留待访问数组中小于第一版本号的第二版本号,和第二版本号对应的第二待写入数据;当接收到第二进程对第二版本号的访问请求时,按照第二版本号访问待访问数组中的第二待写入数据。采用上述方法,数据更新装置通过第一进程接收第一待写入数据,并为第一待写入数据分配第一版本号,数据更新装置将第一版本号和第一待写入数据的对应关系添加至共享内存中的待访问数组中,之后,数据更新装置利用第一版本号更新至少一个进程中存储的至少一个版本号,当至少一个进程中的第二进程未更新完成时,数据更新装置保留待访问数组中小于第一版本号的第二版本号和对应的第二待写入数据,以供第二进程访问待访问数组时,数据更新装置按照第二版本号访问第二待写入数据,可以在一个进程进行写操作的同时,其他进程利用自身存储的版本号访问共享内存中对应的数据,从而提高访问速度。
附图说明
图1为现有技术中的数据在各个进程中的存放示意图;
图2为本发明实施例提供的一种数据更新方法的流程图一;
图3为本发明实施例提供的一种示例性的写进程端和读进程端包括的模块示意图;
图4为本发明实施例提供的一种通过读进程获取数据的流程图;
图5为本发明实施例提供的一种数据更新方法的流程图二;
图6为本发明实施例提供的一种同步检测方法的流程图;
图7为本发明实施例提供的一种示例性的数据添加的流程图;
图8为本发明实施例提供的一种示例性的数据更新的流程图;
图9为本发明实施例提供的一种示例性的数据删除的流程图;
图10为本发明实施例提供的一种数据更新装置的结构示意图一;
图11为本发明实施例提供的一种数据更新装置的结构示意图二;
图12为本发明实施例提供的一种数据更新装置的结构示意图三;
图13为本发明实施例提供的一种数据更新装置的结构示意图三;
图14为本发明实施例提供的一种数据更新装置的结构示意图四;
图15为本发明实施例提供的一种数据更新装置的结构示意图五;
图16为本发明实施例提供的一种数据更新装置的结构示意图六;
图17为本发明实施例提供的一种数据更新装置的结构示意图七。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
实施例一
本发明实施例提供一种数据更新方法,如图2所示,该方法可以包括:
S101、通过第一进程获取第一待写入数据。
本发明实施例提供的一种数据更新方法适用于多进程访问共享内存的场景下。
本发明实施例中,第一进程可以为Writer端(写进程)和Reader端(读进程),如图3所示,Writer端包括Writer端业务模块、Writer端版本管理模块、Writer端数据维护模块、Writer端访问控制模块、Writer端容量控制模块、Writer端并发控制模块、Writer端垃圾清理模块和Writer端通信同步模块;Reader端包括Reader端业务模块、Reader端通信同步模块、Reader端访问控制模块和Reader端并发控制模块。
本发明实施例中,将写操作产生的数据存储在共享内存中,Writer端和Reader端在共享内存中访问数据。
本发明实施例中,第一待写入数据为端口号、软件表项等数据信息,具体的根据实际情况进行选择,本发明实施例不做具体的限定。
进一步地,数据更新装置通过第一进程获取对第一待写入数据的第一操作类型。
本发明实施例中,第一操作类型包括添加操作、更新操作或删除操作,具体的额根据实际情况进行选择,本发明实施例不做具体的限定。
本发明实施例中,第一进程包括读进程和写进程,具体的根据实际情况进行选择,本发明实施例不做具体的限定。
本发明实施例中,第一当前业务产生对第一待写入数据的添加、删除或者更新操作时,第一当前业务将添加、删除或者更新操作及第一待写入数据发送至Writer端或者Reader端,具体的根据实际情况进行选择,本发明实施例不做具体的限定。
本发明实施例中,当第一当前业务将添加、删除或者更新操作及第一待写入数据发送至Writer端之后,Writer端就接收到了第一更新指令,此时,Writer端业务模块就产生了对第一待写入数据的添加、更新或者删除操作。
本发明实施例中,当第一当前业务将添加、删除或者更新操作及第一待写入数据发送至Reader端之后,Reader端通信同步模块将添加、删除或者更新操作及第一待写入数据发送至Writer端通信同步模块,此时,Writer端通信同步模块接收到Reader端发送的第一更新指令。
S102、为第一待写入数据分配第一版本号。
当数据更新装置获取到第一待写入数据之后,数据更新装置就要为第一待写入数据分配第一版本号了。
本发明实施例中,数据更新装置根据第一操作类型,为第一待写入数据分配第一版本号。
本发明实施例中,当第一操作类型为添加操作或者更新操作时,Writer端版本管理模块为第一待写入数据分配第一更新版本号;当第一操作类型为删除操作时,Writer端版本管理模块为第一待写入数据分配第一删除版本号。
本发明实施例中,第一更新版本号和第一删除版本号都是从1开始,并连续递增的。
S103、将第一版本号和第一待写入数据的对应关系,添加至共享内存中存储的待访问数组中。
当数据更新装置为第一待写入数据分配了第一版本号之后,数据更新装置就要将第一版本号和第一待写入数据的对应关系,添加至共享内存中存储的待访问数组中了。
本发明实施例中,共享内存中存储有待访问数组,第一待写入数据是对待访问数组中的某一个数据进行更改,Writer端数据维护模块将第一版本号和第一待写入数据的对应关系,添加至待访问数据的指定位置处。
可选的,在待访问数组中添加一个待写入数据,或者用第一待写入数据更改待访问数组中的某一个数据,或者删除待访问数组中的第一待写入数据,具体根据实际情况进行选择,本发明实施例不做具体的限定。
本发明实施例中,共享内存中存储的数据是以无锁跳表的形式进行存储的。
本发明实施例中,Writer端数据维护模块在共享内存中实施对第一待写入数据的添加、更新或者删除操作,具体的,对于添加操作和更新操作而言,Writer端数据维护模块在共享内存中新增一个内存来存储第一待写入数据;对于删除操作而言,Writer端数据维护模块将共享内存中的第一待写入数据删除。
进一步地,Writer端版本管理模块将第一版本号和对应的第一待写入数据更新至共享内存中之后,Writer端版本管理模块检测共享内存中是否存在并未同步到至少一个Reader端的第一数据,对于更新操作而言,当检测到存在第一数据时,Writer端版本管理模块将第一数据删除;对于删除操作而言,Writer端版本管理模块将第一数据及第一待写入数据删除。
S104、利用第一版本号更新至少一个进程中存储的至少一个版本号,至少一个进程包括第一进程,至少一个进程中的一个进程中存储一个版本号。
当数据更新装置将第一版本号和第一待写入数据的对应关系,添加至共享内存中之后,数据更新装置就要利用第一版本号更新至少一个进程中存储的至少一个版本号了。
本发明实施例中,Writer端通信同步模块与Reader端通信同步模块建立通信通道,Writer端通信同步模块向Reader端通信同步模块发送第一版本号和第一操作类型,Reader端通信同步模块接收Writer端发送的第一版本号和第一操作类型,以供Reader端用第一版本号更新本地存储的第三版本号。
本发明实施例中,Reader端通信同步模块将自身存储的第三版本号更新为第一版本号。
本发明实施例中,Reader端访问控制模块根据第一操作类型和第一版本号访问共享内存中第一版本号对应的第一待写入数据,并将第一待写入数据及其对应的第一操作类型通知给第一当前业务,以供第一当前业务根据第一操作类型同步第一待写入数据。
本发明实施例中,共享内存中会存储各个版本的数据,使得共享内存中存储的数据类型变少,极大的降低了共享内存的空间利用率,故数据更新装置为共享内存设置预设容量上限,当Writer端数据维护模块新增或者更新第一待写入数据时,Writer端容量控制模块检测共享内存的当前存储空间,并将当前存储空间与预设容量上限进行比较,当当前存储空间等于预设容量上限时,Writer端容量控制模块通知Writer端通信同步模块禁止同步最快的客户端进行同步。
本发明实施例中,Writer端版本管理模块根据至少一个Reader端分别对应的至少一个当前版本号来确定至少一个Reader端当前同步的版本号,当当前存储空间等于预设容量上限时,Writer端通信同步模块从至少一个Reader端中查找当前版本号最接近第一版本号的第二客户端,并禁止第二客户端同步当前版本号的过程。
可以理解的是,由于Reader端的同步速度不同,会造成有的Reader端还在同步之前版本的数据,而有的Reader端就已经同步到当前版本的数据,此时,由于每个版本的数据都有Reader端在同步,Writer端垃圾清理模块不能清理掉任何一个版本的数据,会导致共享内存中待删除版本数据占了大量的空间,故,数据更新装置为共享内存设置预设容量上限和预设容量下限,当共享内存中的版本号过多时,抑制同步最快的Reader端的同步过程,可以减小共享内存中的版本号,从而无论共享内存容量的大小都可以保证该共享内存中存储较多类型的数据,使得共享内存能够适应不同内存硬件限制。
S105、当至少一个进程中的第二进程未更新完成时,保留待访问数组中小于第一版本号的第二版本号,和第二版本号对应的第二待写入数据。
当数据更新装置利用第一版本号更新至少一个进程中存储的至少一个版本号之后,数据更新装置就要判断至少一个进程中是否存储进程未更新完成,当数据更新装置判断出至少一个进程中的第二进程未更新完成时,数据更新装置保留待访问数组中小于第一版本号的第二版本号和对应的第二待写入数据。
本发明实施例中,由于各个Reader端的更新速度不同,因此,会存在有的Reader端已经更新完,而有的Reader端还未更新完成的情况,当Reader端还未更新完后时,该Reader端存储的就是小于第一版本号的第二版本号,此时,该Reader端只能访问共享内存中第二版本号对应的待访问数组,故,当Writer端通信同步模块判断出至少一个进程中的第二进程未更新完成时,Writer端版本管理模块保留共享内存中的第二版本号及第二待写入数据。
进一步地,当Writer端通信同步模块将第一版本号和第一操作类型发送至至少一个Reader端通信同步模块之后,至少一个Reader端通信同步模块向Writer端通信同步模块发送更新完成指令,当Writer端通信同步模块接收到至少一个客户端发送的至少一个更新完成指令时,对于更新操作,Writer端版本管理模块查找版本号小于第一版本号的第二版本号,并将第二版本号确定为待删除版本号;对于删除操作,Writer端版本管理模块将第一版本号和第二版本号作为待删除版本号,之后,Writer端垃圾清理模块将待删除版本号及其对应的待删除数据从无锁跳表中摘除,并将待删除版本号及待删除数据存入老化链表中。
S106、当接收到第二进程对第二版本号的访问请求时,按照第二版本号访问待访问数组中的第二待写入数据。
当数据更新装置保存待访问数组中小于第一版本号的第二版本号和对应的第二待写入数据之后,当数据更新装置接收到第二进程对第二版本号的访问请求时,数据更新装置就要按照第二版本号访问待访问数组中的第二待写入数据了。
本发明实施例中,当数据更新装置接收到Reader端访问控制模块对第二版本号的访问请求时,Reader端访问控制模块在共享内存中访问的是待访问数组中第二版本号对应的第二待写入数据。
本发明实施例中,Writer端通信同步模块还会向Reader端通信同步模块发送初始并发序列号,当第一当前业务通过第一Reader端访问共享内存时,Reader端访问控制模块根据自身存储的第一版本号访问共享内存中对应的第一待写入数据,当访问完成时,第一Reader端获取共享内存对应的对应并发序列号,并将初始并发序列号更新为第一并发序列号。
可以理解的是,数据更新装置通过第一进程接收第一待写入数据,并为第一待写入数据分配第一版本号,数据更新装置将第一版本号和第一待写入数据的对应关系添加至共享内存中的待访问数组中,之后,数据更新装置利用第一版本号更新至少一个进程中存储的至少一个版本号,当至少一个进程中的第二进程未更新完成时,数据更新装置保留待访问数组中小于第一版本号的第二版本号和对应的第二待写入数据,以供第二进程访问待访问数组时,数据更新装置按照第二版本号访问第二待写入数据,可以在一个进程进行写操作的同时,其他进程利用自身存储的版本号访问共享内存中对应的数据,从而提高访问速度。
实施例二
本发明实施例提供了一种数据更新方法,该方法适用于S101中数据更新装置通过读进程接收第一操作类型及第一待写入数据,如图4所示,该方法可以包括:
S1010、数据更新装置通过读进程接收第一更新指令。
本发明实施例提供的一种数据更新方法适用于多进程访问共享内存的场景下。
本发明实施例中,Reader端业务模块接收到第一当前业务发送的第一更新指令,此时,数据更新装置通过Reader端业务模块接收到第一更新指令。
本发明实施例中,第一更新指令还包括对第一待写入数据的第一操作类型,其中,第一操作类型包括添加、更新和删除等操作,具体的根据实际情况进行选择,本发明实施例不做具体的限定。
S1011、数据更新装置获取第一更新指令对应的第一待写入数据。
当数据更新装置通过读进程接收第一更新指令之后,数据更新装置就要获取第一更新指令对应的第一待写入数据了。
本发明实施例中,Reader端业务模块获取到添加第一待写入数据,或者更新第一待写入数据,或者删除第一待写入数据。
S1012、数据更新装置将第一更新指令携带的第一待写入数据,存储至读进程内存中。
当数据更新装置获取到第一待写入数据之后,数据更新装置就要将第一待写入数据存储至读进程内存中了。
本发明实施例中,Reader端访问控制模块将第一待写入数据和第一操作类型保存在读进程内存中,然后Reader端通信同步模块将第一待写入数据和第一操作类型同步到Writer端通信同步模块。
本发明实施例中,当有业务访问第一待写入数据时,数据更新装置保证该业务优先访问读进程内存中的第一待写入数据,使得在同步第一待写入数据至共享内存时,不会影响业务访问第一待写入数据的过程。
S1013、数据更新装置为第一待写入数据分配第三版本号。
当数据更新装置将第一待写入数据存储在读进程内存中之后,数据更新装置就要为第一待写入数据分配第三版本号了。
本发明实施例中,Writer端版本管理模块为第一待写入数据分配第三版本号。
S1014、数据更新装置将第三版本号和第一待写入数据的对应关系存储至读进程内存中。
当数据更新装置为第一待写入数据分配第三版本号之后,数据更新装置就要将第三版本号和第一待写入数据关联了。
本发明实施例中,Reader端通信同步模块收到Writer端通信同步模块的应答后,将第三版本号和第一待写入数据进行关联,Reader端通信同步模块将第三版本号写入读进程内存中。
S1015、当数据更新装置将第一版本号和第一待写入数据添加至共享内存中之后,数据更新装置指示读进程将第一版本号更新至读进程内存中。
当数据更新装置将第三版本号存储至读进程内存中之后,数据更新装置就要指示读进程将第一版本号更新至读进程内存中了。
本发明实施例中,Writer端将第一待写入数据及其对应的第一版本号存储在共享内存中,之后,Writer端通信同步模块将第一版本号发送至Reader端通信同步模块,此时,Reader端通信同步模块将第一版本号更新至读进程内存中。
S1016、数据更新装置将第一版本号和第三版本号进行比较。
当数据更新装置将第一版本号更新至读进程内存中之后,数据更新装置就要将第一版本号和第三版本号进行比较了。
本发明实施例中,Reader端访问控制模块将第一版本号和第三版本号进行比较,当第一版本号和第三版本号相同时,表征共享内存中存储的数据与读进程内存中存储的数据相同;当第一版本号小于第三版本号时,表征共享内存中存储的数据的版本低于读进程内存中存储的数据的版本;当第一版本号大于第三版本号时,表征共享内存中存储的数据的版本高于读进程内存中存储的数据的版本。
S1017、当第一版本号大于或等于第三版本号时,数据更新装置删除读进程内存中的第三版本号和第一待写入数据。
当比较结果为第一版本号大于或者等于第三版本号时,数据更新装置就要删除读进程内存中的第三版本号和第一待写入数据了。
本发明实施例中,当第一版本号等于第三版本号时,表征读进程中存储的数据已经被存储至共享内存中;当第一版本号大于第三版本号时,表征读进程中存储的数据版本号;此时,Reader端访问控制模块将读进程内存中的数据删除。
实施例三
本发明实施例提供一种数据更新方法,如图5所示,该方法可以包括:
S201、数据更新装置通过写进程接收第一当前业务发送的第一更新指令。
本发明实施例提供的一种数据更新方法适用于多进程访问共享内存的场景下。
本发明实施例中,当第一当前业务将添加、删除或者更新操作及第一待写入数据发送至Writer端之后,Writer端就接收到了第一更新指令。
S202、数据更新装置获取第一更新指令携带的第一待写入数据。
当数据更新装置通过写进程接收第一当前业务发送的第一更新指令之后,数据更新装置就要获取第一更新指令携带的第一操作类型和第一待写入数据了。
本发明实施例中,第一更新指令携带第一待写入数据和对第一待写入数据的第一操作类型。
本发明实施例中,第一操作类型包括添加操作、更新操作或删除操作,具体的额根据实际情况进行选择,本发明实施例不做具体的限定。
本发明实施例中,Writer端业务模块产生了对第一待写入数据的添加、更新或者删除操作。
S203、数据更新装置为第一待写入数据分配第一版本号。
当数据更新装置获取到第一待写入数据之后,数据更新装置就要为第一待写入数据分配第一版本号了。
本发明实施例中,Writer端版本管理模块为数据的添加、更新操作分配一个新的更新版本版本号,为删除操作操作分配一个删除版本号版本号。其中,更新版本号和删除版本号都从1开始,并连续递增。
S204、数据更新装置将第一版本号和第一待写入数据的对应关系,添加至共享内存中存储的待访问数组中。
当数据更新装置为第一待写入数据分配第一版本号之后,数据更新装置将第一版本号和第一待写入数据更新至共享内存中。
本发明实施例中,共享内存中存储有待访问数组,第一待写入数据是对待访问数组中的某一个数据进行更改,Writer端数据维护模块将第一版本号和第一待写入数据的对应关系,添加至待访问数据的指定位置处。
可选的,在待访问数组中添加一个待写入数据,或者用第一待写入数据更改待访问数组中的某一个数据,或者删除待访问数组中的第一待写入数据,具体根据实际情况进行选择,本发明实施例不做具体的限定。
本发明实施例中,共享内存中存储的数据是以无锁跳表的形式进行存储的。
本发明实施例中,Writer端数据维护模块在共享内存中实施对第一待写入数据的添加、更新或者删除操作,具体的,对于添加操作和更新操作而言,Writer端数据维护模块在共享内存中新增一个内存来存储第一待写入数据;对于删除操作而言,Writer端数据维护模块将共享内存中的第一待写入数据删除。
进一步地,Writer端版本管理模块将第一版本号和对应的第一待写入数据更新时共享内存中之后,Writer端版本管理模块检测共享内存中是否存在并未同步到至少一个Reader端的第一数据,对于更新操作而言,当检测到存在第一数据时,Writer端版本管理模块将第一数据删除;对于删除操作而言,Writer端版本管理模块将第一数据及第一待写入数据删除。
S205、数据更新装置利用第一版本号更新至少一个进程中存储的至少一个版本号,至少一个进程包括第一进程,至少一个进程中的一个进程中存储一个版本号。
当数据更新装置将第一版本号和第一待写入数据对应关系,添加至共享内存中存储的待访问数组中之后,数据更新装置就要利用第一版本号更新至少一个进程中存储的至少一个版本号了。
本发明实施例中,Writer端通信同步模块与Reader端通信同步模块建立通信通道,Writer端通信同步模块向Reader端通信同步模块发送第一版本号和第一操作类型,Reader端通信同步模块接收Writer端发送的第一版本号和第一操作类型,以供Reader端用第一版本号更新本地存储的第三版本号。
本发明实施例中,Reader端通信同步模块将自身存储的第三版本号更新为第一版本号。
本发明实施例中,Reader端访问控制模块根据第一操作类型和第一版本号访问共享内存中第一版本号对应的第一待写入数据,并将第一待写入数据及其对应的第一操作类型通知给第一当前业务,以供第一当前业务根据第一操作类型同步第一待写入数据。
S206、当至少一个进程中的第二进程未更新完成时,数据更新装置保留待访问数组中小于第一版本号的第二版本号,和第二版本号对应的第二待写入数据。
当数据更新装置利用第一版本号更新至少一个进程中存储的至少一个版本号之后,数据更新装置就要在至少一个进程中的第二进程未更新完成时,保留待访问数组中小于第一版本号的第二版本号和对应的第二待写入数据了。
本发明实施例中,由于各个Reader端的更新速度不同,因此,会存在有的Reader端已经更新完,而有的Reader端还未更新完成的情况,当Reader端还未更新完后时,该Reader端存储的就是小于第一版本号的第二版本号,此时,该Reader端只能访问共享内存中第二版本号对应的待访问数组,故,当Writer端通信同步模块判断出至少一个进程中的第二进程未更新完成时,Writer端版本管理模块保留共享内存中的第二版本号及第二待写入数据。
S207、当接收到第二进程对第二版本号的访问请求时,数据更新装置按照第二版本号访问待访问数组中的第二待写入数据。
当数据更新装置保留待访问数组中的第二版本号和第二待写入数据之后,数据更新装置就要在接收到第二进程对第二版本号的访问请求时,按照第二版本号访问待访问数组中的第二待写入数据了。
本发明实施例中,当数据更新装置接收到Reader端访问控制模块对第二版本号的访问请求时,Reader端访问控制模块在共享内存中访问的是待访问数组中第二版本号对应的第二待写入数据。
本发明实施例中,数据更新装置为至少一个进程分配至少一个初始序列号,当第二进程访问共享内存时,数据更新装置获取第二进程对应的第一初始并发序列号,然后将第一初始并发序列号更新为共享内存中存储的第一并发序列号,当数据更新装置判断出至少一个初始并发序列号均与第一并发序列号相同时,将第一并发序列号加一。
本发明实施例中,Writer端通信同步模块还会向Reader端通信同步模块发送初始并发序列号,当第一当前业务通过第二Reader端访问共享内存时,Reader端访问控制模块根据自身存储的第二版本号访问共享内存中对应的第一待写入数据,当访问完成时,第一Reader端获取共享内存对应的对应第一并发序列号,并将第一初始并发序列号更新为第一并发序列号。
S208、当第二进程未更新完成,且数据更新装置接收到第三进程对第一版本号的访问请求时,数据更新装置按照第一版本号访问待访问数组中的第一待写入数据,第三进程为至少一个进程中更新完成的进程。
当数据更新装置利用第一版本号更新至少一个进程中存储的至少一个版本号之后,当至少一个进程中的第二进程未更新完成,且数据更新装置接收到第三进程对第一版本号的访问请求时,数据更新装置就要按照第一版本号访问待访问数组中的第一待写入数据了。
本发明实施例中,当数据更新装置接收到第三进程对第一版本号的访问请求时,数据更新装置按照第一版本号访问待访问数组中的第一待写入数据。
本发明实施例中,当第三进程访问完成时,数据更新装置获取第三进程对应的第二初始并发序列号,并将第二初始并发序列号更改为共享内存中存储的第一并发序列号。
S209、当第二进程更新完成时,数据更新装置获取至少一个进程对应的至少一个并发序列号。
当数据更新装置利用第一版本号更新至少一个进程中存储的至少一个版本号的过程完成之后,数据更新装置就要对共享内存中存储的版本号及对应的待写入数据进行相应的删除操作了,首先,数据更新装置获取至少一个进程对应的至少一个并发序列号。
本发明实施例中,至少一个进程中的每一个进程每访问一次共享内存,对应的自身存储的并发序列号就要更新为共享内存存储的第一并发序列号,数据更新装置根据至少一个并发序列号判断是否进行删除操作,数据更新装置先从Reader端并发控制模块获取至少一个进程对应的至少一个并发序列号。
S206-S207、S208和S209为步骤S205后的三个并列的步骤,具体的根据实际情况进行选择,本发明实施例不做具体的限定。
S210、数据更新装置判断至少一个并发序列号与共享内存中存储的第一并发序列号是否一致。
当数据更新装置获取到至少一个进程对应的至少一个并发序列号之后,数据更新装置就要判断至少一个并发序列号与共享内存中存储的第一并发序列号是否一致了。
本发明实施例中,数据更新装置将至少一个并发序列号和第一并发序列号的大小进行比较。
S211、当至少一个并发序列号与第一并发序列号一致时,数据更新装置检测出至少一个进程未访问共享内存。
当数据更新装置判断出至少一个并发序列号与第一并发序列号一致时,数据更新装置检测出至少一个进程未访问共享内存。
S212、当至少一个并发序列号中的第二并发序列号与第一并发序列号不一致时,数据更新装置检测出至少一个进程正在访问共享内存。
当数据更新装置判断出至少一个并发序列号中的第二并发序列号与第一并发序列号不一致时,数据更新装置检测出至少一个进程正在访问共享内存。
S212和S211为S210后的两个并列的步骤,具体的根据实际情况进行选择,本发明实施例不做具体的限定。
S213、当数据更新装置检测出至少一个进程未访问共享内存时,当第一操作类型为添加操作时,数据更新装置无需删除共享内存中存储的版本号及待写入数据。
当数据更新装置检测出至少一个进程未访问共享内存时,数据更新装置就要根据第一操作类型,删除共享内存中存储的版本号及待写入数据了。
本发明实施例中,当第一操作类型为添加操作时,数据更新装置无需删除共享内存中存储的版本号及待写入数据,并增加共享内存的第一并发序列号。
示例性的,如图6所示,数据更新方法的步骤为:
1、写进程业务模块产生了一个新增数据。
2、写进程版本管理模块为新增数据的添加操作分配一个更新版本号1,删除版本号为保留值。
3、写进程数据维护模块为新增数据分配共享内存,并将更新版本号和删除版本号和新增数据一同存入无锁跳表中。
4、写进程版本管理模块更新本端可见的更新版本号,以供写进程访问控制模块访问共享内存时计算业务可见范围。
5、写进程容量控制模块校验共享内存的容量是否达到抑制门限,当达到抑制门限时,通知写进程通信同步模块抑制同步最快的读进程的同步过程。
6、写进程通信同步模块将更新版本号、删除版本号和操作类型同步到读进程通信同步模块。
7、读进程通信同步模块收到操作同步消息后,解析出信息后,根据操作类型和版本号访问共享内存数据通知业务,然后通知读进程访问控制模块更新本地可见的更新版本号和删除版本号。
S214、当第一操作类型为更新操作时,数据更新装将第二版本号和第二待写入数据进行删除。
当数据更新装置检测出至少一个进程未访问共享内存时,数据更新装置就要根据第一操作类型,删除共享内存中存储的版本号及待写入数据了。
本发明实施例中,当第一操作类型为更新操作时,Writer端并发控制模块会将第二版本号和第二待写入数据通知给Writer端垃圾清理模块进行删除,然后增加共享内存的第一并发序列号。
示例性的,如图7所示,数据更新方法的步骤为:
1、写进程业务模块对已有数据做了一个更新操作。
2、写进程版本管理模块为已有数据的更新操作分配了一个新的更新版本号,删除版本号为保留值。
3、写进程版本管理模块检查是否存在所有的读进程都没有更新的版本,并将这些版本数据交给写进程垃圾清理模块进行老化删除。
4、写进程数据维护模块对更新操作新增内存存储新的版本,并将分配的更新版本号和删除版本号和已有数据一同存入跳表中。
5、写进程版本管理模块更新本端可见的更新版本号,以供写进程访问控制模块用最新的更新版本号访问共享内存。
6、写进程容量控制模块校验共享内存的容量是否达到抑制门限,当达到抑制门限时,通知写进程通信同步模块抑制同步最快的读进程的同步过程。
7、写进程通信同步模块将更新版本号、删除版本号和操作类型同步到读进程通信同步模块。
8、读进程通信同步模块收到操作同步消息后,解析出信息后,根据操作类型和版本号访问共享内存数据通知业务,然后通知读进程访问控制模块更新本地可见的更新版本号和删除版本号。
9、写进程版本管理模块在所有读进程都更新完成时,将来版本数据交给写进程垃圾清理模块进行延迟删除。
10、写进程并发控制模块从读进程并发控制模块查找读进程的并发序列号。
11、写进程垃圾清理模块通过写进程并发控制模块确认所有读进程已不再使用老版本数据,则安全删除老版本数据。
12、写进程垃圾清理模块在安全删除老旧表项后,会通知写进程容量控制模块计算容量是否低于取消抑制门限,如果低于,写进程容量控制模块会通知Writer端通信同步模块取消同步抑制。
S215、当第一操作类型为删除操作时,数据更新装将第一版本号、第一待写入数据、第二版本号和第二待写入数据进行删除。
当数据更新装置检测出至少一个进程未访问共享内存时,数据更新装置就要根据第一操作类型,删除共享内存中存储的版本号及待写入数据了。
本发明实施例中,当第一操作类型为删除操作时,Writer端并发控制模块会将第一版本号、第一待写入数据、第二版本号和第二待写入数据通知给Writer端垃圾清理模块进行删除,然后增加共享内存的第一并发序列号。
示例性的,如图8所示,数据删除的步骤为:
1、写进程业务模块删除一个已存在数据。
2、写进程版本管理模块为删除操作分配一个删除版本号1。
3、写进程版本管理模块检查是否存在所有的读进程都没有更新的版本,并将这些版本数据交给写进程垃圾清理模块进行老化删除。
4、写进程数据维护模块将所有旧版本数据的删除版本号更新为删除版本号1。
5、写进程版本管理模块更新本端可见的删除版本号,以供写进程访问控制模块用最新的删除版本号访问共享内存。
6、写进程通信同步模块将更新版本号、删除版本号和操作类型同步到读进程通信同步模块。
7、写进程并发控制模块从读进程并发控制模块查找读进程的并发序列号。
8、写进程垃圾清理模块通过写进程并发控制模块确认所有读进程已不再使用数据,则安全删除数据。
9、写进程垃圾清理模块在安全删除老旧表项后,会通知写进程容量控制模块计算容量是否低于取消抑制门限,如果低于,写进程容量控制模块会通知Writer端通信同步模块取消同步抑制。
可以理解的是,数据更新装置通过第一进程接收第一待写入数据,并为第一待写入数据分配第一版本号,数据更新装置将第一版本号和第一待写入数据的对应关系添加至共享内存中的待访问数组中,之后,数据更新装置利用第一版本号更新至少一个进程中存储的至少一个版本号,当至少一个进程中的第二进程未更新完成时,数据更新装置保留待访问数组中小于第一版本号的第二版本号和对应的第二待写入数据,以供第二进程访问待访问数组时,数据更新装置按照第二版本号访问第二待写入数据,可以在一个进程进行写操作的同时,其他进程利用自身存储的版本号访问共享内存中对应的数据,从而提高访问速度。
S213、S214和S215为S211后的三个并列的步骤,具体的根据实际情况进行选择。
实施例四
在S205时,数据更新装置还实时检测同步时的内存容量是否过大或者过小,如图9所示,该方法可以包括:
S301、数据更新装置检测共享内存对应的当前存储空间。
在数据更新装置指示至少一个进程将第一版本号更新至至少一个进程对应的至少一个进程内存中时,数据更新装置检测共享内存对应的当前存储空间。
本发明实施例中,数据更新装置检测共享内存的当前存储空间。
S302、当当前存储空间达到预设容量上限时,数据更新装置从至少一个进程中查找出第四进程,第四进程对应的当前版本号最接近第一版本号。
当数据更新装置获取到共享内存的当前存储空间之后,数据更新装置就要将当前存储空间和预设容量阈值进行比较了,当当前存储空间达到预设容量上限时,数据更新装置至少一个进程中确定出更新速度最快的第四进程。
本发明实施例中,数据更新装置为当前存储空间设置有预设容量上限和预设容量下限,数据更新装置将当前存储空间与预设容量上限进行比较,当当前存储空间达到预设容量上限时,数据更新装置从至少一个进程中查找出当前版本号最接近第一版本号的第四进程。
S303、数据更新装置禁止第四进程同步当前版本号。
当数据更新装置从至少一个进程中确定出第四进程之后,数据更新装置就要禁止第四进程同步当前版本号了。
本发明实施例中,数据更新装置禁止第四进程同步当前版本号。
S304、当当前存储空间达到预设容量下限时,数据更新装置允许第四进程同步当前版本号的过程。
当数据更新装置检测出当前存储空间达到预设容量下限时,数据更新装置就要允许第四进程同步当前版本号了。
本发明实施例中,当当前存储空间达到预设容量下限时,数据更新装置允许第四进程同步当前版本号的过程。
可以理解的是,由于Reader端的同步速度不同,会造成有的Reader端还在同步之前版本的数据,而有的Reader端就已经同步到当前版本的数据,此时,由于每个版本的数据都有Reader端在同步,Writer端垃圾清理模块不能清理掉任何一个版本的数据,会导致共享内存中待删除版本数据占了大量的空间,故,数据更新装置为共享内存设置预设容量上限和预设容量下限,当共享内存中的版本号过多时,抑制同步最快的Reader端的同步过程,可以减小共享内存中的版本号,从而无论共享内存容量的大小都可以保证该共享内存中存储较多类型的数据,使得共享内存能够适应不同内存硬件限制。
实施例五
本发明实施例提供一种数据更新装置1,如图10所示,该数据更新装置1包括:
获取单元10,用于通过第一进程获取第一待写入数据。
分配单元11,用于为所述第一待写入数据分配第一版本号。
添加单元12,用于将所述第一版本号和所述第一待写入数据的对应关系,添加至共享内存中存储的待访问数组中。
更新单元13,用于利用所述第一版本号更新至少一个进程中存储的至少一个版本号,所述至少一个进程包括所述第一进程,所述至少一个进程中的一个进程中存储一个版本号。
保留单元14,用于当所述至少一个进程中的第二进程未更新完成时,保留所述待访问数组中小于所述第一版本号的第二版本号,和所述第二版本号对应的第二待写入数据。
访问单元15,用于当接收到所述第二进程对所述第二版本号的访问请求时,按照所述第二版本号访问所述待访问数组中的所述第二待写入数据。
可选的,基于图10,如图11所示,所述数据更新装置1还包括:删除单元16。
所述删除单元16,用于当所述至少一个进程更新完成,且检测到所述至少一个进程未访问所述共享内存时,对所述共享内存中存储的版本号及对应的待写入数据进行相应的删除操作。
可选的,所述访问单元15,还用于当所述第二进程未更新完成,且接收到第三进程对所述第一版本号的访问请求时,按照所述第一版本号访问所述待访问数组中的所述第一待写入数据,所述第三进程为所述至少一个进程中除所述第二进程外的进程。
可选的,基于图10,如图12所示,所述数据更新装置1还包括:存储单元17。
所述获取单元10,还用于通过所述读进程获取所述第一更新指令;获取所述第一更新指令对应的所述第一待写入数据。
所述存储单元17,用于将所述第一更新指令携带的所述第一待写入数据,存储至读进程内存中。
可选的,所述分配单元11,还用于为所述第一待写入数据分配第三版本号。
所述存储单元17,还用于将所述第三版本号和所述第一待写入数据的对应关系存储至所述读进程内存中。
可选的,基于图11,如图13所示,所述数据更新装置1还包括:比较单元18。
所述更新单元13,还用于指示所述读进程将所述第一版本号更新至所述读进程内存中。
所述比较单元18,用于将所述第一版本号和所述第三版本号进行比较。
所述删除单元16,还用于当所述第一版本号大于或等于所述第三版本号时,删除所述读进程内存中的所述第三版本号和所述第一待写入数据。
可选的,所述获取单元10,还用于通过所述写进程获取第一当前业务发送的第一更新指令。获取所述第一更新指令携带的所述第一待写入数据。
可选的,所述删除单元16,具体用于当所述第一操作类型为添加操作时,无需删除所述共享内存中存储的所述版本号及所述待写入数据;当所述第一操作类型为更新操作时,将所述第二版本号和所述第二待写入数据进行删除;当所述第一操作类型为删除操作时,将所述第一版本号、所述第一待写入数据、所述第二版本号和所述第二待写入数据进行删除。
可选的,基于图11,如图14所示,所述数据更新装置1还包括:判断单元19和检测单元110。
所述获取单元10,还用于获取所述至少一个进程对应的至少一个并发序列号。
所述判断单元19,用于判断所述至少一个并发序列号与第一并发序列号是否一致。
所述检测单元110,用于当所述至少一个并发序列号与所述第一并发序列号一致时,检测出所述至少一个进程未访问所述共享内存;当所述至少一个并发序列号中的第二并发序列号与所述第一并发序列号不一致时,检测出所述至少一个进程正在访问所述共享内存。
可选的,基于图14,如图15所示,所述数据更新装置1还包括:增加单元111。
所述获取单元10,还用于获取所述第二进程对应的第一初始并发序列号,所述第一初始并发序列号为所述至少一个初始并发序列号中,所述第二进程对应的一个初始并发序列号。
所述更新单元13,还用于将所述第一初始并发序列号更新为所述第一并发序列号。
所述增加模块111,用于当所述至少一个初始并发序列号与所述第一并发序列号相同时,将所述第一并发序列号加一。
可选的,基于图14,如图16所示,所述数据更新装置1还包括:查找单元112、禁止单元113和允许单元114。
所述检测单元110,还用于检测所述共享内存对应的当前存储空间。
所述查找单元112,用于当所述当前存储空间达到预设容量上限时,从所述至少一个进程中查找出第四进程,所述第四进程对应的当前版本号最接近所述第一版本号。
所述禁止单元113,用于禁止所述第四进程同步所述当前版本号。
所述允许单元114,用于当所述当前存储空间达到预设容量下限时,允许所述第四进程同步所述当前版本号的过程。
在实际应用中,基于实施例一至实施例四的同一发明构思下,如图17所示,数据更新装置1可以包括:处理器115、存储器116、通信接口117和总线118;
上述获取单元10、分配单元11、添加单元12、更新单元13、保留单元14、访问单元15、删除单元16、存储单元17、比较单元18、判断单元19、检测单元110、增加单元111、查找单元112、禁止单元113和允许单元114可由位于数据更新装置1上的处理器115实现,上述处理器115可以为特定用途集成电路(ASIC,Application Specific Integrated Circuit)、数字信号处理器(DSP,Digital Signal Processor)、数字信号处理装置(DSPD,DigitalSignal Processing Device)、可编程逻辑装置(PLD,Programmable Logic Device)、现场可编程门阵列(FPGA,Field Programmable Gate Array)、中央处理器(CPU,CentralProcessing Unit)、控制器、微控制器、微处理器中的至少一种。可以理解地,对于不同的设备,用于实现上述第一处理器功能的电子器件还可以为其它,本发明实施例不作具体限定,该数据更新装置1还包括存储器116,其中,存储器116用于存储可执行程序代码,该程序代码包括计算机操作指令,存储器116可能包含高速RAM存储器,也可能还包括非易失性存储器,例如,至少一个磁盘存储器。
所述总线118用于连接所述通信接口117、所述处理器115和所述存储器116以及这些器件之间的相互通信;
所述通信接口117,用于与外部网元进行数据传输;
所述存储器116,用于存储指令和数据;
所述处理器115,执行所述指令用于:通过第一进程获取第一待写入数据;
为所述第一待写入数据分配第一版本号;
将所述第一版本号和所述第一待写入数据的对应关系,添加至共享内存中存储的待访问数组中;
利用所述第一版本号更新至少一个进程中存储的至少一个版本号,所述至少一个进程包括所述第一进程,所述至少一个进程中的一个进程中存储一个版本号;
当所述至少一个进程中的第二进程未更新完成时,保留所述待访问数组中小于所述第一版本号的第二版本号,和所述第二版本号对应的第二待写入数据;
当接收到所述第二进程对所述第二版本号的访问请求时,按照所述第二版本号访问所述待访问数组中的所述第二待写入数据。
在实际应用中,上述存储器116可以是易失性第一存储器(volatile memory),例如随机存取第二存储器(RAM,Random-Access Memory);或者非易失性第二存储器(non-volatile memory),例如只读第二存储器(ROM,Read-Only Memory),快闪第二存储器(flash memory),硬盘(HDD,Hard Disk Drive)或固态硬盘(SSD,Solid-State Drive);或者上述种类的第二存储器的组合,并向处理器115提供指令和数据。
另外,在本实施例中的各功能模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
所述集成的单元如果以软件功能模块的形式实现并非作为独立的产品进行销售或使用时,可以存储在一个计算机可读取存储介质中,基于这样的理解,本实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或processor(处理器)执行本实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
本发明实施例提供一种计算机可读存储介质,其上存储有计算机程序,应用于数据更新装置1中,该计算机程序被处理器115执行时实现如实施例一至实施例四所述的方法。
具体来讲,本实施例中的一种数据更新的方法对应的程序指令可以被存储在光盘,硬盘,U盘等存储介质上,当存储介质中的与一种数据更新方法对应的计算机程序指令被一电子设备读取或被执行时,包括如下步骤:
通过第一进程获取第一待写入数据;
为所述第一待写入数据分配第一版本号;
将所述第一版本号和所述第一待写入数据的对应关系,添加至共享内存中存储的待访问数组中;
利用所述第一版本号更新至少一个进程中存储的至少一个版本号,所述至少一个进程包括所述第一进程,所述至少一个进程中的一个进程中存储一个版本号;
当所述至少一个进程中的第二进程未更新完成时,保留所述待访问数组中小于所述第一版本号的第二版本号,和所述第二版本号对应的第二待写入数据;
当接收到所述第二进程对所述第二版本号的访问请求时,按照所述第二版本号访问所述待访问数组中的所述第二待写入数据。
本领域内的技术人员应明白,本发明的实施例可提供为方法、装置、或计算机程序产品。因此,本发明可采用硬件实施例、软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(装置)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
Claims (24)
1.一种数据更新方法,其特征在于,所述方法包括:
通过第一进程获取第一待写入数据;
为所述第一待写入数据分配第一版本号;
将所述第一版本号和所述第一待写入数据的对应关系,添加至共享内存中存储的待访问数组中;
利用所述第一版本号更新至少一个进程中存储的至少一个版本号,所述至少一个进程包括所述第一进程,所述至少一个进程中的一个进程中存储一个版本号;
当所述至少一个进程中的第二进程未更新完成时,保留所述待访问数组中小于所述第一版本号的第二版本号,和所述第二版本号对应的第二待写入数据;
当接收到所述第二进程对所述第二版本号的访问请求时,按照所述第二版本号访问所述待访问数组中的所述第二待写入数据。
2.根据权利要求1所述的方法,其特征在于,所述利用所述第一版本号更新至少一个进程存储的至少一个版本号之后,所述方法还包括:
当所述至少一个进程更新完成,且检测到所述至少一个进程未访问所述共享内存时,对所述共享内存中存储的版本号及对应的待写入数据进行相应的删除操作。
3.根据权利要求1所述的方法,其特征在于,所述保留所述待访问数组中小于所述第一版本号的第二版本号,和所述第二版本号对应的第二待写入数据之后,所述方法还包括:
当所述第二进程未更新完成,且接收到第三进程对所述第一版本号的访问请求时,按照所述第一版本号访问所述待访问数组中的所述第一待写入数据,所述第三进程为所述至少一个进程中更新完成的进程。
4.根据权利要求1所述的方法,其特征在于,所述第一进程包括读进程,所述通过第一进程获取第一待写入数据,包括:
通过所述读进程获取第一更新指令;
获取所述第一更新指令对应的所述第一待写入数据;
将所述第一更新指令携带的所述第一待写入数据,存储至读进程内存中。
5.根据权利要求4所述的方法,其特征在于,所述将所述第一更新指令携带的所述第一待写入数据,存储至读进程内存中之后,所述方法还包括:
为所述第一待写入数据分配第三版本号;
将所述第三版本号和所述第一待写入数据关联;
将关联后的所述第三版本号存储至所述读进程内存中。
6.根据权利要求5所述的方法,其特征在于,所述将所述第一版本号更新至至少一个进程对应的至少一个进程内存中,还包括:
指示所述读进程将所述第一版本号更新至所述读进程内存中;
将所述第一版本号和所述第三版本号进行比较;
当所述第一版本号大于或等于所述第三版本号时,删除所述读进程内存中的所述第三版本号和所述第一待写入数据。
7.根据权利要求1或4所述的方法,其特征在于,所述第一进程还包括写进程,所述通过第一进程获取第一待写入数据,包括:
通过所述写进程获取第一当前业务发送的第一更新指令;
获取所述第一更新指令携带的所述第一待写入数据。
8.根据权利要求4所述的方法,其特征在于,所述第一更新指令中携带第一操作类型,所述对所述共享内存中存储的版本号及对应的待写入数据进行相应的删除操作,包括:
当所述第一操作类型为添加操作时,无需删除所述共享内存中存储的所述版本号及所述待写入数据;
当所述第一操作类型为更新操作时,将所述第二版本号和所述第二待写入数据进行删除;
当所述第一操作类型为删除操作时,将所述第一版本号、所述第一待写入数据、所述第二版本号和所述第二待写入数据进行删除。
9.根据权利要求2所述的方法,其特征在于,所述共享内存中存储有第一并发序列号,所述对所述共享内存中存储的版本号及对应的待写入数据进行相应的删除操作之前,所述方法还包括:
获取所述至少一个进程对应的至少一个并发序列号;
判断所述至少一个并发序列号与所述第一并发序列号是否一致;
当所述至少一个并发序列号与所述第一并发序列号一致时,检测出所述至少一个进程未访问所述共享内存;
当所述至少一个并发序列号中的第二并发序列号与所述第一并发序列号不一致时,检测出所述至少一个进程正在访问所述共享内存。
10.根据权利要求9所述的方法,其特征在于,所述至少一个进程对应至少一个初始并发序列号,所述按照所述第二版本号访问所述待访问数组中的所述第二待写入数据之后,所述方法还包括:
获取所述第二进程对应的第一初始并发序列号,所述第一初始并发序列号为所述至少一个初始并发序列号中,所述第二进程对应的一个初始并发序列号;
将所述第一初始并发序列号更新为所述第一并发序列号;
当所述至少一个初始并发序列号与所述第一并发序列号相同时,将所述第一并发序列号加一。
11.根据权利要求1所述的方法,其特征在于,所述利用所述第一版本号更新至少一个进程存储的至少一个版本号,所述方法还包括:
检测所述共享内存对应的当前存储空间;
当所述当前存储空间达到预设容量上限时,从所述至少一个进程中查找出第四进程,所述第四进程对应的当前版本号最接近所述第一版本号;
禁止所述第四进程同步所述当前版本号;
当所述当前存储空间达到预设容量下限时,允许所述第四进程同步所述当前版本号的过程。
12.一种数据更新装置,其特征在于,所述数据更新装置包括:
获取单元,用于通过第一进程获取第一待写入数据;
分配单元,用于为所述第一待写入数据分配第一版本号;
添加单元,用于将所述第一版本号和所述第一待写入数据的对应关系,添加至共享内存中存储的待访问数组中;
更新单元,用于利用所述第一版本号更新至少一个进程中存储的至少一个版本号,所述至少一个进程包括所述第一进程,所述至少一个进程中的一个进程中存储一个版本号;
保留单元,用于当所述至少一个进程中的第二进程未更新完成时,保留所述待访问数组中小于所述第一版本号的第二版本号,和所述第二版本号对应的第二待写入数据;
访问单元,用于当接收到所述第二进程对所述第二版本号的访问请求时,按照所述第二版本号访问所述待访问数组中的所述第二待写入数据。
13.根据权利要求12所述的数据更新装置,其特征在于,所述数据更新装置还包括:删除单元;
所述删除单元,用于当所述至少一个进程更新完成,且检测到所述至少一个进程未访问所述共享内存时,对所述共享内存中存储的版本号及对应的待写入数据进行相应的删除操作。
14.根据权利要求12所述的数据更新装置,其特征在于,
所述访问单元,还用于当所述第二进程未更新完成,且接收到第三进程对所述第一版本号的访问请求时,按照所述第一版本号访问所述待访问数组中的所述第一待写入数据,所述第三进程为所述至少一个进程中除所述第二进程外的进程。
15.根据权利要求12所述的数据更新装置,其特征在于,所述第一进程包括读进程,所述数据更新装置还包括:存储单元;
所述获取单元,还用于通过所述读进程获取第一更新指令;获取所述第一更新指令对应的所述第一待写入数据;
所述存储单元,用于将所述第一更新指令携带的所述第一待写入数据,存储至读进程内存中。
16.根据权利要求15所述的数据更新装置,其特征在于,
所述分配单元,还用于为所述第一待写入数据分配第三版本号;
所述存储单元,还用于将所述第三版本号和所述第一待写入数据的对应关系存储至所述读进程内存中。
17.根据权利要求13或16所述的数据更新装置,其特征在于,所述数据更新装置还包括:比较单元;
所述更新单元,还用于指示所述读进程将所述第一版本号更新至所述读进程内存中;
所述比较单元,用于将所述第一版本号和所述第三版本号进行比较;
所述删除单元,还用于当所述第一版本号大于或等于所述第三版本号时,删除所述读进程内存中的所述第三版本号和所述第一待写入数据。
18.根据权利要求12或15所述的数据更新装置,其特征在于,所述第一进程还包括写进程,
所述获取单元,还用于通过所述写进程获取第一当前业务发送的第一更新指令;获取所述第一更新指令携带的所述第一待写入数据。
19.根据权利要求13或15所述的数据更新装置,其特征在于,所述第一更新指令中携带第一操作类型,
所述删除单元,具体用于当所述第一操作类型为添加操作时,无需删除所述共享内存中存储的所述版本号及所述待写入数据;当所述第一操作类型为更新操作时,将所述第二版本号和所述第二待写入数据进行删除;当所述第一操作类型为删除操作时,将所述第一版本号、所述第一待写入数据、所述第二版本号和所述第二待写入数据进行删除。
20.根据权利要求16所述的数据更新装置,其特征在于,所述数据更新装置还包括:判断单元和检测单元;
所述获取单元,还用于获取所述至少一个进程对应的至少一个并发序列号;
所述判断单元,用于判断所述至少一个并发序列号与第一并发序列号是否一致;
所述检测单元,用于当所述至少一个并发序列号与所述第一并发序列号一致时,检测出所述至少一个进程未访问所述共享内存;当所述至少一个并发序列号中的第二并发序列号与所述第一并发序列号不一致时,检测出所述至少一个进程正在访问所述共享内存。
21.根据权利要求20所述的数据更新装置,其特征在于,所述数据更新装置还包括:增加单元;
所述获取单元,还用于获取所述第二进程对应的第一初始并发序列号,所述第一初始并发序列号为所述至少一个初始并发序列号中,所述第二进程对应的一个初始并发序列号;
所述更新单元,还用于将所述第一初始并发序列号更新为所述第一并发序列号;
所述增加模块,用于当所述至少一个初始并发序列号与所述第一并发序列号相同时,将所述第一并发序列号加一。
22.根据权利要求20所述的数据更新装置,其特征在于,所述数据更新装置还包括:查找单元、禁止单元和允许单元;
所述检测单元,还用于检测所述共享内存对应的当前存储空间;
所述查找单元,用于当所述当前存储空间达到预设容量上限时,从所述至少一个进程中查找出第四进程,所述第四进程对应的当前版本号最接近所述第一版本号;
所述禁止单元,用于禁止所述第四进程同步所述当前版本号;
所述允许单元,用于当所述当前存储空间达到预设容量下限时,允许所述第四进程同步所述当前版本号的过程。
23.一种数据更新装置,其特征在于,所述数据更新装置包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,当所述程序被处理器执行时,执行如下操作:
所述处理器,用于通过第一进程获取第一待写入数据;为所述第一待写入数据分配第一版本号;将所述第一版本号和所述第一待写入数据的对应关系,添加至共享内存中存储的待访问数组中;利用所述第一版本号更新至少一个进程中存储的至少一个版本号,所述至少一个进程包括所述第一进程,所述至少一个进程中的一个进程中存储一个版本号;当所述至少一个进程中的第二进程未更新完成时,保留所述待访问数组中小于所述第一版本号的第二版本号,和所述第二版本号对应的第二待写入数据;当接收到所述第二进程对所述第二版本号的访问请求时,按照所述第二版本号访问所述待访问数组中的所述第二待写入数据。
24.一种计算机可读存储介质,其上存储有计算机程序,应用于数据更新装置,其特征在于,该计算机程序被处理器执行时实现如权利要求1-11任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711136821.8A CN109814891B (zh) | 2017-11-16 | 2017-11-16 | 一种数据更新方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711136821.8A CN109814891B (zh) | 2017-11-16 | 2017-11-16 | 一种数据更新方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109814891A true CN109814891A (zh) | 2019-05-28 |
CN109814891B CN109814891B (zh) | 2023-08-08 |
Family
ID=66597699
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711136821.8A Active CN109814891B (zh) | 2017-11-16 | 2017-11-16 | 一种数据更新方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109814891B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104935634A (zh) * | 2015-04-27 | 2015-09-23 | 南京大学 | 基于分布共享存储的移动设备数据共享方法 |
CN105700962A (zh) * | 2014-11-26 | 2016-06-22 | 中兴通讯股份有限公司 | 数据更新处理方法及装置 |
US20170192884A1 (en) * | 2015-12-30 | 2017-07-06 | Roku, Inc. | Providing rolling updates of distributed systems with a shared cache |
WO2017128028A1 (zh) * | 2016-01-26 | 2017-08-03 | 华为技术有限公司 | 一种事务处理方法及装置 |
-
2017
- 2017-11-16 CN CN201711136821.8A patent/CN109814891B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105700962A (zh) * | 2014-11-26 | 2016-06-22 | 中兴通讯股份有限公司 | 数据更新处理方法及装置 |
CN104935634A (zh) * | 2015-04-27 | 2015-09-23 | 南京大学 | 基于分布共享存储的移动设备数据共享方法 |
US20170192884A1 (en) * | 2015-12-30 | 2017-07-06 | Roku, Inc. | Providing rolling updates of distributed systems with a shared cache |
WO2017128028A1 (zh) * | 2016-01-26 | 2017-08-03 | 华为技术有限公司 | 一种事务处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN109814891B (zh) | 2023-08-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102667772B (zh) | 文件级分级存储管理系统、方法和设备 | |
CN106407040B (zh) | 一种远程数据复制方法及系统 | |
CN108810041A (zh) | 一种分布式缓存系统的数据写入及扩容方法、装置 | |
US8069191B2 (en) | Method, an apparatus and a system for managing a snapshot storage pool | |
CN110751275B (zh) | 图训练系统、数据访问方法及装置、电子设备、存储介质 | |
CN107615261B (zh) | 多个云环境之间的共享存储的方法和装置 | |
CN111737265B (zh) | 区块数据访问方法、区块数据存储方法及装置 | |
CN106446159B (zh) | 一种存储文件的方法、第一虚拟机及名称节点 | |
CN107643880A (zh) | 基于分布式文件系统的文件数据迁移的方法及装置 | |
JP2005216067A (ja) | データ処理システム | |
CN112000426B (zh) | 一种数据处理方法及装置 | |
CN111797172B (zh) | 数据迁移方法、装置、设备、分布式系统及存储介质 | |
CN107179878A (zh) | 基于应用优化的数据存储的方法和装置 | |
CN109558456A (zh) | 一种文件迁移方法、装置、设备及可读存储介质 | |
KR20170052441A (ko) | 중앙 집중 분산 시스템 및 그것의 동작 방법 | |
CN106648457B (zh) | 更新反向映射元数据的方法及装置 | |
CN107562367A (zh) | 基于软件化存储系统读写数据的方法以及装置 | |
CN109491605A (zh) | 一种基于cow的数据存储方法、装置和介质 | |
CN110032543A (zh) | 一种存储文件系统的管理方法 | |
CN109597707A (zh) | 克隆卷数据拷贝方法、装置及计算机可读存储介质 | |
KR100899147B1 (ko) | 메타 데이터 저장 방법 및 메타 데이터 저장 시스템 | |
CN109144947A (zh) | 一种虚拟化系统的集群文件系统的控制方法和装置 | |
CN113672255A (zh) | 一种分布式存储软件升级方法及装置 | |
CN106293510B (zh) | 一种面向多虚拟存储系统的数据共享方法及系统 | |
CN109814891A (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 |