一种内存数据库的主备复制方法及内存数据库系统的制作方法

文档序号:10612899阅读:296来源:国知局
一种内存数据库的主备复制方法及内存数据库系统的制作方法
【专利摘要】本发明公开了一种内存数据库的主备复制方法及内存数据库系统,采用异步和半同步相结合的方式,与传统的半同步复制方式相比,本发明中的半同步并不等待备库主机对主库发送的REDO日志的接收确认,即可进行后续处理,可以使处理效率不受复制影响,另外,异步复制和半同步复制相互配合,共同保证主库和备库数据的一致性,在主库发生异常的情况下,备库可接管主库的功能,在保证数据安全的前提下,充分发挥内存数据库的高效处理优势。
【专利说明】
一种内存数据库的主备复制方法及内存数据库系统
技术领域
[0001]本发明涉及内存数据库领域,具体涉及一种内存数据库的主备复制方法及内存数据库系统。
【背景技术】
[0002]内存数据库由于把数据都放在内存中进行操作,有着比磁盘数据库高得多的性能表现,对于需要高速反应的数据库应用系统,如电信、金融等提供了有力支撑。但是由于内存的非持久性,一旦内存数据库进程或者所在主机发生异常停止,将直接导致应用程序无法继续进行访问。如何确保一个内存数据库节点(主库)损坏,另一个节点(备库)能够正常接管,成为内存数据库安全的关键技术。
[0003]目前,内存数据库之间的数据保持一致的方式一般通过复制技术解决,复制方式有同步、异步、半同步等。
[0004]同步方式要求事务操作必须在主库和备库上都完成提交操作才算成功,这种方式可以确保主库和备库的数据完全一致,缺点是处理效率成倍下降,无法充分发挥出内存数据库的高效率。
[0005]异步方式是指事务仅在主库上完成提交即可,然后通过其他进程将REDO日志复制到备库,并在备库上完成提交。这就意味着在同一个时间点主备库上的数据可能不一致,异步复制的优点在于它比同步复制的处理效率要高。
[0006]半同步复制模式下,事务在主库上完成提交的同时,将REDO日志发送到备库主机,待备库主机确认收到(仅是收到,并没有在备库完成提交)后,才算完成提交动作。这在一定程度上保证了数据安全性,但是由于需要等待备库的确认,同样会造成处理效率的下降。

【发明内容】

[0007]本发明所要解决的技术问题是提供一种内存数据库的主备复制方法及内存数据库系统,能够解决现有技术的不足。
[0008]本发明解决上述技术问题的技术方案如下:
[0009]—方面,本发明提供了一种内存数据库的主备复制方法,所述内存数据库包括主库和备库,包括:
[0010]S1、内存数据库中的主库服务进程在执行提交动作时,将REDO日志实时发送给备库复制进程,以及将REDO日志写入本地REDO日志文件;
[0011]S2、备库复制进程接收到主库服务进程发送的REDO日志后,立即写入本地的半同步REDO日志文件;
[0012]S3、主库复制进程实时扫描本地REDO日志文件的变化增量,并将REDO日志文件的变化增量发送给备库复制进程;
[0013]S4、备库复制进程将接收到的REDO日志文件的变化增量写入本地异步REDO日志文件;
[0014]S5、当主库发生异常时,备库复制进程立即读取本地异步REDO日志文件中的最后一条数据记录,并从本地半同步REDO日志文件中查找到该条数据记录,且将本地半同步REDO日志文件中该条数据记录以后的所有数据补充到本地异步REDO日志文件中;
[0015]S6、备库复制进程读取本地异步REDO日志文件中的所有数据,在备库服务进程完成提交动作。
[0016]另一方面,本发明提供了一种内存数据库系统,包括主库和备库,所述主库中具有主库复制进程和主库服务进程,所述备库中具有备库复制进程和备库服务进程;
[0017]所述主库服务进程,用于在执行提交动作时,将REDO日志实时发送给备库复制进程,以及将REDO日志写入本地REDO日志文件;
[0018]所述主库复制进程,用于实时扫描本地REDO日志文件的变化增量,并将REDO日志文件的变化增量发送给备库复制进程;
[0019]所述备库复制进程,用于接收到主库服务进程发送的REDO日志后,立即写入本地的半同步REDO日志文件;还用于将主库复制进程发送的REDO日志文件的变化增量写入本地异步REDO日志文件;还用于当主库发生异常时,立即读取本地异步REDO日志文件中的最后一条数据记录,并从本地半同步REDO日志文件中查找到该条数据记录,且将本地半同步REDO日志文件中该条数据记录以后的所有数据补充到本地异步REDO日志文件中;以及还用于读取本地异步REDO日志文件中的所有数据;
[0020]所述备库服务进程,用于根据备库复制进程从本地异步REDO日志文件中读取的所有数据,完成提交动作。
[0021]本发明提供的一种内存数据库的主备复制方法及系统,采用异步和半同步相结合的方式,与传统的半同步复制方式相比,本发明中的半同步并不等待备库主机对主库发送的REDO日志的接收确认,即可进行后续处理工作,可以使处理效率不受复制影响,另外,异步复制和半同步复制相互配合,共同保证主库和备库数据的一致性,在主库发生异常的情况下,备库可接管主库的功能,在保证数据安全的前提下,充分发挥内存数据库的高效处理优势。
【附图说明】
[0022]图1为本发明实施例1的一种内存数据库的主备复制方法流程图;
[0023]图2为本发明实施例2的一种内存数据库系统示意图。
【具体实施方式】
[0024]以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
[0025]实施例1、一种内存数据库的主备复制方法。下面结合图1对本实施例提供的方法进行说明。
[0026]参加图1,本实施例提供的方法包括:S1、内存数据库中的主库服务进程在执行提交动作时,将REDO日志实时发送给备库复制进程,以及将REDO日志写入本地REDO日志文件;
[0027]S2、备库复制进程接收到主库服务进程发送的REDO日志后,立即写入本地的半同步REDO日志文件;
[0028]S3、主库复制进程实时扫描本地REDO日志文件的变化增量,并将REDO日志文件的变化增量发送给备库复制进程;
[0029]S4、备库复制进程将接收到的REDO日志文件的变化增量写入本地异步REDO日志文件;
[0030]S5、当主库发生异常时,备库复制进程立即读取本地异步REDO日志文件中的最后一条数据记录,并从本地半同步REDO日志文件中查找到该条数据记录,且将本地半同步REDO日志文件中该条数据记录以后的所有数据补充到本地异步REDO日志文件中;
[0031 ] S6、备库复制进程读取本地异步REDO日志文件中的所有数据,在备库服务进程完成提交动作。
[0032]其中,步骤SI中的主库服务进程通过socket通讯方式将REDO日志实时发送给备库复制进程。本实施例中主库服务进程仅是将REDO日志(变化数据)发送给备库复制进程,并不等待备库复制进程的确认,这个本实施例与传统半同步复制的区别,提高了处理效率。
[0033]步骤S5通过如下方式确定主库发生异常:备库复制进程发现与主库服务进程的通信中断,将主库的故障状态设置为I;当备库复制进程发现与主库复制进程的通信中断且发现主库的故障状态为I时,确定主库发生异常。
[0034]需要说明的是,当主库正常工作时,备库完全依赖异步复制,即可保证数据与主库保持一致,只是在时间上会有所延迟。此时,备库中的半同步redi日志文件完全不需要用,仅使用异步REDO日志,即使半同步REDO日志偶尔出现差错,也不会影响主备库数据的一致性。但是,一旦主库出现异常,由于异步复制的延时性,主库中的REDO日志,必然有一部分数据还没来不及发送到备库,而备库的半同步REDO日志,由于是主库实时发送过来的,可以保证最近一段时间的数据都是完整的。在本步骤中,备库的复制进程发现主库异常后,会立即去读取异步REDO日志文件的最后一条记录,然后到半同步REDO日志文件中查找这条记录,并将半同步REDO日志文件中,此条记录之后的所有数据(即主库在异常时,异步复制还未及时发送到备库的数据)补充到异步REDO日志文件中。
[0035]步骤S6中备库复制进程通过线程实时扫描读取本地异步异步REDO日志文件中包括从半同步REDO日志补充的所有数据,在备库服务进程完成提交动作。
[0036]当在备库服务进程完成提交动作之后,将备库的使用状态由主库正常时的不可用状态设置为可用状态,其中,当主库正常时,将备库的使用状态设置为不可用状态,只有当主库异常,备库接管了主库的功能时,才会将备库的使用状态设置为可用状态,此时应用程序即可成功连接到备库,实现备库对主库的接管,同时也能保证在备库接管主库时,备库的数据与主库的数据时一致的。
[0037]为了加深对本实施例提供的内存数据库的主备复制方法的理解,下面以一个具体的例子来说明,主要包括以下步骤:
[0038]步骤1:主库复制进程在启动时创建一个监听线程,监听备库复制进程的连接(用于异步复制)。
[0039]步骤2:主库服务进程在启动时也创建一个监听线程,监听备库复制进程的连接(用于半同步复制)。
[0040]步骤3:备库复制进程在启动时创建3个线程,线程I用于连接主库复制进程,线程2用于连接主库服务进程,线程3用于扫描本地异步REDO日志文件。[0041 ] 步骤4:主库服务进程在提交数据的同时,将REDO日志写入本地REDO日志文件,同时发送给备库复制进程的线程2,不等待备库复制进程的接收确认,即完成提交动作。
[0042]步骤5:主库复制进程实时扫描本地的REDO日志文件,并将变化的数据批量发给备库复制进程的线程I。
[0043]步骤6:备库复制进程的线程2接收REDO日志写入半同步REDO日志文件,线程I接收REDO日志写入异步REDO日志文件。线程3实时扫描异步REDO日志文件,在备库中完成提交动作。
[0044]步骤7:—旦主库主机异常,备库复制进程的线程2发现与主库服务进程的通信中断,将故障状态置为I;线程I发现与主库复制进程的通信中断,同时发现故障状态为I,便立即将半同步REDO日志文件中、异步REDO日志文件缺少的数据查找出来,并补充到异步REDO日志文件中,补充完之后,在文件的最后一行添加一个字符“9”;线程3在实时扫描本地异步REDO日志文件的同时,如果发现这个特殊的行(字符9),会得知主库出现了异常,在做完所有提交动作之后,将备库的状态置为可用。此时应用程序便可从主库切换到备库,并且保证在切换时,备库的数据是和主库完全一致的。
[0045]实施例2、一种内存数据库系统。下面结合图2对本实施例提供的系统进行描述。
[0046]参见图2,本实施例提供的内存数据系统包括主库和备库,其中,主库中具有主库复制进程和主库服务进程,备库中具有备库复制进程和备库服务进程。
[0047]所述主库服务进程,用于在执行提交动作时,将REDO日志实时发送给备库复制进程,以及将REDO日志写入本地REDO日志文件;
[0048]所述主库复制进程,用于实时扫描本地REDO日志文件的变化增量,并将REDO日志文件的变化增量发送给备库复制进程;
[0049]所述备库复制进程,用于接收到主库服务进程发送的REDO日志后,立即写入本地的半同步REDO日志文件;还用于将主库复制进程发送的REDO日志文件的变化增量写入本地异步REDO日志文件;还用于当主库发生异常时,立即读取本地异步REDO日志文件中的最后一条数据记录,并从本地半同步REDO日志文件中查找到该条数据记录,且将本地半同步REDO日志文件中该条数据记录以后的所有数据补充到本地异步REDO日志文件中;以及还用于读取本地异步REDO日志文件中的所有数据;
[0050]所述备库服务进程,用于根据备库复制进程从本地异步REDO日志文件中读取的所有数据,完成提交动作。
[0051 ]其中,所述主库服务进程具体通过socket通讯方式将REDO日志实时发送给备库复制进程。
[0052]备库复制进程可通过如下方式确定主库发生异常:备库复制进程发现与主库服务进程的通信中断,将主库的故障状态设置为I,;当备库复制进程发现与主库复制进程的通信中断且发现主库的故障状态为I时,确定主库发生异常。
[0053]所述备库复制进程,用于读取本地异步REDO日志文件中的所有数据具体包括:备库复制进程通过线程实时扫描读取本地异步异步REDO日志文件中的所有数据。
[0054]备库服务进程还用于:当在备库服务进程完成提交动作之后,将备库的使用状态由主库正常时的不可用状态设置为可用状态,实现备库对主库的接管。
[0055]本发明提供的一种内存数据库的主备复制方法及内存数据库系统,采用异步和半同步相结合的方式,与传统的半同步复制方式相比,本发明中的半同步并不等待备库主机对主库发送的REDO日志的接收确认,可以使处理效率不受复制影响,另外,异步复制和半同步复制相互配合,共同保证主库和备库数据的一致性,在主库发生异常的情况下,备库可接管主库的功能,在保证数据安全的前提下,充分发挥内存数据库的高效处理优势。
[0056]在本说明书的描述中,参考术语“实施例一”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体方法、装置或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、方法、装置或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
[0057]以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【主权项】
1.一种内存数据库的主备复制方法,所述内存数据库包括主库和备库,其特征在于,包括: 51、内存数据库中的主库服务进程在执行提交动作时,将REDO日志实时发送给备库复制进程,以及将REDO日志写入本地REDO日志文件; 52、备库复制进程接收到主库服务进程发送的REDO日志后,立即写入本地的半同步REDO日志文件; 53、主库复制进程实时扫描本地REDO日志文件的变化增量,并将REDO日志文件的变化增量发送给备库复制进程; 54、备库复制进程将接收到的REDO日志文件的变化增量写入本地异步REDO日志文件; 55、当主库发生异常时,备库复制进程立即读取本地异步REDO日志文件中的最后一条数据记录,并从本地半同步REDO日志文件中查找到该条数据记录,且将本地半同步REDO日志文件中该条数据记录以后的所有数据补充到本地异步REDO日志文件中; 56、备库复制进程读取本地异步REDO日志文件中的所有数据,在备库服务进程完成提交动作。2.如权利要求1所述的内存数据库的主备复制方法,其特征在于,步骤SI的主库服务进程通过socket通讯方式将REDO日志实时发送给备库复制进程。3.如权利要求1所述的内存数据库的主备复制方法,其特征在于,步骤S5通过如下方式确定主库发生异常: 备库复制进程发现与主库服务进程的通信中断,将主库的故障状态设置为I; 当备库复制进程发现与主库复制进程的通信中断且发现主库的故障状态为I时,确定主库发生异常。4.如权利要求3所述的内存数据库的主备复制方法,其特征在于,步骤S6中备库复制进程通过线程实时扫描读取本地异步异步REDO日志文件中的所有数据,在备库服务进程完成提交动作。5.如权利要求4所述的内存数据库的主备复制方法,其特征在于,当在备库服务进程完成提交动作之后,将备库的使用状态由主库正常时的不可用状态设置为可用状态,实现备库对主库的接管。6.—种内存数据库系统,其特征在于,包括主库和备库,所述主库中具有主库复制进程和主库服务进程,所述备库中具有备库复制进程和备库服务进程; 所述主库服务进程,用于在执行提交动作时,将REDO日志实时发送给备库复制进程,以及将REDO日志写入本地REDO日志文件; 所述主库复制进程,用于实时扫描本地REDO日志文件的变化增量,并将REDO日志文件的变化增量发送给备库复制进程; 所述备库复制进程,用于接收到主库服务进程发送的REDO日志后,立即写入本地的半同步REDO日志文件;还用于将主库复制进程发送的REDO日志文件的变化增量写入本地异步REDO日志文件;还用于当主库发生异常时,立即读取本地异步REDO日志文件中的最后一条数据记录,并从本地半同步REDO日志文件中查找到该条数据记录,且将本地半同步REDO日志文件中该条数据记录以后的所有数据补充到本地异步REDO日志文件中;以及还用于读取本地异步REDO日志文件中的所有数据; 所述备库服务进程,用于根据备库复制进程从本地异步REDO日志文件中读取的所有数据,完成提交动作。7.如权利要求6所述的内存数据库系统,其特征在于,所述主库服务进程具体通过socket通讯方式将REDO日志实时发送给备库复制进程。8.如权利要求6所述的内存数据库系统,其特征在于,备库复制进程可通过如下方式确定主库发生异常: 备库复制进程发现与主库服务进程的通信中断,将主库的故障状态设置为I,; 当备库复制进程发现与主库复制进程的通信中断且发现主库的故障状态为I时,确定主库发生异常。9.如权利要求8所述的内存数据库系统,其特征在于,所述备库复制进程,用于读取本地异步REDO日志文件中的所有数据具体包括: 备库复制进程通过线程实时扫描读取本地异步异步REDO日志文件中的所有数据。10.如权利要求9所述的内存数据库系统,其特征在于,备库服务进程还用于: 当在备库服务进程完成提交动作之后,将备库的使用状态由主库正常时的不可用状态设置为可用状态,实现备库对主库的接管。
【文档编号】G06F17/30GK105975579SQ201610290625
【公开日】2016年9月28日
【申请日】2016年5月5日
【发明人】王金山
【申请人】北京思特奇信息技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1