主备数据库的同步方法及装置与流程

文档序号:11707648阅读:322来源:国知局
主备数据库的同步方法及装置与流程

本发明涉及数据处理领域,更具体地涉及一种主备数据库的同步方法及装置。



背景技术:

mysql是互联网行业广泛使用的开源数据库软件,不过由于甲骨文存在将mysql闭源的风险,许多基于mysql的应用都面临需要使用替代性的开源数据库软件,而mariadb是对mysql兼容性最好的替代方案。但针对大型网站,使用mariadb数据库存在一台mariadb数据库无法支持庞大访问量的问题。

对此有效的解决方案是建立mariadb数据库集群,其中备数据库是主数据库的完整镜像,写请求首先在主数据库上执行,而读请求会分布到所有数据库上,主数据库在接收写数据完成后通过同步工具将写请求按照单线程顺序执行的方式同步到备数据库上,从而提供更加强大的数据库读写服务。

目前官方提供的主备同步的版本中,主备同步采用的是单线程同步,当主数据库负载较高时,会导致同步延时增大,备数据库不能及时读取最新数据,降低了数据库集群的可用性。



技术实现要素:

有鉴于此,本发明的主要目的在于提供一种主备数据库同步方法及装置,以便解决现有主备数据库在备数据库较多的情况下,同步效率低下的问题。

为了实现上述目的,作为本发明的一个方面,本发明提供了一种主备数据库同步装置,包括:

同步事务获取单元,用于通过对主数据库中的数据库事务进行读取,获得需要同步的数据库事务信息,将其添加到数据库事务写队列中,并将数据库事务主键数量作为主键处理进度值;以及

同步事务执行单元,用于采用并行写入方式将所述数据库事务写队列中的所述数据库事务写入到备数据库中,并删除位于所述数据库事务写队列顶端的所述数据库事务。

其中,所述同步事务执行单元包括同步事务处理组件、同步事务写入组件和同步事务完成组件,其中所述同步事务处理组件轮询各个待处理的数据库事务主键处理进度值,当主键事务处理进度值为0时进入所述同步事务执行组件;所述同步事务执行组件将主键处理进度值为0的数据库事务派发到写线程执行,采用并行写入方式将写队列的事务写入备数据库中;所述同步事务完成组件在写入备数据库的数据库事务完成后,删除已经完成的数据库事务,删除位于主键写队列顶端的该数据库事务,主键写队列的第二条数据库事务自动成为主键写队列的待处理事务,并通知所述数据库事务主键处理进度值减一。

作为本发明的另一个方面,本发明还提供了一种主备数据库同步方法,包括以下步骤:

通过对主数据库中的数据库事务进行读取,获得需要同步的数据库事务信息,取得数据库事务的主键,记录同步数据库事务的主键,并将数据库事务主键数量作为主键处理进度值;

按照数据库事务主键信息,将获取到的数据库事务按照主数据库中的顺序增加到数据库事务主键对应主键写队列中;其中,对于没有写队列的主键需要创建新的主键写队列,并将该事务置为写队列顶端,通知该主键处理进度值减一;

轮询各个待处理的数据库事务主键处理进度值,当主键事务处理进度值为0时进入同步事务执行组件;

将主键处理进度值为0的数据库事务派发写线程执行,采用并行写入方式将写队列的事务写入备数据库中;

写入备数据库的数据库事务完成后,删除已经完成的数据库事务,删除位于主键写队列顶端的该数据库事务,主键写队列的第二条数据库事务自动成为主键写队列的待处理事务;通知该数据库事务主键处理进度值减一。

基于上述技术方案可知,本发明的同步装置和方法相对于现有技术,能够将mariadb的集群性能大大提升,有效扩展了mariadb的试用范围,能够支持更高的数据库访问量;此外,以事务作为同步的最小单位,事务本身具有原子性,同时多线程并行写入的方式减少了同步的执行时间,大大提升了mariadb的执行效率。

附图说明

图1是本发明的基于mariadb主备数据库的同步装置的结构框图;

图2是作为本发明一个优选实施例的基于mariadb主备数据库的同步方法的流程框图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明作进一步的详细说明。

mysql是一个关系型数据库管理系统,由瑞典mysqlab公司开发,目前属于oracle旗下公司。mysql是最流行的关系型数据库管理系统,在web应用方面mysql是最好的rdbms(relationaldatabasemanagementsystem,关系数据库管理系统)应用软件之一。在mysql中,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。并且,mysql所使用的sql语言是用于访问数据库的最常用标准化语言。mysql软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择mysql作为网站数据库,对于一般的个人使用者和中小型企业来说,mysql提供的功能已经绰绰有余,但对于大型网站,面对的问题更加复杂,仍然需要更强有力的工具。

mariadb(玛莉亚数据库)是一个采用maria存储引擎的mysql分支版本,是由原来mysql的作者michaelwidenius创办的公司所开发的免费开源的数据库服务器。mysql创始人michaelwidenius不满sun开发团队脚步过慢,愤而离职成立开源数据库联盟,另外从现有mysql程序代码中,开发出另一个延伸分支版本,也就是名为玛莉亚数据库的企业级开源数据库。玛莉亚数据库是mysql的一个分支版本(branch),而不是衍生版本(folk),提供的功能可和mysql完全兼容。

mariadb基于事务的maria存储引擎,替换了mysql的myisam存储引擎,它使用了percona的xtradb,innodb的变体,分支的开发者希望提供访问即将到来的mysql5.4innodb性能。这个版本还包括了primebasext(pbxt)和federatedx存储引擎。由于mariadb的强大功能,一些大型企业也从mysql转向mariadb,其中代表厂家包括:谷歌(2013年9月)、redhat(2013年6月)和维基百科(2013年4月)。

mariadb虽然被视为mysql数据库的替代品,但它在扩展功能、存储引擎以及一些新的功能改进方面都强过mysql。而且从mysql迁移到mariadb也是非常简单的:

1、数据和表定义文件(.frm)是二进制兼容的;

2、所有客户端api、协议和结构都是完全一致的;

3、所有文件名、二进制、路径、端口等都是一致的;

4、所有的mysql连接器,比如php、perl、python、java、.net、myodbc、ruby以及mysqlcconnector等在mariadb中都保持不变;

5、mysql-client包在mariadb服务器中也能够正常运行;

6、共享的客户端库与mysql也是二进制兼容的。

数据库事务(databasetransaction),是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。

本发明就是在基于mariadb数据库的管理系统上开发出来的,在采取mariadb数据库的管理系统中,经常出现需要对数据库内容进行备份的情况,而为了增加冗余,通常采用主备数据库两套重复的系统,而这样的系统在进行同步时,由于需要面对复杂的事务处理,且采用的是单线程同步,所以同步效率比较低下,严重影响了整个mariadb数据库管理系统的工作效率,当主数据库负载较高时,会导致同步延时增大,备数据库不能及时读取最新数据,降低了数据库集群的可用性。为了解决上述现有主备数据库同步效率低下的问题,本发明公开了一种基于mariadb数据库的主备数据库同步装置,如图1所示,该主备数据库同步装置由两个部分组成,分别是同步事务获取单元和同步事务执行单元。

同步事务执行单元又由三个组件组成,分别是同步事务处理组件、同步事务写入组件、同步事务完成组件。

由于同步工作是持续进行的,因此在实际过程中,同步事务获取单元不断将新的需要同步的事务交给同步事务执行单元进行处理。同时,同步事务执行单元也会由于同步事务的不断增加而在重复按照同步事务处理组件、同步事务写入组件、同步事务完成组件进行事务处理。

下面具体对本发明的主备数据库同步装置的各个组成部分进行详细说明和阐述。

同步事务获取单元

通过对主数据库中的数据库事务进行读取,获得需要同步的数据库事务信息。

针对获取到的数据库事务,需要取得数据库事务的主键,记录同步数据库事务的主键,并将数据库事务主键数量作为主键处理进度值。

获取到的数据库事务,按照数据库事务主键信息,按照主数据库中的顺序增加到数据库事务主键对应主键写队列中,主键写队列按照先进先出的顺序方式执行。对于没有写队列的主键需要创建新的主键写队列,并将该事务置为写队列顶端,通知该主键处理进度值减一。

同步事务执行单元

同步事务执行单元由三个组件组成,分别是同步事务处理组件、同步事务写入组件和同步事务完成组件。

同步事务处理组件

轮询各个待处理的数据库事务主键处理进度值,当主键事务处理进度值为0时进入同步事务执行组件。

其中,在主键写队列里面存在若干个待处理的数据库事务主键等待执行,且这些事务主键是有序的,只有该事务主键之前的事务主键执行完成后才能轮到新的事务主键执行,当轮到该事务主键处理的时候,该事务主键处理进度值为0,执行完成后将该事务主键的处理进度值设为-1,然后去轮询所有事务主键,寻找事务主键进度值为0的待处理的事务主键。

同步事务执行组件

将主键处理进度值为0的数据库事务派发写线程执行,采用并行写入方式将写队列的事务写入备数据库中。

同步事务完成组件

写入备数据库的数据库事务完成后,删除已经完成的数据库事务,删除位于主键写队列顶端的该数据库事务,主键写队列的第二条数据库事务自动成为主键写队列的待处理事务。通知该数据库所有事务主键处理进度值减一。

作为本发明的另一个方面,本发明还公开了一个主备数据库同步方法,包括以下步骤:

通过对主数据库中的数据库事务进行读取,获得需要同步的数据库事务信息,取得数据库事务的主键,记录同步数据库事务的主键,并将数据库事务主键数量作为主键处理进度值;

按照数据库事务主键信息,将获取到的数据库事务按照主数据库中的顺序增加到数据库事务主键对应主键写队列中,主键写队列按照先进先出的顺序方式执行;其中,对于没有写队列的主键需要创建新的主键写队列,并将该事务置为写队列顶端,通知该主键处理进度值减一;

轮询各个待处理的数据库事务主键处理进度值,当主键事务处理进度值为0时进入同步事务执行组件;

将主键处理进度值为0的数据库事务派发写线程执行,采用并行写入方式将写队列的事务写入备数据库中;

写入备数据库的数据库事务完成后,删除已经完成的数据库事务,删除位于主键写队列顶端的该数据库事务,主键写队列的第二条数据库事务自动成为主键写队列的待处理事务;通知该数据库事务主键处理进度值减一。

作为本发明的一个优选实施例,如图2所示,本发明的主备数据库同步方法,包括以下步骤:

读取主数据库中需要同步的数据库事务信息,取得数据库事务的主键,记录同步数据库事务的主键,并将数据库事务主键数量作为主键处理进度值;

判断一数据库事务是否已经写入主键写队列中,如果已经写入,则按照数据库事务主键信息,将获取到的数据库事务按照主数据库中的顺序增加到数据库事务主键对应主键写队列中,主键写队列按照先进先出的顺序方式执行;否则,创建新的主键写队列,并将该事务置为写队列顶端,通知该主键处理进度值减一;

轮询各个待处理的数据库事务主键处理进度值是否为0,如果主键事务处理进度值为0,则进入同步事务执行组件;否则,将所有数据库事务主键处理进度值减一。

将主键处理进度值为0的数据库事务派发到写线程执行,并采用并行写入方式将写队列的事务写入备数据库中;

写入备数据库的数据库事务完成后,删除已经完成的数据库事务,删除位于主键写队列顶端的该数据库事务,主键写队列的第二条数据库事务自动成为主键写队列的待处理事务;通知该数据库事务主键处理进度值减一。

重复上述轮询步骤,直到主键写队列中所有数据库事务均写入备数据库中,同步执行完毕。

本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(dsp)来实现根据本发明实施例的相关设备中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。

应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。

以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1