CN104965862A - 一种内存数据库集群的同步方法及内存数据库主机 - Google Patents
一种内存数据库集群的同步方法及内存数据库主机 Download PDFInfo
- Publication number
- CN104965862A CN104965862A CN201510299544.7A CN201510299544A CN104965862A CN 104965862 A CN104965862 A CN 104965862A CN 201510299544 A CN201510299544 A CN 201510299544A CN 104965862 A CN104965862 A CN 104965862A
- Authority
- CN
- China
- Prior art keywords
- memory database
- data
- address
- machine
- memory
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
- G06F16/275—Synchronous replication
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开了一种内存数据库集群的同步方法,包括:获取内存数据库从机发送的同步请求指令,所述同步请求指令包括同步偏移地址;判断当前需要同步到的数据的存储地址与所述同步偏移地址的差值是否大于增量同步缓存区的地址容量;若否,则将所述增量同步缓存区中在所述同步偏移地址以后的数据发送给所述内存数据库从机以实现增量同步;若是,则将持久化数据保存文件中在所述同步偏移地址以后的数据发送给所述内存数据库从机以实现增量同步。相应地,本发明实施例还公开了一种内存数据库主机。采用本发明,可以实现保证主从机之间数据的一致性、提高数据同步的效率以及改善主机的处理性能。
Description
技术领域
本发明涉及数据库技术领域,尤其涉及一种内存数据库集群的同步方法及内存数据库主机。
背景技术
内存数据库是指将数据放在内存中直接操作的数据库,一般以集群的方式部署,这样的集群称为内存数据库集群。内存数据库集群包括内存数据库主机和内存数据库从机,两者之间需要保持数据的同步。进一步地,同步分为全量同步和增量同步,全量同步是指内存数据库从机一次性将内存数据库主机的全部数据进行同步,增量同步是指内存数据库从机只对其与内存数据库主机之间不同的部分数据进行同步,应理解地,针对大数据的同步,执行全量同步的效率要低于增量同步,因此优先尝试增量同步。
在现有技术中,内存数据库主机会在初始化时创建一个增量同步缓存区来保存临时数据,如图1所示,当内存数据库从机与内存数据库主机之间因网络问题导致闪断重连后,内存数据库从机会向内存数据库主机发送增量同步请求指令以请求对数据进行增量同步;内存数据库主机根据增量同步请求指令中的运行号和同步偏移地址判断内存数据库从机是否满足进行增量同步的条件,如当内存数据库从机的运行号等于内存数据库主机的运行号且同步偏移地址小于增量同步缓存区的缓存上限地址时判定为满足进行增量同步的条件,此时内存数据库主机将增量同步缓存区中同步偏移地址以后的数据发送给内存数据库从机以实现增量同步,又如当内存数据库从机的运行号不等于内存数据库主机的运行号或同步偏移地址大于增量同步缓存区的地址容量时判定为不满足进行增量同步的条件,此时内存数据库主机将内存中所有的数据生成内存数据库镜像文件发送给内存数据库从机以实现全量同步。
然而,上述现有技术存在以下问题:(1)在业务高峰期或大并发数据情况下极有可能在闪断期间数据量会超过增量同步缓存区的缓存大小,导致增量同步缓存区循环覆盖缓存,造成数据丢失,影响主从机之间数据的一致性;(2)在同步偏移地址超出增量同步缓存区的范围时会进行全量同步,这将影响同步效率以及内存数据库主机的处理性能。
发明内容
本发明实施例所要解决的技术问题在于,提供一种内存数据库集群的同步方法及内存数据库主机,可以实现保证主从机之间数据的一致性、提高数据同步的效率以及改善主机的处理性能。
为了解决上述技术问题,本发明实施例提供一种内存数据库集群的同步方法,包括:
获取内存数据库从机发送的同步请求指令,所述同步请求指令包括同步偏移地址;
判断当前需要同步到的数据的存储地址与所述同步偏移地址的差值是否大于增量同步缓存区的地址容量;
若否,则将所述增量同步缓存区中在所述同步偏移地址以后的数据发送给所述内存数据库从机以实现增量同步;
若是,则将持久化数据保存文件中在所述同步偏移地址以后的数据发送给所述内存数据库从机以实现增量同步。
相应地,本发明实施例还提供了一种内存数据库主机,包括:
指令获取模块,用于获取内存数据库从机发送的同步请求指令,所述同步请求指令包括同步偏移地址;
容量判断模块,用于判断当前需要同步到的数据的存储地址与所述同步偏移地址的差值是否大于增量同步缓存区的地址容量;
第一发送模块,用于若否,则将所述增量同步缓存区中在所述同步偏移地址以后的数据发送给所述内存数据库从机以实现增量同步;
第二发送模块,用于若是,则将持久化数据保存文件中在所述同步偏移地址以后的数据发送给所述内存数据库从机以实现增量同步。
实施本发明实施例,具有如下有益效果:本发明实施例中的内存数据库主机,在获取内存数据库从机发送的同步请求指令(其中同步请求指令包括同步偏移地址)后,若判定当前需要同步到的数据的存储地址与同步偏移地址的差值大于增量同步缓存区的地址容量,则将持久化数据保存文件中在同步偏移地址以后的数据发送给内存数据库从机以进行增量同步,从而避免在此情况下会进行全量同步,可以实现保证主从机之间数据的一致性、提高数据同步的效率以及改善主机的处理性能。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例中的一种现有内存数据库集群的同步方法的示意图;
图2是本发明实施例中的一种内存数据库集群的示意图;
图3是本发明实施例中的一种内存数据库集群的同步方法的流程示意图;
图4是本发明实施例中的另一种内存数据库集群的同步方法的流程示意图;
图5是本发明实施例提供的一种内存数据库主机的结构示意图;
图6是本发明实施例提供的一种增量同步缓存区的示意图;
图7是本发明实施例提供的一种持久化数据保存文件的示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了便于理解本发明实施例,下面先结合图2介绍下本发明实施例的应用场景,如图所示的内存数据库集群至少包括一个内存数据库主机和多个内存数据库从机,内存数据库主机不断写入数据,内存数据库从机与内存数据库主机保持数据同步,同步的方式包括上文提及的全量同步和增量同步,这里不再赘述。需要说明的是,本发明实施例的内存数据库可以包括任意类型的内存数据库,例如Redis内存数据库等,其中,Redis是一种开源的、支持网络、基于内存的Key-Value数据库。
图3是本发明实施例中的一种内存数据库集群的同步方法的流程示意图。该方法实现于内存数据库主机,如图所示可以包括:
S101,获取内存数据库从机发送的同步请求指令,所述同步请求指令包括同步偏移地址。
在本发明实施例中,所述同步请求指令为增量同步请求指令;所述同步偏移地址本质上是一个存储地址,用于记录上一次数据同步的结束位置。
具体地,内存数据库主机接收内存数据库从机发送来的增量同步请求指令,该增量同步请求指令中携带有同步偏移地址。
应理解地,内存数据库主机在初始化时会创建一个增量同步缓存区。其中,内存数据库主机在向内存写入数据的时候,同时会把数据写入增量同步缓存区。需要指出的是,增量同步缓存区是以环形存储的方式写入数据,即写入的数据超过增量同步缓存区的缓存大小时,会循环覆盖之前的数据,从而达到节省存储空间的目的,因而增量同步缓存区主要用于保存临时数据。
还应理解地,内存数据库主机在每次向内存写入数据时,会将该数据记录到持久化数据保存文件中,例如Aof文件。具体实现过程中,内存数据库主机可以通过勾选配置文件中的appendonly选项实现上述功能。需要指出的是,不同于增量同步缓存区中写入的数据,持久化数据保存文件中记录的数据是文本格式(.txt),而不是二进制数据格式。内存数据库主机在向内存写入数据时,同时会将这些数据一行一行地记录在持久化数据保存文件中,因而持久化数据保存文件中记录的数据基本与内存中写入的数据一致。
S102,判断当前需要同步到的数据的存储地址与所述同步偏移地址的差值是否大于增量同步缓存区的地址容量。
其中,所述当前需要同步到的数据可以是内存数据库主机的内存中最新写入的一个数据,该数据的存储地址与同步偏移地址的差值为一段地址,该段地址对应的数据就是本次需同步到内存数据库从机的数据。
具体地,内存数据库主机判断当前需要同步到的数据的存储地址与同步偏移地址的差值是否大于增量同步缓存区的地址容量。应理解地,若该差值小于增量同步缓存区的地址容量,则说明计划同步到内存数据库从机的数据都可以在增量同步缓存区缓存的临时数据中找到;若该差值大于增量同步缓存区的地址容量,则说明本次需同步到内存数据库从机的数据超出了增量同步缓存区缓存的临时数据,其中一部分数据已经被覆盖保存,无法在增量同步缓存区中找到,因而在现有技术中,为了保证数据同步的一致性,内存数据库主机不会再执行增量同步,转而执行全量同步,从而对同步效率以及内存数据库主机的处理性能造成影响。
进一步地,增量同步请求指令除包括同步偏移地址外还包括内存数据库从机的运行号。其中运行号用于指示内存数据库当前正处于的工作流,若各个内存数据库的运行号相同,则说明这些内存数据库处于同一个工作流,反之处于不同的工作流,应理解地,处于不同工作流的内存数据库不能通过增量同步来保持数据的一致性。因此,内存数据库主机应该在确定内存数据库从机的运行号等于其运行号后,再判断当前需要同步到的数据的存储地址与所述同步偏移地址的差值是否大于增量同步缓存区的地址容量。
相反地,内存数据库主机在确定内存数据库从机的运行号不等于其运行号时,生成内存数据库镜像文件,并将其发送给内存数据库从机以实现全量同步。例如:一个新加入内存数据库集群的内存数据库从机,其运行号肯定不同于内存数据库主机的运行号,该内存数据库从机不能通过增量同步与内存数据库主机保持数据的一致性,在向内存数据库主机发送增量同步请求指令后,内存数据库主机执行内存数据库镜像文件全量同步。其中内存数据库镜像是包括内存数据库主机的内存中所有数据的一个数据包,内存数据库从机通过加载内存数据库镜像可以在其内存中写入内存数据库主机的内存中的所有数据,故为全量同步。具体实现过程中,内存数据库主机确定内存数据库从机的运行号不等于其运行号时,先向内存数据库从机发送全量同步消息以指示内存数据库从机做好全量同步的准备,接着生成内存数据库镜像文件,再将生成的内存数据库镜像文件通过FTP(File Transfer Protocol,文件传输协议)方式发送给内存数据库从机,最后内存数据库从机加载该内存数据库镜像,实现全量同步。
S103,若否,则将所述增量同步缓存区中在所述同步偏移地址以后的数据发送给所述内存数据库从机以实现增量同步。
具体地,内存数据库主机在判定当前需要同步到的数据的存储地址与同步偏移地址的差值不大于增量同步缓存区的地址容量时,先向内存数据库从机发送增量同步允许消息以指示内存数据库从机做好增量同步的准备,再在增量同步缓存区中找到同步偏移地址对应的位置,接着将增量同步缓存区中在同步偏移地址以后的数据发送给内存数据库从机,最后内存数据库将接收的数据写入内存,实现增量同步。其中,请参阅图6,图中最大地址表示增量同步缓存区中最新写入的数据的地址,增量同步缓存区中在同步偏移地址以后的数据即为同步偏移地址和最大地址之间的数据。
S104,若是,则将持久化数据保存文件中在所述同步偏移地址以后的数据发送给所述内存数据库从机以实现增量同步。
具体地,内存数据库主机在判定当前需要同步到的数据的存储地址与同步偏移地址的差值大于增量同步缓存区的地址容量时,先向内存数据库从机发送增量同步允许消息以指示内存数据库从机做好增量同步的准备,再在持久化数据保存文件中找到同步偏移地址对应的位置,接着将持久化数据保存文件中在同步偏移地址以后的数据发送给内存数据库从机,最后内存数据库将接收的数据写入内存,实现增量同步。其中,请参阅图7,图中最大地址表示持久化数据保存文件中最新记录的数据的地址,持久化数据保存文件中在同步偏移地址以后的数据即为同步偏移地址和最大地址之间的数据。可见,本发明实施例不同于现有技术的是,针对上述情况,可以通过持久化数据保存文件增量同步的方式代替增量同步缓存区增量同步的方式,进而保证了主从机数据的一致性,同时也避免了进行全量同步,从而提高了同步效率以及改善了内存数据库主机的处理性能。
需要指出的是,正常情况下,同步偏移地址是不会超出持久化数据保存文件的范围的,只有在主从机通讯异常或数据错乱时,同步偏移地址才会超出持久化数据保存文件的范围,进一步地,在此情况下,内存数据库主机会选择执行内存数据库镜像文件全量同步。
由上可知,本发明实施例中的内存数据库主机,在获取内存数据库从机发送的同步请求指令(其中同步请求指令包括同步偏移地址)后,若判定当前需要同步到的数据的存储地址与同步偏移地址的差值大于增量同步缓存区的地址容量,则将持久化数据保存文件中在同步偏移地址以后的数据发送给内存数据库从机以进行增量同步,从而避免在此情况下会进行全量同步,可以实现保证主从机之间数据的一致性、提高数据同步的效率以及改善主机的处理性能。
图4是本发明实施例中另一种内存数据库集群的同步方法的流程示意图。该方法实现于内存数据库主机,可以包括:
S201,在初始化时创建增量同步缓存区以保存临时数据。
具体地,内存数据库主机在初始化时会创建一个增量同步缓存区。其中,内存数据库主机在向内存写入数据的时候,同时会把数据写入增量同步缓存区。需要指出的是,增量同步缓存区是以环形存储的方式写入数据,即写入的数据超过增量同步缓存区的缓存大小时,会循环覆盖之前的数据,从而达到节省存储空间的目的,因而增量同步缓存区主要用于保存临时数据。
S202,在每次向内存写入数据时,将该数据记录到持久化数据保存文件中。
具体地,内存数据库主机在每次向内存写入数据时,会将该数据记录到持久化数据保存持久化数据保存文件中。具体实现过程中,内存数据库主机可以通过勾选配置文件中的appendonly选项实现上述功能。需要指出的是,不同于增量同步缓存区中写入的数据,持久化数据保存文件中记录的数据是文本格式(.txt),而不是二进制数据格式。内存数据库主机在向内存写入数据时,同时会将这些数据一行一行地记录在持久化数据保存文件中,因而持久化数据保存文件中记录的数据基本与内存中写入的数据一致。
S203,获取内存数据库从机发送的同步请求指令,所述同步请求指令包括同步偏移地址和所述内存数据库从机的运行号。
在本发明实施例中,所述同步请求指令为增量同步请求指令;所述同步偏移地址本质上是一个存储地址,用于记录上一次数据同步的结束位置。
具体地,内存数据库主机接收内存数据库从机发送来的增量同步请求指令,该增量同步请求指令中携带有同步偏移地址和内存数据库从机的运行号。
S204,判断所述内存数据库从机的运行号是否等于本机的运行号。
其中,运行号用于指示内存数据库当前正处于的工作流,若各个内存数据库的运行号相同,则说明这些内存数据库处于同一个工作流,反之处于不同的工作流,应理解地,处于不同工作流的内存数据库不能通过增量同步来保持数据的一致性。
具体地,内存数据库主机判断内存数据库从机的运行号是否等于本机的运行号,若否,则执行步骤S205,若是,则执行步骤S206。
S205,生成内存数据库镜像文件,并将其发送给所述内存数据库从机以实现全量同步。
例如:一个新加入内存数据库集群的内存数据库从机,其运行号肯定不同于内存数据库主机的运行号,该内存数据库从机不能通过增量同步与内存数据库主机保持数据的一致性,在向内存数据库主机发送增量同步请求指令后,内存数据库主机执行内存数据库镜像文件全量同步。其中内存数据库镜像是包括内存数据库主机的内存中所有数据的一个数据包,内存数据库从机通过加载内存数据库镜像可以在其内存中写入内存数据库主机的内存中的所有数据,故为全量同步。具体实现过程中,内存数据库主机确定内存数据库从机的运行号不等于其运行号时,先向内存数据库从机发送全量同步消息以指示内存数据库从机做好全量同步的准备,接着生成内存数据库镜像文件,再将生成的内存数据库镜像文件通过FTP(File Transfer Protocol,文件传输协议)方式发送给内存数据库从机,最后内存数据库从机加载该内存数据库镜像,实现全量同步。
S206,判断当前需要同步到的数据的存储地址与所述同步偏移地址的差值是否大于增量同步缓存区的地址容量。
其中,所述当前需要同步到的数据可以是内存数据库主机的内存中最新写入的一个数据,该数据的存储地址与同步偏移地址的差值为一段地址,该段地址对应的数据就是本次需同步到内存数据库从机的数据。
具体地,内存数据库主机判断当前需要同步到的数据的存储地址与同步偏移地址的差值是否大于增量同步缓存区的地址容量,若否,则执行步骤S207,若是,则执行步骤S208。应理解地,若该差值小于增量同步缓存区的地址容量,则说明计划同步到内存数据库从机的数据都可以在增量同步缓存区缓存的临时数据中找到;若该差值大于增量同步缓存区的地址容量,则说明本次需同步到内存数据库从机的数据超出了增量同步缓存区缓存的临时数据,其中一部分数据已经被覆盖保存,无法在增量同步缓存区中找到,因而在现有技术中,为了保证数据同步的一致性,内存数据库主机不会再执行增量同步,转而执行全量同步,从而对同步效率以及内存数据库主机的处理性能造成影响。
S207,将所述增量同步缓存区中在所述同步偏移地址以后的数据发送给所述内存数据库从机以实现增量同步。
具体地,内存数据库主机先向内存数据库从机发送增量同步允许消息以指示内存数据库从机做好增量同步的准备,再在增量同步缓存区中找到同步偏移地址对应的位置,接着将增量同步缓存区中在同步偏移地址以后的数据发送给内存数据库从机,最后内存数据库将接收的数据写入内存,实现增量同步。其中,请参阅图6,图中最大地址表示增量同步缓存区中最新写入的数据的地址,增量同步缓存区中在同步偏移地址以后的数据即为同步偏移地址和最大地址之间的数据。
S208,将持久化数据保存文件中在所述同步偏移地址以后的数据发送给所述内存数据库从机以实现增量同步。
具体地,内存数据库主机先向内存数据库从机发送增量同步允许消息以指示内存数据库从机做好增量同步的准备,再在持久化数据保存文件中找到同步偏移地址对应的位置,接着将持久化数据保存文件中在同步偏移地址以后的数据发送给内存数据库从机,最后内存数据库将接收的数据写入内存,实现增量同步。其中,请参阅图7,图中最大地址表示持久化数据保存文件中最新记录的数据的地址,持久化数据保存文件中在同步偏移地址以后的数据即为同步偏移地址和最大地址之间的数据。可见,本发明实施例不同于现有技术的是,针对上述情况,可以通过持久化数据保存文件增量同步的方式代替增量同步缓存区增量同步的方式,进而保证了主从机数据的一致性,同时也避免了进行全量同步,从而提高了同步效率以及改善了内存数据库主机的处理性能。
需要指出的是,正常情况下,同步偏移地址是不会超出持久化数据保存文件的范围的,只有在主从机通讯异常或数据错乱时,同步偏移地址才会超出持久化数据保存文件的范围,进一步地,在此情况下,内存数据库主机会选择执行内存数据库镜像文件全量同步。
由上可知,本发明实施例中的内存数据库主机,在获取内存数据库从机发送的同步请求指令(其中同步请求指令包括同步偏移地址)后,若判定当前需要同步到的数据的存储地址与同步偏移地址的差值大于增量同步缓存区的地址容量,则将持久化数据保存文件中在同步偏移地址以后的数据发送给内存数据库从机以进行增量同步,从而避免在此情况下会进行全量同步,可以实现保证主从机之间数据的一致性、提高数据同步的效率以及改善主机的处理性能。
图5是本发明实施例中一种内存数据库主机的结构示意图。如图所示本发明实施例中的内存数据库主机至少可以包括指令获取模块310、容量判断模块320、第一发送模块330以及第二发送模块340,其中:
指令获取模块310,用于获取内存数据库从机发送的同步请求指令,所述同步请求指令包括同步偏移地址。
在本发明实施例中,所述同步请求指令为增量同步请求指令;所述同步偏移地址本质上是一个存储地址,用于记录上一次数据同步的结束位置。
具体地,指令获取模块310接收内存数据库从机发送来的增量同步请求指令,该增量同步请求指令中携带有同步偏移地址。
容量判断模块320,用于判断当前需要同步到的数据的存储地址与所述同步偏移地址的差值是否大于增量同步缓存区的地址容量。
其中,所述当前需要同步到的数据可以是内存数据库主机的内存中最新写入的一个数据,该数据的存储地址与同步偏移地址的差值为一段地址,该段地址对应的数据就是本次需同步到内存数据库从机的数据。
具体地,容量判断模块320判断当前需要同步到的数据的存储地址与同步偏移地址的差值是否大于增量同步缓存区的地址容量。应理解地,若该差值小于增量同步缓存区的地址容量,则说明计划同步到内存数据库从机的数据都可以在增量同步缓存区缓存的临时数据中找到;若该差值大于增量同步缓存区的地址容量,则说明本次需同步到内存数据库从机的数据超出了增量同步缓存区缓存的临时数据,其中一部分数据已经被覆盖保存,无法在增量同步缓存区中找到。
进一步地,增量同步请求指令除包括同步偏移地址外还包括内存数据库从机的运行号。其中运行号用于指示内存数据库当前正处于的工作流,若各个内存数据库的运行号相同,则说明这些内存数据库处于同一个工作流,反之处于不同的工作流,应理解地,处于不同工作流的内存数据库不能通过增量同步来保持数据的一致性。因此,容量判断模块320具体用于在确定内存数据库从机的运行号等于其运行号时,判断当前需要同步到的数据的存储地址与所述同步偏移地址的差值是否大于增量同步缓存区的地址容量。
第一发送模块330,用于若否,则将所述增量同步缓存区中在所述同步偏移地址以后的数据发送给所述内存数据库从机以实现增量同步。
具体地,第一发送模块330在判定当前需要同步到的数据的存储地址与同步偏移地址的差值不大于增量同步缓存区的地址容量时,先向内存数据库从机发送增量同步允许消息以指示内存数据库从机做好增量同步的准备,再在增量同步缓存区中找到同步偏移地址对应的位置,接着将增量同步缓存区中在同步偏移地址以后的数据发送给内存数据库从机,最后内存数据库将接收的数据写入内存,实现增量同步。其中,请参阅图6,图中最大地址表示增量同步缓存区中最新写入的数据的地址,增量同步缓存区中在同步偏移地址以后的数据即为同步偏移地址和最大地址之间的数据。
第二发送模块340,用于若是,则将持久化数据保存文件中在所述同步偏移地址以后的数据发送给所述内存数据库从机以实现增量同步。
具体地,第二发送模块340在判定当前需要同步到的数据的存储地址与同步偏移地址的差值大于增量同步缓存区的地址容量时,先向内存数据库从机发送增量同步允许消息以指示内存数据库从机做好增量同步的准备,再在持久化数据保存文件中找到同步偏移地址对应的位置,接着将持久化数据保存文件中在同步偏移地址以后的数据发送给内存数据库从机,最后内存数据库将接收的数据写入内存,实现增量同步。其中,请参阅图7,图中最大地址表示持久化数据保存文件中最新记录的数据的地址,持久化数据保存文件中在同步偏移地址以后的数据即为同步偏移地址和最大地址之间的数据。可见,本发明实施例不同于现有技术的是,针对上述情况,可以通过持久化数据保存文件增量同步的方式代替增量同步缓存区增量同步的方式,进而保证了主从机数据的一致性,同时也避免了进行全量同步,从而提高了同步效率以及改善了内存数据库主机的处理性能。
可选地,请参阅图5,如图所示本发明实施例中的内存数据库主机还可以包括第三发送模块350,用于当所述内存数据库从机的运行号不等于本机的运行号时,生成内存数据库镜像文件,并将其发送给所述内存数据库从机以实现全量同步。
具体地,第三发送模块350在确定内存数据库从机的运行号不等于其运行号时,生成内存数据库镜像文件,并将其发送给内存数据库从机以实现全量同步。例如:一个新加入内存数据库集群的内存数据库从机,其运行号肯定不同于内存数据库主机的运行号,该内存数据库从机不能通过增量同步与内存数据库主机保持数据的一致性,在向内存数据库主机发送增量同步请求指令后,第三发送模块350执行内存数据库镜像文件全量同步。其中内存数据库镜像是包括内存数据库主机的内存中所有数据的一个数据包,内存数据库从机通过加载内存数据库镜像可以在其内存中写入内存数据库主机的内存中的所有数据,故为全量同步。具体实现过程中,第三发送模块350确定内存数据库从机的运行号不等于其运行号时,先向内存数据库从机发送全量同步消息以指示内存数据库从机做好全量同步的准备,接着生成内存数据库镜像文件,再将生成的内存数据库镜像文件通过FTP(File Transfer Protocol,文件传输协议)方式发送给内存数据库从机,最后内存数据库从机加载该内存数据库镜像,实现全量同步。
又可选地,请参阅图5,如图所示本发明实施例中的内存数据库主机还可以包括缓存区创建模块360,用于在初始化时创建增量同步缓存区以保存临时数据。
具体地,缓存区创建模块360在初始化时会创建一个增量同步缓存区。其中,内存数据库主机在向内存写入数据的时候,缓存区创建模块360同时会把数据写入增量同步缓存区。需要指出的是,增量同步缓存区是以环形存储的方式写入数据,即写入的数据超过增量同步缓存区的缓存大小时,会循环覆盖之前的数据,从而达到节省存储空间的目的,因而增量同步缓存区主要用于保存临时数据。
又可选地,请参阅图5,如图所示本发明实施例中的内存数据库主机还可以包括文件记录模块370,用于在每次向内存写入数据时,将该数据记录到持久化数据保存文件中。
具体地,内存数据库主机在每次向内存写入数据时,文件记录模块370会将该数据记录到持久化数据保存持久化数据保存文件中。具体实现过程中,文件记录模块370可以通过勾选配置文件中的appendonly选项实现上述功能。需要指出的是,不同于增量同步缓存区中写入的数据,持久化数据保存文件中记录的数据是文本格式(.txt),而不是二进制数据格式。内存数据库主机在向内存写入数据时,文件记录模块370同时会将这些数据一行一行地记录在持久化数据保存文件中,因而持久化数据保存文件中记录的数据基本与内存中写入的数据一致。
由上可知,本发明实施例中的内存数据库主机,在获取内存数据库从机发送的同步请求指令(其中同步请求指令包括同步偏移地址)后,若判定当前需要同步到的数据的存储地址与同步偏移地址的差值大于增量同步缓存区的地址容量,则将持久化数据保存文件中在同步偏移地址以后的数据发送给内存数据库从机以进行增量同步,从而避免在此情况下会进行全量同步,可以实现保证主从机之间数据的一致性、提高数据同步的效率以及改善主机的处理性能。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。
在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算机可读介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。
Claims (10)
1.一种内存数据库集群的同步方法,其特征在于,所述方法包括:
获取内存数据库从机发送的同步请求指令,所述同步请求指令包括同步偏移地址;
判断当前需要同步到的数据的存储地址与所述同步偏移地址的差值是否大于增量同步缓存区的地址容量;
若否,则将所述增量同步缓存区中在所述同步偏移地址以后的数据发送给所述内存数据库从机以实现增量同步;
若是,则将持久化数据保存文件中在所述同步偏移地址以后的数据发送给所述内存数据库从机以实现增量同步。
2.如权利要求1所述的方法,其特征在于,所述同步请求指令还包括所述内存数据库从机的运行号;
所述判断当前需要同步到的数据的存储地址与所述同步偏移地址的差值是否大于增量同步缓存区的地址容量,包括:
当所述内存数据库从机的运行号等于本机的运行号时,判断当前需要同步到的数据的存储地址与所述同步偏移地址的差值是否大于增量同步缓存区的地址容量。
3.如权利要求2所述的方法,其特征在于,所述判断当前需要同步到的数据的存储地址与所述同步偏移地址的差值是否大于增量同步缓存区的地址容量之前,还包括:
当所述内存数据库从机的运行号不等于本机的运行号时,生成内存数据库镜像文件,并将其发送给所述内存数据库从机以实现全量同步。
4.如权利要求1所述的方法,其特征在于,所述获取内存数据库从机发送的同步请求指令之前,还包括:
在初始化时创建增量同步缓存区以保存临时数据。
5.如权利要求1所述的方法,其特征在于,所述获取内存数据库从机发送的同步请求指令之前,还包括:
在每次向内存写入数据时,将该数据记录到持久化数据保存文件中。
6.一种内存数据库主机,其特征在于,所述内存数据库主机包括:
指令获取模块,用于获取内存数据库从机发送的同步请求指令,所述同步请求指令包括同步偏移地址;
容量判断模块,用于判断当前需要同步到的数据的存储地址与所述同步偏移地址的差值是否大于增量同步缓存区的地址容量;
第一发送模块,用于若否,则将所述增量同步缓存区中在所述同步偏移地址以后的数据发送给所述内存数据库从机以实现增量同步;
第二发送模块,用于若是,则将持久化数据保存文件中在所述同步偏移地址以后的数据发送给所述内存数据库从机以实现增量同步。
7.如权利要求6所述的内存数据库主机,其特征在于,所述同步请求指令还包括所述内存数据库从机的运行号;
所述容量判断模块,具体用于:
当所述内存数据库从机的运行号等于本机的运行号时,判断当前需要同步到的数据的存储地址与所述同步偏移地址的差值是否大于增量同步缓存区的地址容量。
8.如权利要求7所述的内存数据库主机,其特征在于,所述内存数据库主机,还包括:
第三发送模块,用于当所述内存数据库从机的运行号不等于本机的运行号时,生成内存数据库镜像文件,并将其发送给所述内存数据库从机以实现全量同步。
9.如权利要求6所述的内存数据库主机,其特征在于,所述内存数据库主机,还包括:
缓存区创建模块,用于在初始化时创建增量同步缓存区以保存临时数据。
10.如权利要求6所述的内存数据库主机,其特征在于,所述内存数据库主机,还包括:
文件记录模块,用于在每次向内存写入数据时,将该数据记录到持久化数据保存文件中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510299544.7A CN104965862A (zh) | 2015-06-03 | 2015-06-03 | 一种内存数据库集群的同步方法及内存数据库主机 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510299544.7A CN104965862A (zh) | 2015-06-03 | 2015-06-03 | 一种内存数据库集群的同步方法及内存数据库主机 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104965862A true CN104965862A (zh) | 2015-10-07 |
Family
ID=54219898
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510299544.7A Pending CN104965862A (zh) | 2015-06-03 | 2015-06-03 | 一种内存数据库集群的同步方法及内存数据库主机 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104965862A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106844102A (zh) * | 2017-01-16 | 2017-06-13 | 腾讯科技(深圳)有限公司 | 数据恢复方法和装置 |
CN107368563A (zh) * | 2017-06-30 | 2017-11-21 | 北京奇虎科技有限公司 | 数据库数据的删除方法及装置、电子设备、存储介质 |
CN110198331A (zh) * | 2018-03-28 | 2019-09-03 | 腾讯科技(上海)有限公司 | 一种同步数据的方法及系统 |
CN113704180A (zh) * | 2021-07-10 | 2021-11-26 | 国网浙江省电力有限公司信息通信分公司 | 一种基于嵌入式设备固件文件信息特征库的无损化固件提取方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101751394A (zh) * | 2008-12-16 | 2010-06-23 | 青岛海信传媒网络技术有限公司 | 数据同步方法和数据同步系统 |
CN102142008A (zh) * | 2010-12-02 | 2011-08-03 | 华为技术有限公司 | 分布式内存数据库的实现方法、系统、令牌控制器及内存数据库 |
US20140013112A1 (en) * | 2010-02-22 | 2014-01-09 | Asaf CIDON | Encrypting files within a cloud computing environment |
CN104407945A (zh) * | 2014-12-26 | 2015-03-11 | 北京奇虎科技有限公司 | 数据备份的方法、装置及系统 |
-
2015
- 2015-06-03 CN CN201510299544.7A patent/CN104965862A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101751394A (zh) * | 2008-12-16 | 2010-06-23 | 青岛海信传媒网络技术有限公司 | 数据同步方法和数据同步系统 |
US20140013112A1 (en) * | 2010-02-22 | 2014-01-09 | Asaf CIDON | Encrypting files within a cloud computing environment |
CN102142008A (zh) * | 2010-12-02 | 2011-08-03 | 华为技术有限公司 | 分布式内存数据库的实现方法、系统、令牌控制器及内存数据库 |
CN104407945A (zh) * | 2014-12-26 | 2015-03-11 | 北京奇虎科技有限公司 | 数据备份的方法、装置及系统 |
Non-Patent Citations (2)
Title |
---|
WORKMING: "深入剖析Redis主从复制", 《51CTO博客》 * |
皮雄军: "《NoSQL数据库技术实践》", 31 January 2015, 清华大学出版社 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106844102A (zh) * | 2017-01-16 | 2017-06-13 | 腾讯科技(深圳)有限公司 | 数据恢复方法和装置 |
CN106844102B (zh) * | 2017-01-16 | 2022-11-04 | 腾讯科技(深圳)有限公司 | 数据恢复方法和装置 |
CN107368563A (zh) * | 2017-06-30 | 2017-11-21 | 北京奇虎科技有限公司 | 数据库数据的删除方法及装置、电子设备、存储介质 |
CN107368563B (zh) * | 2017-06-30 | 2021-02-23 | 北京奇虎科技有限公司 | 数据库数据的删除方法及装置、电子设备、存储介质 |
CN110198331A (zh) * | 2018-03-28 | 2019-09-03 | 腾讯科技(上海)有限公司 | 一种同步数据的方法及系统 |
CN110198331B (zh) * | 2018-03-28 | 2022-11-25 | 腾讯科技(上海)有限公司 | 一种同步数据的方法及系统 |
CN113704180A (zh) * | 2021-07-10 | 2021-11-26 | 国网浙江省电力有限公司信息通信分公司 | 一种基于嵌入式设备固件文件信息特征库的无损化固件提取方法 |
CN113704180B (zh) * | 2021-07-10 | 2024-03-15 | 国网浙江省电力有限公司信息通信分公司 | 一种基于嵌入式设备固件文件信息特征库的无损化固件提取方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108733761B (zh) | 一种数据处理方法装置及系统 | |
US8612488B1 (en) | Efficient method for relocating shared memory | |
US20150113218A1 (en) | Distributed Data Processing Method and Apparatus | |
CN109582213B (zh) | 数据重构方法及装置、数据存储系统 | |
EP3051408B1 (en) | Data operating method and device | |
CN104965862A (zh) | 一种内存数据库集群的同步方法及内存数据库主机 | |
CN105242879B (zh) | 一种数据存储方法以及协议服务器 | |
US10804930B2 (en) | Compressed data layout with variable group size | |
US20140317346A1 (en) | Redundant array of independent disks systems that utilize spans with different storage device counts for a logical volume | |
CN103067258B (zh) | 一种消息超时检测处理方法 | |
CN105677789A (zh) | 一种分布式文件系统的目录容量管理方法及系统 | |
EP3958122A1 (en) | Memory management method, apparatus, and system | |
KR20170010810A (ko) | 플래시 메모리 내에 데이터를 판독/기록하기 위한 방법, 장치 및 사용자 장비 | |
CN101727503A (zh) | 一种创建磁盘文件系统的方法 | |
CN110147203A (zh) | 一种文件管理方法、装置、电子设备及存储介质 | |
CN110798541A (zh) | 接口共享、报文转发方法、装置、电子设备及存储介质 | |
US10228885B2 (en) | Deallocating portions of data storage based on notifications of invalid data | |
US9606909B1 (en) | Deallocating portions of provisioned data storage based on defined bit patterns indicative of invalid data | |
US11119703B2 (en) | Utilizing a set of virtual storage units distributed across physical storage units | |
CN106528876B (zh) | 分布式系统的信息处理方法及分布式信息处理系统 | |
CN104063377A (zh) | 信息处理方法和使用其的电子设备 | |
CN107148612A (zh) | 一种扩展用户分区的方法和装置 | |
US11048417B2 (en) | Method, device and computer program product for storage management | |
US10311026B2 (en) | Compressed data layout for optimizing data transactions | |
CN105426125B (zh) | 一种数据存储方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20151007 |