CN102880529B - 内存数据备份方法及内存数据备份系统 - Google Patents

内存数据备份方法及内存数据备份系统 Download PDF

Info

Publication number
CN102880529B
CN102880529B CN201210340231.8A CN201210340231A CN102880529B CN 102880529 B CN102880529 B CN 102880529B CN 201210340231 A CN201210340231 A CN 201210340231A CN 102880529 B CN102880529 B CN 102880529B
Authority
CN
China
Prior art keywords
data
cursor
module
sequence file
sequence
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
Application number
CN201210340231.8A
Other languages
English (en)
Other versions
CN102880529A (zh
Inventor
汤晓刚
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sina Technology China Co Ltd
Original Assignee
Sina Technology China Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Sina Technology China Co Ltd filed Critical Sina Technology China Co Ltd
Priority to CN201210340231.8A priority Critical patent/CN102880529B/zh
Publication of CN102880529A publication Critical patent/CN102880529A/zh
Application granted granted Critical
Publication of CN102880529B publication Critical patent/CN102880529B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种内存数据备份方法及内存数据备份系统。该内存数据备份方法包括:接收数据更新命令,为数据更新命令分配游标;构建数据更新命令与分配的游标的映射关系,生成序列文件;将生成的序列文件输出,以使数据服务器根据接收的序列文件中的数据更新命令,更新数据;接收数据更新成功信息,存储数据更新成功的数据更新命令与游标的映射关系。应用本发明,可以避免数据丢失、提升数据的同步性能。

Description

内存数据备份方法及内存数据备份系统
技术领域
本发明涉及数据存储技术,尤其涉及一种内存数据备份方法及内存数据备份系统。
背景技术
目前,内存数据持久化存储及备份主要采用纯内存存储引擎,主要通过远程字典服务器(Redis,Remote Dictionary Server)以及关系型数据库管理系统(Mysql)等构建主从结构的内存数据库系统,采用主从复制方式实现多机冗余的高可靠性(HA,High Availability),其中,Mysql的主从复制是通过增量备份(binlog)方式实现,binlog通过以二进制文件方式记录结构化查询语言(SQL,Structured Query Language)语句来进行数据备份,所有数据更新在主服务器上执行,在经过预先设置的时间周期后,即定期转储(dump)模式,定期将更新的内存数据批量写入,主服务器将数据更新的binlog发送到从服务器,以使从服务器进行相同的数据更新,从而达到主从一致的目的,实现主服务器与从服务器的同步。Redis也采用主从方式进行内存数据备份,通过类似Mysql的binlog方式进行主从同步,主从同步实现机制与Mysql的binlog同步机制类似,不同的是,Redis通过构建不断添加模式(AOF,Append Only Mode)文件进行主从服务器同步。
在进行内存数据备份时,现有技术通常采用读写分离的数据备份方式,在内存数据备份系统中,可以设置一台主服务器,并配置有多台从服务器,所有的数据更新业务逻辑访问主服务器,查询业务逻辑仅访问从服务器,也称为读写分离机制。
图1为现有内存数据备份系统结构示意图。参见图1,该内存数据备份系统包括主服务器以及从服务器,较佳地,主服务器的数量为一台,从服务器的数量为一台或多台。数据更新业务逻辑将更新的数据写入主服务器,主服务器通过binlog方式存储更新的数据,经过预先设置的时间周期,将更新的数据通过binlog方式写入从服务器,实现内存数据备份,以使从服务器与主服务器保持数据同步,查询业务逻辑通过访问从服务器,获取查询所需的数据。
现有的内存数据备份系统,采用当前主流的Mysql的读写分离机制方案,当主服务器宕机或故障发生异常时,根据预先设置的切换策略,触发从多个从服务器中,选择一个从服务器,并将其升级为主服务器,从而接替主服务器的业务功能,在发生异常的主服务器恢复正常后,再次触发升级为主服务器的从服务器,使其注销主服务器的业务功能,恢复为数据备份服务器。
由上述可见,现有的内存数据备份系统,当主服务器宕机时,由于主服务器与从服务器之间存在的binlog同步延迟,即在两次时间周期期间发生的数据更新,由于主服务器还未能及时写入从服务器,将会全部丢失,从而无法保证主服务器中所有更新数据的binlog都能够同步到从服务器上,导致被升级为主服务器的从服务器中,其备份的数据不是最新的,与主服务器中的数据不同步,造成了部分更新数据的丢失,主从服务器同步性较差;对于Redis的主从同步方案,通过同步AOF文件实现主从服务器的数据同步,一方面,当主服务器与从服务器之间的连接暂时中断时,需要从服务器将主服务器的所有AOF文件从头再重新同步一遍,这对于日更新上亿次的重负荷内存数据备份系统,完全同步AOF文件成为很重的负担,包括网络流量上的和数据恢复时间上的负担;另一方面,同步AOF文件的数据同步机制,也存在与Mysql主从同步类似的问题,当主服务器宕机后,从服务器如果直接升级为主服务器,存在部分数据丢失的问题,使得主从服务器同步性较差。
发明内容
本发明的实施例提供一种内存数据备份方法,避免数据丢失、提升数据的同步性能。
本发明的实施例还提供一种内存数据备份系统,避免数据丢失、提升数据的同步性能。
为达到上述目的,本发明实施例提供的一种内存数据备份方法,包括:
接收数据更新命令,为数据更新命令分配游标;
构建数据更新命令与分配的游标的映射关系,生成序列文件;
将生成的序列文件输出,以使数据服务器根据接收的序列文件中的数据更新命令,更新数据;
接收数据更新成功信息,存储数据更新成功的数据更新命令与游标的映射关系。
其中,所述为数据更新命令分配游标包括:
判断当前接收的数据更新命令是否为接收的第一条数据更新命令,如果是,为接收的数据更新命令分配游标序列号,并记录分配的游标序列号信息;如果不是,将记录的游标序列号进行累加,为接收数据更新命令设置累加的游标序列号,记录累加的游标序列号信息。
其中,所述为数据更新命令分配游标包括:
判断预先存储的不断添加模式AOF文件中是否存在写入的数据更新命令,如果不存在,为接收的数据更新命令分配游标序列号;如果存在,获取AOF文件中当前已写入的数据更新命令的游标序列号信息,对获取的游标序列号进行累加,为接收的数据更新命令设置累加的游标序列号。
其中,所述序列文件采用轻量级的数据交换格式JSON生成,并按照行进行数据更新命令划分。
其中,在所述将生成的序列文件输出的步骤之前,进一步包括:
根据生成的序列文件,查询存储的映射关系,获取与序列文件中游标序列号相匹配的数据服务器信息,将数据服务器信息携带在序列文件中。
其中,在所述将生成的序列文件输出的步骤之后,进一步包括:
存储该序列文件并进行计时;
如果在预先设置的计时时间内没有接收到数据服务器返回的数据更新成功信息,将当前存储的序列文件向所述数据服务器进行重传。
其中,在所述更新数据的步骤之后,该方法进一步包括:
数据服务器存储数据更新成功的数据更新命令与游标的映射关系;
在下一时间周期,所述数据服务器根据接收的序列文件中的数据更新命令,更新数据包括:
数据服务器接收序列文件,获取序列文件中包含的游标序列号,判断获取的游标序列号与存储的游标序列号;
如果序列文件中包含的游标序列号与存储的游标序列号相同,或者,序列文件中包含中的游标序列号与存储的游标序列号相差两个以上累加单位,丢弃该序列文件,向游标分配器返回存储的游标序列号信息,以使游标分配器将接收的游标序列号之后的序列文件通过分发器向该数据服务器发送;
如果序列文件中包含的游标序列号大于存储的游标序列号一个累加单位,根据接收的序列文件中的数据更新命令,更新数据。
其中,所述方法进一步包括:
监测到数据服务器重启服务后,获取存储的游标序列号,触发向游标分配器返回存储的游标序列号信息,以使游标分配器将接收的游标序列号之后的序列文件通过分发器向该数据服务器发送。
一种内存数据备份系统,该内存数据备份系统包括:接收服务器、游标分配器、分发器、游标存储器以及数据服务器,其中,
接收服务器,用于接收数据更新命令,输出至游标分配器;
游标分配器,用于为依序接收的数据更新命令分配相应的游标,构建数据更新命令与游标的映射关系,生成序列文件,输出至分发器;
分发器,用于接收游标分配器输出的序列文件,将序列文件中的数据更新命令向数据服务器输出,在接收到数据更新成功信息后,将数据更新命令与游标的映射关系输出至游标存储器;
游标存储器,用于以数据服务器为标识,存储数据更新成功的数据更新命令与游标的映射关系;
数据服务器,用于根据接收的数据更新命令,更新数据,在数据更新成功之后,向分发器返回数据更新成功信息。
所述游标分配器包括:接收模块、判断模块、分配模块、累加模块、序列文件生成模块以及发送模块,其中,
接收模块,用于接收数据更新命令,输出至判断模块;
判断模块,用于判断当前接收的数据更新命令是否为接收的第一条数据更新命令,如果是,输出至分配模块,如果不是,输出至累加模块;
分配模块,用于为接收的数据更新命令分配游标序列号,并记录分配的游标序列号信息,输出至序列文件生成模块;
累加模块,用于将记录的游标序列号进行累加,为接收数据更新命令设置累加的游标序列号,记录累加的游标序列号信息,输出至序列文件生成模块;
序列文件生成模块,用于根据接收的游标序列号信息,构建数据更新命令与游标序列号的映射关系,生成序列文件,输出至发送模块;
发送模块,用于将接收的序列文件输出至分发器。
所述游标分配器包括:接收模块、判断模块、分配模块、获取模块、累加模块、序列文件生成模块以及发送模块,其中,
接收模块,用于接收数据更新命令,输出至判断模块;
判断模块,用于判断AOF文件中是否存在写入的数据更新命令,如果不存在,通知分配模块,如果存在,通知获取模块;
分配模块,用于接收通知,为接收的数据更新命令分配游标序列号;
获取模块,用于接收通知,获取AOF文件中当前已写入的数据更新命令的游标序列号信息,输出至序列文件生成模块;
累加模块,用于对获取的游标序列号进行累加,为接收的数据更新命令设置累加的游标序列号,输出至序列文件生成模块;
序列文件生成模块,用于根据接收的游标序列号信息,构建数据更新命令与游标序列号的映射关系,生成序列文件,输出至发送模块;
发送模块,用于将接收的序列文件输出至分发器。
所述分发器包括:序列文件分发模块以及游标信息处理模块,其中,
序列文件分发模块,用于接收游标分配器输出的序列文件,将序列文件中的数据更新命令或序列文件向数据服务器输出;
游标信息处理模块,用于在接收到数据更新成功信息后,将数据更新成功对应的数据更新命令与游标的映射关系输出至游标存储器。
所述分发器进一步包括:
序列文件处理模块,用于接收游标分配器输出的序列文件,查询游标存储器,获取与序列文件中游标序列号相匹配的数据服务器信息,将数据服务器信息向序列文件分发模块输出,以使序列文件分发模块根据接收的数据服务器信息进行输出。
所述分发器进一步包括:
计时模块,用于在输出序列文件后,存储该序列文件并进行计时;
如果在预先设置的计时时间内没有接收到数据服务器返回的数据更新成功信息,将当前存储的序列文件向所述数据服务器进行重传。
所述游标存储器包括:游标存储区划分模块以及游标存储模块,其中,
游标存储区划分模块,用于以数据服务器为标识划分游标存储区,以使每一数据服务器对应一块游标存储子区;
游标存储模块,用于根据数据更新成功信息携带的数据服务器信息,在相应的游标存储子区中,存储数据更新成功的数据更新命令与游标的映射关系。
所述游标存储器进一步包括:
游标更新模块,用于遍历游标存储模块,获取映射关系中的最大游标序列号,删除除最大游标序列号对应的映射关系外的其他游标序列号对应的映射关系。
所述数据服务器包括:数据更新模块以及成功信息确认模块,其中,
数据更新模块,用于根据接收的数据更新命令,更新数据;
成功信息确认模块,用于在数据更新成功之后,向分发器返回数据更新成功信息。
所述数据服务器进一步包括:游标存储模块以及匹配模块,其中,
游标存储模块,用于存储数据更新成功的数据更新命令与游标的映射关系;
匹配模块,用于接收序列文件,获取序列文件中包含的游标序列号,判断获取的游标序列号与存储的游标序列号;
如果序列文件中包含的游标序列号与存储的游标序列号相同,或者,序列文件中包含中的游标序列号与存储的游标序列号相差两个以上累加单位,丢弃该序列文件,向游标分配器返回存储的游标序列号信息,以使游标分配器将接收的游标序列号之后的序列文件通过分发器向该数据服务器发送;
如果序列文件中包含的游标序列号大于存储的游标序列号一个累加单位,将该序列文件输出至数据更新模块。
所述数据服务器进一步包括:
数据更新请求模块,用于在数据服务器重启服务后,获取游标存储模块存储的游标序列号,触发匹配模块向游标分配器返回存储的游标序列号信息,以使游标分配器将接收的游标序列号之后的序列文件通过分发器向该数据服务器发送。
所述序列文件采用轻量级的数据交换格式JSON生成,并按照行进行数据更新命令划分。
由上述技术方案可见,本发明实施例提供的一种内存数据备份方法及内存数据备份系统,接收数据更新命令,为数据更新命令分配游标;构建数据更新命令与分配的游标的映射关系,生成序列文件;将生成的序列文件输出,以使数据服务器根据接收的序列文件中的数据更新命令,更新数据;接收数据更新成功信息,存储数据更新成功的数据更新命令与游标的映射关系。这样,通过为数据更新命令分配游标,并实时地进行数据更新命令分发,有效提升了数据的同步性能,存储数据更新成功的数据更新命令与游标的映射关系以便获知各数据服务器更新数据的信息,避免了当数据服务器故障或宕机时,造成两次时间周期期间发生的数据更新引起的数据丢失。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,以下将对实施例或现有技术描述中所需要使用的附图作简单地介绍。显而易见地,以下描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员而言,还可以根据这些附图所示实施例得到其它的实施例及其附图。
图1为现有内存数据备份系统结构示意图。
图2为本发明实施例内存数据备份系统结构示意图。
图3为本发明实施例的内存数据备份方法流程示意图。
具体实施方式
以下将结合附图对本发明各实施例的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所得到的所有其它实施例,都属于本发明所保护的范围。
现有的内存数据备份系统,对于通常有着主从角色的主从服务器来说,主服务器负责维护binlog的写入和binlog的发送,主服务器通过binlog方式存储更新的数据,经过预先设置的时间周期,将更新的数据通过binlog方式写入从服务器,以使从服务器与主服务器保持数据同步,由于binlog和主服务器集成在一起,当主服务器宕机时,由于用户无法通过主服务器进行数据更新,需要及时升级一个从服务器来充当主服务器,从而响应用户的数据更新请求,但由于主服务器与从服务器之间存在的binlog同步延迟,造成了部分更新数据的丢失,数据的安全性不高,主从服务器同步性较差。
本发明实施例中,考虑取消现有数据备份上的主从备份机制,在内存数据备份系统中,数据服务器(包括主服务器以及从服务器)之间为对等关系,每一台数据服务器既是主服务器,也是从服务器;同时,考虑对更新的数据进行顺序化存储,并为顺序存储的数据分配游标(ID),并将binlog进行服务化,独立于数据服务,提供单独的binlog服务,所有的数据服务器同时接收binlog进行数据更新,以达到数据同步的目的。也就是说,所有的数据更新命令都会直接发往内存数据备份系统,进行数据更新命令的持久保存和分配唯一游标,该游标用作后端数据服务器执行命令的游标,数据服务器和分发数据更新命令的服务器分别记录游标值,并进行游标交换,以防止数据更新命令的重复执行。
图2为本发明实施例内存数据备份系统结构示意图。参见图2,该系统包括:接收服务器、游标分配器、分发器、游标存储器以及数据服务器,其中,
接收服务器,用于接收数据更新命令,输出至游标分配器;
本发明实施例中,用户或数据更新业务逻辑在需要对内存数据库中的数据进行更新时,向接收服务器发送数据更新命令。
游标分配器,用于为依序接收的数据更新命令分配相应的游标,构建数据更新命令与游标的映射关系,生成序列文件,输出至分发器;
本发明实施例中,基于用户或数据更新业务逻辑所提交的数据更新命令总会有先后的顺序,并依序执行接收的数据更新名命令,因而,可以按照数据更新命令提交或接收的先后顺序,为数据更新命令分配用于标识其执行顺序的游标。
较佳地。游标信息为游标序列号。当然,实际应用中,游标信息也可以是其它的信息,只要保证为每个数据更新命令设置的游标信息互不相同即可,即只要能够唯一标识数据更新命令即可。例如,可以按照接收到的数据更新命令的顺序进行分配,游标序列号从1开始,最大为64位无符号长整型。
现有技术中,对于Mysql的binlog和Redis的AOF文件,都是二进制文件,无法查看数据更新命令内容。本发明实施例中,考虑采用轻量级的数据交换格式,即对象声明(JSON,JavaScript Object Notation)生成序列文件,以JSON格式的明文字符串生成数据更新命令文件。JSON格式是一种简便的数据交换格式,能够在服务器之间交换数据,采用压缩格式以及完全独立于语言的文本格式,以文字为基础,易于阅读和编写,同时也易于机器解析和生成。关于JSON的详细描述,具体可参见相关技术文献,在此不再赘述。
较佳地,在以JSON格式生成的数据更新命令文件中,按照行进行数据更新命令划分,每一行对应一条数据更新命令。这样,可以方便地对数据更新命令进行统计和追踪,方便应用调试。
分发器,用于接收游标分配器输出的序列文件,将序列文件中的数据更新命令向数据服务器输出,在接收到数据更新成功信息后,将数据更新命令与游标的映射关系输出至游标存储器;
本发明实施例中,内存数据备份系统分为数据接收服务器端和数据分发器端,接收服务器端监听网络端口,并将接收到的数据更新命令输出至游标分配器进行游标分配和磁盘写入,生成序列文件。
游标存储器,用于以数据服务器为标识,存储数据更新成功的数据更新命令与游标的映射关系;
数据服务器,用于根据接收的数据更新命令,更新数据,在数据更新成功之后,向分发器返回数据更新成功信息。
本发明实施例中,数据服务器的数量为一台或多台。
数据分发器端根据预先设置的分发配置策略和所记录的游标值,向目标服务器(数据服务器)分发所接收到的数据更新命令。
其中,
游标分配器包括:接收模块、判断模块、分配模块、累加模块、序列文件生成模块以及发送模块(图中未示出),其中,
接收模块,用于接收数据更新命令,输出至判断模块;
判断模块,用于判断当前接收的数据更新命令是否为接收的第一条数据更新命令,如果是,输出至分配模块,如果不是,输出至累加模块;
分配模块,用于为接收的数据更新命令分配游标序列号,并记录分配的游标序列号信息,输出至序列文件生成模块;
累加模块,用于将记录的游标序列号进行累加,为接收数据更新命令设置累加的游标序列号,记录累加的游标序列号信息,输出至序列文件生成模块;
序列文件生成模块,用于根据接收的游标序列号信息,构建数据更新命令与游标序列号的映射关系,生成序列文件,输出至发送模块;
发送模块,用于将接收的序列文件输出至分发器。
当然,实际应用中,游标分配器也可以包括:接收模块、判断模块、分配模块、获取模块、累加模块、序列文件生成模块以及发送模块(图中未示出),其中,
接收模块,用于接收数据更新命令,输出至判断模块;
判断模块,用于判断AOF文件中是否存在写入的数据更新命令,如果不存在,通知分配模块,如果存在,通知获取模块;
分配模块,用于接收通知,为接收的数据更新命令分配游标序列号;
获取模块,用于接收通知,获取AOF文件中当前已写入的数据更新命令的游标序列号信息,输出至序列文件生成模块;
累加模块,用于对获取的游标序列号进行累加,为接收的数据更新命令设置累加的游标序列号,输出至序列文件生成模块;
序列文件生成模块,用于根据接收的游标序列号信息,构建数据更新命令与游标序列号的映射关系,生成序列文件,输出至发送模块;
发送模块,用于将接收的序列文件输出至分发器。
分发器包括:序列文件分发模块以及游标信息处理模块(图中未示出),其中,
序列文件分发模块,用于接收游标分配器输出的序列文件,将序列文件中的数据更新命令或序列文件向数据服务器输出;
游标信息处理模块,用于在接收到数据更新成功信息后,将数据更新成功对应的数据更新命令与游标的映射关系输出至游标存储器。
实际应用中,由于各数据服务器处理数据更新命令的速度不同,以及在线状态不同,使得各数据服务器中,根据数据更新命令进行数据更新的数据量也不同,即各数据服务器相应更新的数据并不保持实时同步,例如,当某一数据服务器发生异常,则在异常期间内,不能进行数据更新,而其它运行正常的数据服务器可以进行数据更新,导致该数据服务器与其它数据服务器中的数据不同步。
因而,分发器可以进一步包括:
序列文件处理模块,用于接收游标分配器输出的序列文件,查询游标存储器,获取与序列文件中游标序列号相匹配的数据服务器信息,将数据服务器信息向序列文件分发模块输出,以使序列文件分发模块根据接收的数据服务器信息进行输出。
本发明实施例中,游标存储器存储有各数据服务器进行数据更新成功的游标序列号信息,如果序列文件中的游标序列号大于游标存储器存储的游标序列号一个单位阈值,表示该数据服务器可以处理该序列文件。
实际应用中,如果分发器在预先设置的计时时间内没有接收到数据服务器返回的数据更新成功信息,则可以认为是已发送的序列文件出现了异常,需要重新发送序列文件。因而,该分发器还可以进一步包括:
计时模块,用于在输出序列文件后,存储该序列文件并进行计时;
如果在预先设置的计时时间内没有接收到数据服务器返回的数据更新成功信息,将当前存储的序列文件向所述数据服务器进行重传。
本发明实施例中,序列文件分发模块在发送序列文件后,由于与数据服务器之间的通信异常,或者,数据服务器的应用程序接收到序列文件后,在处理消息的过程中由于异常,或者,数据服务器的应用程序接收到序列文件后,在成功处理消息后,返回数据更新成功信息,由于与分发器之间的通信异常,都将使分发器接收不到数据更新成功信息。
游标存储器包括:游标存储区划分模块以及游标存储模块(图中未示出),其中,
游标存储区划分模块,用于以数据服务器为标识划分游标存储区,以使每一数据服务器对应一块游标存储子区;
游标存储模块,用于根据数据更新成功信息携带的数据服务器信息,在相应的游标存储子区中,存储数据更新成功的数据更新命令与游标的映射关系。
本发明实施例中,为了有效降低磁盘中持久化存储的数据量,游标存储器还可以进一步包括:
游标更新模块,用于遍历游标存储模块,获取映射关系中的最大游标序列号,删除除最大游标序列号对应的映射关系外的其他游标序列号对应的映射关系。
数据服务器包括:数据更新模块以及成功信息确认模块(图中未示出),其中,
数据更新模块,用于根据接收的数据更新命令,更新数据;
成功信息确认模块,用于在数据更新成功之后,向分发器返回数据更新成功信息。
本发明实施例,为了避免与序列文件分发模块之间的通信异常引起的数据更新混乱的情形,数据服务器还可以进一步包括:游标存储模块以及匹配模块,其中,
游标存储模块,用于存储数据更新成功的数据更新命令与游标的映射关系;
匹配模块,用于接收序列文件,获取序列文件中包含的游标序列号,判断获取的游标序列号与存储的游标序列号;
如果序列文件中包含的游标序列号与存储的游标序列号相同,或者,序列文件中包含中的游标序列号与存储的游标序列号相差两个以上累加单位,丢弃该序列文件,向游标分配器返回存储的游标序列号信息,以使游标分配器将接收的游标序列号之后的序列文件通过分发器向该数据服务器发送;
如果序列文件中包含的游标序列号大于存储的游标序列号一个累加单位,将该序列文件输出至数据更新模块。
本发明实施例中,如果序列文件中包含的游标序列号与存储的游标序列号相同,表明该数据服务器上一次向分发器返回的数据更新成功信息没有成功到分发器,分发器在计时超时后重传了该序列文件,而该序列文件已被该数据服务器成功处理,并记录了处理成功的信息。
如果序列文件中包含的游标序列号与存储的游标序列号相差两个以上累加单位,表明在分发器或游标分配器处,对发送的序列文件进行了更改,将导致序列文件不能按序进行处理,因而,需要通知分发器或游标分配器,从数据服务器已成功处理的数据后,重新按序发送数据更新命令。
如果序列文件中包含的游标序列号大于存储的游标序列号一个累加单位,表明接收流程正确。
当然,实际应用中,数据服务器在发生异常,并从异常中恢复正常后,可以主动向游标分配器发起数据更新请求,该数据服务器进一步包括:
数据更新请求模块,用于在数据服务器重启服务后,获取游标存储模块存储的游标序列号,触发匹配模块向游标分配器返回存储的游标序列号信息,以使游标分配器将接收的游标序列号之后的序列文件通过分发器向该数据服务器发送。
本发明实施例的内存数据备份系统,在自有开发的纯内存存储服务的多机冗余(HA)和数据恢复解决方案中,表现非常好。
由上述可见,本发明实施例的内存数据备份系统,与现有主从复制备份数据的技术方案相比,通过Binlog服务独立化,数据更新命令的接收端和分发端进行分离设计,使得系统后端的任何数据服务器发生异常,都不会影响到数据服务,现有的主从复制备份数据同步技术方案中,由于主服务器的故障所带来的影响更大,因而,主服务器的安全性要求往往比从服务器的安全性要求更高,但在本发明实施例中,由于所有的数据服务器都是对等的,而且,通过实时的数据更新命令分发,当数据服务器故障或宕机时,不会造成两次时间周期期间发生的数据更新,由于主服务器器未能及时写入从服务器引起的数据丢失,因而,避免了主从服务器的切换所带来的binlog丢失问题;进一步地,数据服务器在故障或宕机后重新启动,会按照该数据服务器相应更新的游标值接续进行数据更新,不存在Redis主从同步中断需要完全重新同步所有AOF文件的问题;此外,对于Mysql的binlog和Redis的AOF文件,都是二进制文件,无法查看数据更新命令内容,本发明实施例中,创新使用JSON格式的明文字符串作为命令体,按照行进行数据更新命令划分,可以方便地对数据更新命令进行统计和追踪,方便应用调试。
图3为本发明实施例的内存数据备份方法流程示意图。参见图3,该流程包括:
步骤301,接收数据更新命令,为数据更新命令分配游标;
本步骤中,基于提交的数据更新命令有先后顺序的特点,因而,可以按照数据更新命令提交或接收的先后顺序,为数据更新命令分配用于标识其执行顺序的游标。例如,可以按照接收到的数据更新命令的顺序进行分配,id从1开始,最大为64位无符号长整型。
为数据更新命令分配游标包括:
判断当前接收的数据更新命令是否为接收的第一条数据更新命令,如果是,为接收的数据更新命令分配游标序列号,并记录分配的游标序列号信息;如果不是,将记录的游标序列号进行累加,为接收数据更新命令设置累加的游标序列号,记录累加的游标序列号信息。
本步骤中,游标分配器判断接收的数据更新命令是否为第一条数据更新命令,如果是,将初始游标序列号分配给该数据更新命令,并记录该分配的游标序列号信息,后续如果接收到新数据更新命令,则将接收的前一数据更新命令的游标序列号进行累加,作为当前新接收数据更新命令的游标序列号。例如,将游标序列号依序加1,如果设置的第一条数据更新命令对应的初始游标序列号为1,则后续接收的数据更新命令对应的游标序列号,依序为2、3、4、…。
当然,实际应用中,为数据更新命令分配游标也可以包括:
判断预先存储的AOF文件中是否存在写入的数据更新命令,如果不存在,为接收的数据更新命令分配游标序列号;如果存在,获取AOF文件中当前已写入的数据更新命令的游标序列号信息,对获取的游标序列号进行累加,为接收的数据更新命令设置累加的游标序列号。
本步骤中,游标分配器在接收到数据更新命令时,查询写入磁盘的AOF文件中是否有写入的数据更新命令,如果没有,表明当前接收到的数据更新命令为第一条数据更新命令;如果写入磁盘的AOF文件中有写入的数据更新命令,则可以根据最近一次写入的数据更新命令中携带的游标序列号信息,为当前接收到的数据更新命令设置相应的游标序列号。
步骤302,构建数据更新命令与分配的游标的映射关系,生成序列文件;
本步骤中,建立数据更新命令与游标的映射关系并存储。具体来说,将接收的数据更新命令顺序写入磁盘中的序列文件,并将顺序值(游标序列号)从1开始,依序自增,并将依序自增的序号作为依序接收的数据更新命令的游标,从而形成一一映射关系。
本发明实施例中,较佳地,采用轻量级的数据交换格式JSON生成序列文件,并按照行进行数据更新命令划分。
步骤303,将生成的序列文件输出,以使数据服务器根据接收的序列文件中的数据更新命令,更新数据;
本步骤中,在将生成的序列文件输出的步骤之前,还可以进一步包括:
根据生成的序列文件,查询存储的映射关系,获取与序列文件中游标序列号相匹配的数据服务器信息,将数据服务器信息携带在序列文件中。
较佳地,在将生成的序列文件输出的步骤之后,还可以进一步包括:
存储该序列文件并进行计时;
如果在预先设置的计时时间内没有接收到数据服务器返回的数据更新成功信息,将当前存储的序列文件向所述数据服务器进行重传。
实际应用中,在更新数据的步骤之后,该方法还可以进一步包括:
数据服务器存储数据更新成功的数据更新命令与游标的映射关系。
这样,在下一时间周期,所述数据服务器根据接收的序列文件中的数据更新命令,更新数据包括:
数据服务器接收序列文件,获取序列文件中包含的游标序列号,判断获取的游标序列号与存储的游标序列号;
如果序列文件中包含的游标序列号与存储的游标序列号相同,或者,序列文件中包含中的游标序列号与存储的游标序列号相差两个以上累加单位,丢弃该序列文件,向游标分配器返回存储的游标序列号信息,以使游标分配器将接收的游标序列号之后的序列文件通过分发器向该数据服务器发送;
如果序列文件中包含的游标序列号大于存储的游标序列号一个累加单位,根据接收的序列文件中的数据更新命令,更新数据。
步骤304,接收数据更新成功信息,存储数据更新成功的数据更新命令与游标的映射关系。
本步骤中,数据服务器根据接收的数据更新命令,更新数据,在数据更新成功之后,返回数据更新成功信息。
本发明实施例中,该方法还可以进一步包括:
步骤305,监测到数据服务器重启服务后,获取存储的游标序列号,触发向游标分配器返回存储的游标序列号信息,以使游标分配器将接收的游标序列号之后的序列文件通过分发器向该数据服务器发送。
本步骤中,读取存储的游标文件中,获取游标文件中顺序位最高的游标,即最大的游标序列号,根据该最大的游标序列号,查询游标分配器存储的AOF文件,根据AOF文件中的映射关系,获取最大的游标序列号对应的数据更新命令,从而根据获取的数据更新命令,对数据服务器中最近更新的数据,依序执行最大的游标序列号对应的数据更新命令之后的数据更新命令,从而实现数据同步。这样,通过主动触发数据更新,并向游标分配器返回存储的游标序列号信息,可以使得游标分配器只需向数据服务器返回该数据服务器未处理成功的数据更新命令,从而降低了数据更新同步所需的时间,也避免了由于数据服务器异常导致的数据丢失,有效提升了数据同步性能。
显然,本领域技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若对本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也包含这些改动和变型在内。

Claims (16)

1.一种内存数据备份方法,该方法包括:
接收数据更新命令,为数据更新命令分配游标;
构建数据更新命令与分配的游标的映射关系,生成序列文件;
将生成的序列文件输出,以使数据服务器根据接收的序列文件中的数据更新命令,更新数据;
接收数据更新成功信息,存储数据更新成功的数据更新命令与游标的映射关系;
其中,所述为数据更新命令分配游标包括:
判断预先存储的不断添加模式AOF文件中是否存在写入的数据更新命令,如果不存在,为接收的数据更新命令分配游标序列号;如果存在,获取AOF文件中当前已写入的数据更新命令的游标序列号信息,对获取的游标序列号进行累加,为接收的数据更新命令设置累加的游标序列号。
2.根据权利要求1所述的方法,其中,所述序列文件采用轻量级的数据交换格式JSON生成,并按照行进行数据更新命令划分。
3.根据权利要求2所述的方法,其中,在所述将生成的序列文件输出的步骤之前,进一步包括:
根据生成的序列文件,查询存储的映射关系,获取与序列文件中游标序列号相匹配的数据服务器信息,将数据服务器信息携带在序列文件中。
4.根据权利要求3所述的方法,其中,在所述将生成的序列文件输出的步骤之后,进一步包括:
存储该序列文件并进行计时;
如果在预先设置的计时时间内没有接收到数据服务器返回的数据更新成功信息,将当前存储的序列文件向所述数据服务器进行重传。
5.根据权利要求2所述的方法,其中,在所述更新数据的步骤之后,该方法进一步包括:
数据服务器存储数据更新成功的数据更新命令与游标的映射关系;
在下一时间周期,所述数据服务器根据接收的序列文件中的数据更新命令,更新数据包括:
数据服务器接收序列文件,获取序列文件中包含的游标序列号,判断获取的游标序列号与存储的游标序列号;
如果序列文件中包含的游标序列号与存储的游标序列号相同,或者,序列文件中包含中的游标序列号与存储的游标序列号相差两个以上累加单位,丢弃该序列文件,向游标分配器返回存储的游标序列号信息,以使游标分配器将接收的游标序列号之后的序列文件通过分发器向该数据服务器发送;
如果序列文件中包含的游标序列号大于存储的游标序列号一个累加单位,根据接收的序列文件中的数据更新命令,更新数据。
6.根据权利要求2所述的方法,其中,所述方法进一步包括:
监测到数据服务器重启服务后,获取存储的游标序列号,触发向游标分配器返回存储的游标序列号信息,以使游标分配器将接收的游标序列号之后的序列文件通过分发器向该数据服务器发送。
7.一种内存数据备份系统,其特征在于,该内存数据备份系统包括:接收服务器、游标分配器、分发器、游标存储器以及数据服务器,其中,
接收服务器,用于接收数据更新命令,输出至游标分配器;
游标分配器,包括接收模块、判断模块、分配模块、获取模块、累加模块、序列文件生成模块以及发送模块,其中,
所述接收模块用于接收数据更新命令,输出至判断模块;
所述判断模块用于判断AOF文件中是否存在写入的数据更新命令,如果不存在,通知分配模块,如果存在,通知获取模块;
所述分配模块用于接收通知,为接收的数据更新命令分配游标序列号;
所述获取模块用于接收通知,获取AOF文件中当前已写入的数据更新命令的游标序列号信息,输出至序列文件生成模块;
所述累加模块用于对获取的游标序列号进行累加,为接收的数据更新命令设置累加的游标序列号,输出至序列文件生成模块;
所述序列文件生成模块用于根据接收的游标序列号信息,构建数据更新命令与游标序列号的映射关系,生成序列文件,输出至发送模块;
所述发送模块用于将接收的序列文件输出至分发器;
分发器,用于接收游标分配器输出的序列文件,将序列文件中的数据更新命令向数据服务器输出,在接收到数据更新成功信息后,将数据更新命令与游标的映射关系输出至游标存储器;
游标存储器,用于以数据服务器为标识,存储数据更新成功的数据更新命令与游标的映射关系;
数据服务器,用于根据接收的数据更新命令,更新数据,在数据更新成功之后,向分发器返回数据更新成功信息。
8.根据权利要求7所述的内存数据备份系统,其特征在于,所述分发器包括:序列文件分发模块以及游标信息处理模块,其中,
序列文件分发模块,用于接收游标分配器输出的序列文件,将序列文件中的数据更新命令或序列文件向数据服务器输出;
游标信息处理模块,用于在接收到数据更新成功信息后,将数据更新成功对应的数据更新命令与游标的映射关系输出至游标存储器。
9.根据权利要求8所述的内存数据备份系统,其特征在于,所述分发器进一步包括:
序列文件处理模块,用于接收游标分配器输出的序列文件,查询游标存储器,获取与序列文件中游标序列号相匹配的数据服务器信息,将数据服务器信息向序列文件分发模块输出,以使序列文件分发模块根据接收的数据服务器信息进行输出。
10.根据权利要求8所述的内存数据备份系统,其特征在于,所述分发器进一步包括:
计时模块,用于在输出序列文件后,存储该序列文件并进行计时;
如果在预先设置的计时时间内没有接收到数据服务器返回的数据更新成功信息,将当前存储的序列文件向所述数据服务器进行重传。
11.根据权利要求7所述的内存数据备份系统,其特征在于,所述游标存储器包括:游标存储区划分模块以及游标存储模块,其中,
游标存储区划分模块,用于以数据服务器为标识划分游标存储区,以使每一数据服务器对应一块游标存储子区;
游标存储模块,用于根据数据更新成功信息携带的数据服务器信息,在相应的游标存储子区中,存储数据更新成功的数据更新命令与游标的映射关系。
12.根据权利要求11所述的内存数据备份系统,其特征在于,所述游标存储器进一步包括:
游标更新模块,用于遍历游标存储模块,获取映射关系中的最大游标序列号,删除除最大游标序列号对应的映射关系外的其他游标序列号对应的映射关系。
13.根据权利要求7所述的内存数据备份系统,其特征在于,所述数据服务器包括:数据更新模块以及成功信息确认模块,其中,
数据更新模块,用于根据接收的数据更新命令,更新数据;
成功信息确认模块,用于在数据更新成功之后,向分发器返回数据更新成功信息。
14.根据权利要求13所述的内存数据备份系统,其特征在于,所述数据服务器进一步包括:游标存储模块以及匹配模块,其中,
游标存储模块,用于存储数据更新成功的数据更新命令与游标的映射关系;
匹配模块,用于接收序列文件,获取序列文件中包含的游标序列号,判断获取的游标序列号与存储的游标序列号;
如果序列文件中包含的游标序列号与存储的游标序列号相同,或者,序列文件中包含中的游标序列号与存储的游标序列号相差两个以上累加单位,丢弃该序列文件,向游标分配器返回存储的游标序列号信息,以使游标分配器将接收的游标序列号之后的序列文件通过分发器向该数据服务器发送;
如果序列文件中包含的游标序列号大于存储的游标序列号一个累加单位,将该序列文件输出至数据更新模块。
15.根据权利要求13所述的内存数据备份系统,其特征在于,所述数据服务器进一步包括:
数据更新请求模块,用于在数据服务器重启服务后,获取游标存储模块存储的游标序列号,触发匹配模块向游标分配器返回存储的游标序列号信息,以使游标分配器将接收的游标序列号之后的序列文件通过分发器向该数据服务器发送。
16.根据权利要求7至15任一项所述的内存数据备份系统,其特征在于,所述序列文件采用轻量级的数据交换格式JSON生成,并按照行进行数据更新命令划分。
CN201210340231.8A 2012-09-13 2012-09-13 内存数据备份方法及内存数据备份系统 Active CN102880529B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210340231.8A CN102880529B (zh) 2012-09-13 2012-09-13 内存数据备份方法及内存数据备份系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210340231.8A CN102880529B (zh) 2012-09-13 2012-09-13 内存数据备份方法及内存数据备份系统

Publications (2)

Publication Number Publication Date
CN102880529A CN102880529A (zh) 2013-01-16
CN102880529B true CN102880529B (zh) 2015-04-15

Family

ID=47481864

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210340231.8A Active CN102880529B (zh) 2012-09-13 2012-09-13 内存数据备份方法及内存数据备份系统

Country Status (1)

Country Link
CN (1) CN102880529B (zh)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103491137A (zh) * 2013-09-02 2014-01-01 用友软件股份有限公司 数据同步系统和数据同步方法
CN103914337B (zh) * 2014-03-24 2016-04-13 小米科技有限责任公司 服务调用方法、装置及终端
CN105468641B (zh) * 2014-09-09 2020-08-18 上海盛大网络发展有限公司 一种搜索云消息实时分发系统及方法
CN105656858B (zh) * 2014-11-17 2018-11-06 阿里巴巴集团控股有限公司 一种数据更新方法及装置
CN105989160A (zh) * 2015-03-03 2016-10-05 大唐软件技术股份有限公司 一种针对Redis数据库的内存数据持久化方法和装置
CN105227657B (zh) * 2015-09-29 2018-07-06 北京京东尚科信息技术有限公司 一种数据同步的方法和装置
CN105279047B (zh) * 2015-11-02 2019-10-25 Oppo广东移动通信有限公司 数据备份装置、方法及数据恢复装置、方法
CN105897440A (zh) * 2016-04-07 2016-08-24 努比亚技术有限公司 一种关注页信息的分发装置、方法和系统
CN108023914B (zh) * 2016-11-03 2021-03-02 阿里巴巴集团控股有限公司 一种内存数据共享系统、内存数据的写入以及读取方法
CN111448543B (zh) * 2017-12-07 2021-10-01 华为技术有限公司 内存访问技术及计算机系统
CN108235051B (zh) * 2017-12-29 2020-08-21 福建中金在线信息科技有限公司 直播系统及直播数据的存储和获取方法
CN111180031B (zh) * 2019-12-31 2023-07-28 贵州精准健康数据有限公司 数据管理系统及方法
CN111554368B (zh) * 2020-04-27 2023-07-28 贵州精准健康数据有限公司 公共卫生系统与医疗系统互通系统及方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1519756A (zh) * 2003-01-31 2004-08-11 ���µ�����ҵ��ʽ���� 记录再生装置、记录再生方法、计算机程序及记录媒体
CN1838055A (zh) * 2005-01-28 2006-09-27 惠普开发有限公司 具有数据跟踪的存储复制系统
CN101808137A (zh) * 2010-03-29 2010-08-18 成都市华为赛门铁克科技有限公司 数据传输方法、装置和系统

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1519756A (zh) * 2003-01-31 2004-08-11 ���µ�����ҵ��ʽ���� 记录再生装置、记录再生方法、计算机程序及记录媒体
CN1838055A (zh) * 2005-01-28 2006-09-27 惠普开发有限公司 具有数据跟踪的存储复制系统
CN101808137A (zh) * 2010-03-29 2010-08-18 成都市华为赛门铁克科技有限公司 数据传输方法、装置和系统

Also Published As

Publication number Publication date
CN102880529A (zh) 2013-01-16

Similar Documents

Publication Publication Date Title
CN102880529B (zh) 内存数据备份方法及内存数据备份系统
US9779128B2 (en) System and method for massively parallel processing database
US9984140B1 (en) Lease based leader election system
US10747745B2 (en) Transaction execution commitment without updating of data row transaction status
US9575849B2 (en) Synchronized backup and recovery of database systems
WO2019154394A1 (zh) 分布式数据库集群系统、数据同步方法及存储介质
US8301600B1 (en) Failover recovery in a distributed data store
WO2017177941A1 (zh) 主备数据库切换方法和装置
US9251008B2 (en) Client object replication between a first backup server and a second backup server
CN108509462B (zh) 一种同步活动事务表的方法及装置
JP6028850B2 (ja) データ多重化システム
US9367261B2 (en) Computer system, data management method and data management program
CN104506625A (zh) 一种提升云数据库元数据节点可靠性的方法
CN109918229B (zh) 非日志模式的数据库集群副本构建方法及装置
EP2976714B1 (en) Method and system for byzantine fault tolerant data replication
JP2016524750A (ja) 索引更新パイプライン
US11436110B2 (en) Distributed database remote backup
CN105830033A (zh) 用于在分布式数据网格中支持持久存储装置版本化和完整性的系统和方法
CN103294787A (zh) 分布式数据库系统的多副本存储方法和系统
KR101296778B1 (ko) NoSQL 데이터베이스를 위한 결과적 트랜잭션 처리 방법
US9703634B2 (en) Data recovery for a compute node in a heterogeneous database system
CN113987064A (zh) 数据处理方法、系统及设备
US20120278429A1 (en) Cluster system, synchronization controlling method, server, and synchronization controlling program
CN109241182B (zh) 大数据实时同步方法、装置、计算机设备及存储介质
CN110895547A (zh) 基于db2联邦特性的多源异构数据库数据同步系统及方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20230414

Address after: Room 501-502, 5/F, Sina Headquarters Scientific Research Building, Block N-1 and N-2, Zhongguancun Software Park, Dongbei Wangxi Road, Haidian District, Beijing, 100193

Patentee after: Sina Technology (China) Co.,Ltd.

Address before: 100080, International Building, No. 58 West Fourth Ring Road, Haidian District, Beijing, 20 floor

Patentee before: Sina.com Technology (China) Co.,Ltd.

TR01 Transfer of patent right