首页> 中国专利> 数据库更新同步的方法、系统及数据库集群

数据库更新同步的方法、系统及数据库集群

摘要

本发明涉及数据库更新同步的方法、系统及数据库集群。所述方法包括:接收到对第一数据库的更新命令,根据预设的数据库会话属性识别所述更新命令是否为被复制的更新命令;若否,则将所述更新命令转换为包含相同数据操作信息的新的更新命令;判断与所述第一数据库链接的第二数据库是否满足预设的实时更新条件;若满足,则将所述新的更新命令发送至所述第二数据库执行;若不满足,则为所述第二数据库保存所述新的更新命令,并根据保存的更新命令对所述第二数据库进行延迟同步更新。本发明能够避免集群中数据库更新同步时的死循环,并提高集群整体的数据更新同步速度。

著录项

  • 公开/公告号CN106202365A

    专利类型发明专利

  • 公开/公告日2016-12-07

    原文格式PDF

  • 申请/专利权人 帅斌鹏;

    申请/专利号CN201610532572.3

  • 发明设计人 帅斌鹏;

    申请日2016-07-07

  • 分类号G06F17/30(20060101);

  • 代理机构44224 广州华进联合专利商标代理有限公司;

  • 代理人冯右明

  • 地址 美国俄亥俄州都柏林市沙环巷5899号

  • 入库时间 2023-06-19 01:07:21

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-01-31

    授权

    授权

  • 2017-01-04

    实质审查的生效 IPC(主分类):G06F17/30 申请日:20160707

    实质审查的生效

  • 2016-12-07

    公开

    公开

说明书

技术领域

本发明涉及数据库技术领域,特别是涉及数据库更新同步的方法、系统及数据库集群。

背景技术

关系型数据库技术是信息系统中的一种核心技术。它被广泛地应用作各种信息应用的后台,并为各种应用提供数据服务。目前最主要的关系型数据库包括商用数据库Oracle、DB2、SQL Server和开放源码的关系型数据库MySQL、PostGreSQL等。

为了保证数据的安全,需要对数据库实行一个或多个备份,热备份是常用的一种数据库备份方式。热备份在数据库运行状态下的备份方法,热备份数据可用于快速地进行灾难恢复。然而,由于传统的热备份是非实时的,其提供的数据的准确性难以保证,并且热备份的数据库存在引入数据冲突而丧失同时提供数据更新的能力。

为了提高数据库中数据更新的能力,业界已有的解决办法是:构建数据库实时应用集群,例如Oracle实时应用集群(Oracle RAC)。然而现有的实时应用集群中的若干数据库共享相同的存储设备,因此在存储设备受损时,将导致集群中的所有数据库都无法正常运行,容灾性能较差。并且,在通常的情况下,当一个更新命令在源数据库中执行时,它将激活源数据库相关的更新触发器。而当该触发器在集群中的目标数据库中执行同步更新时,目标数据库的触发器也会被激活,使得在源数据库中再次执行同步更新命令,由此引起了一个死循环。

对于上述现有问题,有人提出了一种使用主动信号的方法来避免该死循环的方法,但这个方法要求访问目标数据库两次。这种信息交互的过程将影响目标数据库的数据更新速度。此外,集群中的数据库有需要维护的时候,也会遇到死机的情况,在这些情况下,该数据库在恢复运行时,其中的数据将与集群中的其他数据库不同歩,为了让该数据库和集群中的其他数据库同歩,需要短暂暂停集群中其它正常运行的数据库的数据更新功能,从而导致集群整体无法提供真正的无间断的数据更新能力。

发明内容

基于此,本发明实施例提供数据库更新同步的方法、系统及数据库集群,能够避免集群中数据库更新同步时的死循环,并提高集群整体的数据更新同步速度。

本发明一方面提供数据库更新同步的方法,包括:接收到对第一数据库的更新命令,根据预设的数据库会话属性识别所述更新命令是否为被复制的更新命令;

若否,则将所述更新命令转换为包含相同数据操作信息的新的更新命令;

判断与所述第一数据库链接的第二数据库是否满足预设的实时更新条件;若满足,则将所述新的更新命令发送至所述第二数据库执行;若不满足,则为所述第二数据库保存所述新的更新命令,并根据保存的更新命令对所述第二数据库进行延迟同步更新。

本发明第二方面提供一种数据库更新同步的系统,包括:

命令识别模块,用于接收到对第一数据库的更新命令,根据预设的数据库会话属性识别所述更新命令是否为被复制的更新命令;

命令复制模块,用于若命令识别模块的识别结果为否,则将所述更新命令转换为包含相同数据操作信息的新的更新命令;

实时更新模块,用于若判断出与所述第一数据库链接的第二数据库满足预设的实时更新条件,则将所述新的更新命令发送至所述第二数据库执行;

更新记录模块,用于若判断出所述第二数据库不满足预设的实时更新条件,则为所述第二数据库保存所述更新命令;

延迟更新模块,用于根据保存的更新命令对所述第二数据库进行延迟同步更新。

本发明又一方面提供一种数据库集群,包括:第一数据库和第二数据库,所述第一数据库包括:

命令识别模块,用于接收到更新命令,根据预设的数据库会话属性识别所述更新命令是否为被复制的更新命令;

命令复制模块,用于若命令识别模块的识别结果为否,则将所述更新命令转换为包含相同数据操作信息的新的更新命令;

实时更新模块,用于若判断出所述第二数据库满足预设的实时更新条件,则将所述新的更新命令发送至所述第二数据库执行;

更新记录模块,用于若判断出所述第二数据库不满足预设的实时更新条件,则为所述第二数据库保存新的更新命令;

延迟更新模块,用于根据保存的更新命令对所述第二数据库进行延迟同步更新。

上述技术方案,通过选定一个可以用于识别更新命令是否是被复制的命令的数据库会话的某个属性,对于源命令,则向与所述数据库链接的其他数据库发送包含相同数据操作信息的更新命令,以实现链接的数据库的数据同步;若是被复制的命令,则不向与所述数据库链接的其他数据库发送包含相同数据操作信息的更新命令,以此避免死循环;并且,如果对应的数据库不满足实时更新的条件,则为对应的数据库暂存更新命令,以对所述数据库进行延迟同步更新。本发明上述实施例的方案,能够避免集群中数据库更新同步时的死循环,并提高集群整体的数据更新同步的速度。

附图说明

图1为一实施例的数据库更新同步的方法的示意性流程图;

图2为一实施例的对数据库进行延迟同步更新的示意性流程图;

图3为另一实施例的数据库更新同步的方法的示意性流程图;

图4为一实施例的数据库更新同步的系统的示意性结构图;

图5为一实施例的数据库集群的示意性结构图;

图6为另一实施例的数据库集群的示意性结构图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

图1为一实施例的数据库更新同步的方法的示意性流程图。本实施例中,执行环境为第一数据库,该数据库既可是源数据库,也可是接受更新同步命令的目标数据库。如图1所示,本实施例中的数据库更新同步的方法包括步骤:

S11,接收到对第一数据库的更新命令;

本发明实施例中,假定执行更新命令都是在数据库的触发器中实现,尽管还可以在数据库的任何合适的地方。因此,本发明实施例中在接收到对第一数据库的更新命令的之后,相应的会激活所述第一数据库的触发器。

S12,根据预设的数据库会话属性识别所述更新命令是否为被复制的更新命令;若否,执行步骤S121,若是,执行步骤S122;

本实施例中需预先选定一个可以用于识别更新命令是否是被复制的更新命令的数据库会话属性。用户发起的更新命令为源更新命令,来自其他数据库的数据同步会话的更新命令则为被复制的更新命令。作为一优选实施方式,可选定数据库会话的用户名作为用于识别更新命令是否是被复制的更新命令的数据库会话属性。

例如:设定数据库会话的用户名为“sss”的更新命令均属于被复制的更新命令。获取接收到的更新命令对应的数据库会话的用户名,判断获取到的用户名是否为sss,若是,则该更新命令属于被复制的更新命令;若不是,则该更新命令不属于被复制的更新命令。

可以理解的是,用于识别更新命令是否是被复制的更新命令的数据库会话属性不限于数据库会话的用户名,任何能够用于识别更新命令是否是被复制的更新命令的属性都可以。

步骤S121,将所述更新命令转换为包含相同数据操作信息的新的更新命令;进入步骤S13;

本发明实施例中,更新命令中的数据操作信息主要以DML(Data ManipulationLanguage,数据操纵语言)语句的形式表示,所述数据操作信息可包括插入(insert)、更换(update)、删除(delete)等类型。基于此,将所述更新命令转换为包含相同数据操作信息的新的更新命令的方式例如:若所述更新命令中包括插入(insert)或者更换(update)的DML语句,则从所述更新命令中获取到所述插入(insert)的DML语句或者所述更换(update)的DML语句,根据所述插入(insert)的DML语句或者所述更换(update)的DML语句生成一条新的更新命令,该新的更新命令的发出用户为所述第一数据库,目标数据库为与其链接的其他数据库(即第二数据库)。

步骤S122,禁止将所述更新命令转换为包含相同数据操作信息的新的更新命令并发送;

在通常的情况下,当一个更新命令在主数据库中执行时,它将激活主数据库的相关的触发器;而当该触发器在从数据库中执行同步更新时,从数据库的触发器也会被激活并会在主数据库中再次执行同步更新命令,这样就引起了一个死循环。本实施例中“从数据库”指只接受复制数据的数据库但不转发,即通过上述步骤S122可避免这种死循环。

可以理解的是,本发明实施例中数据库集群是指由至少两个数据库组成的整体。

S13,判断所述第二数据库是否满足预设的实时更新条件?若是,执行步骤S14,若否,执行步骤S15,

优选的,本发明实施例中预设的实时更新条件为:数据库的数据更新要求为实时更新,并且数据库当前处于正常运行状态或正在过渡到正常运行状态(T2N);数据库处于正常运行状态时能正常执行读写数据操作指令;数据库处于正过渡到正常运行状态时,与其链接的其他数据库的数据不同步且待执行的更新事务量小于等于预设阈值。

S14,将所述新的更新命令发送至所述第二数据库执行;

本发明实施例中,若所述第二数据库的数据更新要求为实时更新、并且当前处于正常运行状态,则直接将所述新的更新命令发送至所述第二数据库执行;若所述第二数据库的数据更新要求为实时更新、并且当前处于正在过渡到正常运行状态,则读取所述新的更新命令包含的数据操作信息,将所述数据操作信息转换为两条以上的DML操作语句,根据转换得到的DML操作语句生成对应条子更新命令,按序将所述子更新命令发送至所述第二数据库中执行。因为在目标数库(第二数据库)处于"正过渡到正常状态"时,因源数据库(第一数据库)和目标数据可能没有完全同步,因此在这种情况下需将原命令进行转换,折成多个DML操作语句,以保证数据操作后的目标数据库与源数据库的同步。当然也可进行先尝试执行原命令(即不转换),如果出现错误或结果异常,再将原命令进行转换。

例如,所述更新命令中包括一条插入(insert)或者更换(update)的DML语句,可将所述更新命令进行适当的转换得到两条子命令,例如,插入(insert)的DML语句可转换为先删除(delete)再插入(insert)的两条DML语句;同理,更换(update)的DML语句也可转换为先删除(delete)再插入(insert)的DML语句;根据转换得到的DML操作语句生成对应条子更新命令,先将包含删除(delete)操作信息的子更新命令发送至所述第二数据库中执行,再将包含插入(insert)操作信息的子更新命令发送至所述第二数据库中执行。

S15,为所述第二数据库保存所述更新命令,并根据保存的更新命令对所述第二数据库进行延迟同步更新。

本发明实施例中,为第二数据库保存所述更新命令的方式包括:保存在第一数据库中,当然,也可保存在其他任何地方,只要在对第二数据库进行延时更新时可以读取到即可。

需要说明的是,本实施例中,第一数据库和第二数据库的角色可互换,即第二数据库接收到更新命令,根据预设的数据库会话属性识别所述更新命令是否为被复制的更新命令;若否,则将所述更新命令转换为包含相同数据操作信息的新的更新命令;判断与第一数据库是否满足预设的实时更新条件;若满足,则将所述新的更新命令发送至所述第一数据库执行;若不满足,则为所述第一数据库保存所述新的更新命令,并根据保存的更新命令对所述第一数据库进行延迟同步更新。

优选的,若所述第二数据库的数据更新要求为实时更新,则在第二数据库重启时,可根据记录的更新命令对所述第二数据库进行数据恢复,使其与第一数据库的数据同步。由此可使要求实时复制的数据库重启时能够与集群其它数据库实现同步。

本发明实施例中,数据库接收到更新命令之后,可识别该更新命令是否为复制的命令,若是,则不再转发,如否,则向与其链接的其他数据库转发更新命令,以实现数据库集群的同步更新;并且若检测到对应的数据库的数据更新要求为实时更新、且处于正常运行状态或正在过渡到正常运行状态,则直接将更新命令发送至该数据库实现实时同步;若对应的数据库的数据更新要求为实时更新、但既不处于正常运行状态、也不处于正在过渡到正常运行状态,则为该数据库保存更新命令;若对应的数据库的数据更新要求为非实时更新或者延迟更新,同样也为该数据库保存更新命令。

在为对应的数据库保存更新命令之后,可按照设定时间间隔判断所述对应的数据库是否满足预设的延迟同步条件,当满足延迟同步条件时,则读取保存的更新命令并发送至对应的数据库执行,由此实现延迟同步。本发明实施例中,延迟同步条件可包括:数据库为要求实时更新的状态,并且当前处于正常运行状态或正在过渡到正常运行状态;或者数据库为延迟更新状态且延迟时间届满;或者数据库由要求延迟更新状态转换为实时更新状态。对于包括至少两个数据库的数据库集群,根据保存的更新命令对数据库进行数据更新的过程相当于数据库的恢复过程。传统数据库集群中某数据库与其他数据库的数据不同步、需要进行恢复时,需暂停其他数据库的更新操作。本发明的恢复方法可消除数据库集群的暂停更新操作的问题,由此缩短数据库集群的更新同步时间。

图2为一实施例的根据保存的更新命令对所述数据库进行延迟同步更新的示意性流程图,其中若第二数据库为要求实时更新的数据库,由于检查等原因暂停,在数据库重启时需进行数据恢复,直到其与其他源数据库的数据同步;若第二数据库为要求延时更新的数据库,则当预设的延时更新条件满足时(例如延时时间到时)需进行数据恢复。如图2所示,对所述第二数据库进行数据恢复的步骤包括:

S20,设定阈值,用参数V表示;

V的取值可为大于0的任意整数,可根据实际情况进行调整。

S21,统计为第二数据库保存的待执行的更新命令的数量,记为参数M;

相对于源数据库(第一数据库)来说,第二数据库相当于目标数据库(从数据库)。

S22,判断M<=V是否成立;若是,进入步骤S23,若否,进入步骤S28;

S23,进一步检测第二数据库是否转换为要求实时更新的状态;若是,进入步骤S24,若否,进入步骤S28;

S24,通知第二数据库的所有源数据库该数据库已进入“正在过渡到正常运行状态”(状态T2N),表明第二数据库的所有源数据库可以将它们的数据更新直接同步到该数据库。

S25,读取所有的待执行的更新命令,对于每条待执行的更新命令,从源数据库中获取相关的数据,用获取到的源数据库中的数据对所述第二数据库进行数据更新;

用获取到的源数据库中的数据对所述第二数据库进行数据更新的过程可为:先锁定所述第二数据库的相应数据项,将获取到的源数据库中的数据同步到第二数据库,然后解锁上述相应数据项。

S26,在执行完所有的待执行的更新命令之后,删除保存的更新命令;执行步骤S27。

这时第二数据库与其对应的源数据库的数据同步,并且可以接受源数据库的实时更新同步。

S27,通知所述第二数据库的所有源数据库该数据库已进入正常运行状态,延迟同步程序(恢复程序)结束。

S28,获取保存时间最早的待执行的更新命令,读取该待执行的更新命令中用于更新的数据,用获取到的更新命令中的数据对所述第二数据库进行数据更新;

S29,执行完所述更新命令后,删除保存的对应更新命令的记录,返回步骤S21。

需要说明的是,当所述第二数据库为要求延迟更新的数据库时,由于不要求实时更新的数据库是处于非正常状态,因为它的数据和源数据库的数据不是实时同步的,因此这样的第二数据库不会广播其状态信息,即不执行上述S24至S27之间的步骤。

需要说明的是,本实施例中,要求延迟更新的数据库可以在任何时候转变为要求实时更新的数据库,反之亦然。数据库从要求延迟更新转变为要求实时更新时,会通知集群中的源数据库,因它当前尚且处于非正常状态(它的数据不准确或与源数据库不同步,因此它不能立即正确处理用户的读写指令),源数据库将继续为它保存数据,直到它进入正常运行状态或者正在进入正常运行状态;数据库从要求要求实时更新转变为要求延迟更新时,也会通知其它源数据库,转换之后由于其进入了非正常运行状态,因此便不会广播其状态信息。

通过本发明上述实施例的数据库更新同步的方法,它将数据库集群中的数据库更新同步所需的时间降至最低并保证永不停机(即暂停更新)。既利于应对灾难恢复,同时保证集群中的数据库的数据的准确性,极大地提高了数据库提供数据和更新数据的能力,降低了应用成本。

图3为另一实施例的数据库更新同步的方法的示意性流程图;在本实施例中,执行环境为数据库集群,该数据库集群包括至少两个需更新同步的数据库(第一数据库和第二数据库)。本实施例结合至少两个数据库之间的交互过程,对集群中数据库更新同步的方法进行说明。如图3所示,具体包括如下步骤:。

S31,第一数据库接收到更新命令,根据预设的数据库会话属性识别所述更新命令是否为被复制的更新命令;

若收到的是用户更新命令,则可识别所述更新命令不是被复制的更新命令,执行下一步。

S32,所述第一数据库执行所述更新命令,并将所述更新命令转换为包含相同数据操作信息的新的更新命令;

S33,若检测到与其链接的第二数据库满足预设的实时更新条件,则将所述新的更新命令发送至所述第二数据库执行;否则,则为所述第二数据库保存所述新的更新命令;

本实施例中可按照设定时间间隔循环判断所述第二数据库是否满足预设的延迟同步条件;若是,读取保存的更新命令,并将所述更新命令发送至所述第二数据库执行,以实现第一数据库和第二数据库的延时同步。若否,继续执行本步骤。

另一方面,对于所述第二数据库来说,包括以下步骤:

S41,所述第二数据库接收第一数据库发送的更新命令,根据预设的数据库会话属性可识别出其接收到的所述更新命令为被复制的更新命令;

S42,所述第二数据库不会将所述更新命令转换为包含相同数据操作信息的新的更新命令;以此避免形成死循环。

当然,本实施例中第一数据库和第二数据库的角色可以互换。即第二数据库在执行更新时,检测第一数据库是否满足预设的实时更新条件;若是则向第一数据库发送同步更新命令;第一数据库接收来自第二数据库的同步更新命令,识别出所述更新命令属于被复制的更新命令,则不再进行转发。

优选的,本实施例上述步骤S32中,将所述新的更新命令发送至所述第二数据库执行的步骤包括:若检测到所述第二数据库的数据更新要求为实时更新、并且当前处于正常运行状态,则将所述新的更新命令发送至所述第二数据库中执行;若检测到所述第二数据库的数据更新要求为实时更新、并且当前处于正在过渡到正常运行状态,则读取所述新的更新命令包含的数据操作信息,转换为两条以上的DML操作语句,根据转换得到的DML操作语句生成对应条子更新命令,按序将所述子更新命令发送至所述第二数据库中执行。

需要说明的是,对于前述的各方法实施例,为了简便描述,将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其它顺序或者同时进行。

基于与上述实施例中的数据库更新同步的方法相同的思想,本发明还提供数据库更新同步的系统,该系统可用于执行上述数据库更新同步的方法。为了便于说明,数据库更新同步的系统实施例的结构示意图中,仅仅示出了与本发明实施例相关的部分,本领域技术人员可以理解,图示结构并不构成对系统的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

图4为本发明一实施例的数据库更新同步的系统的示意性结构图;如图4所示,本实施例的数据库更新同步的系统包括:命令识别模块410、命令复制模块420、实时更新模块430、更新记录模块440以及延迟更新模块450,各模块详述如下:

上述命令识别模块410,用于接收对第一数据库的更新命令,根据预设的数据库会话属性识别所述更新命令是否为被复制的更新命令;

优选的,所述预设的数据库会话属性为数据库会话的用户名;对应的上述命令识别模块410可用于,接收对第一数据库的更新命令,获取所述更新命令对应的数据库会话的用户名,判断获取到的用户名是否为预设用户名;数据库会话的用户名为所述预设用户名的更新命令均属于被复制的更新命令。

命令复制模块420,用于若命令识别模块的识别结果为否,则将所述更新命令转换为包含相同数据操作信息的新的更新命令;若命令识别模块的识别结果为是,则禁止将所述更新命令转换为包含相同数据操作信息的新的更新命令;

实时更新模块430,用于若判断出与所述第一数据库链接的第二数据库满足预设的实时更新条件,则将所述新的更新命令发送至所述第二数据库执行;

优选的,所述预设的实时更新条件可为:数据库的数据更新要求为实时更新,并且数据库当前处于正常运行状态或正在过渡到正常运行状态。数据库处于正常运行状态时能正常执行读写数据操作指令;数据库处于正过渡到正常运行状态时,与其他数据库同步更新的更新事务量小于等于预设阈值。

所述更新记录模块440,用于若判断出所述第二数据库不满足预设的实时更新条件,则为所述第二数据库保存所述新的更新命令;

所述延迟更新模块450,用于根据保存的更新命令对所述第二数据库进行延迟同步更新。

例如,若所述第二数据库的数据更新要求为实时更新,则所述延迟更新模块450可用于在第二数据库重启时,根据保存的更新命令对所述第二数据库进行数据恢复,使其与第一数据库的数据同步。

优选的,所述实时更新模块430中可包括:

第一实时更新模块子模块,用于若所述第二数据库的数据更新要求为实时更新、并且当前处于正常运行状态,则将所述新的更新命令发送至所述第二数据库执行;

第二实时更新模块子模块,用于若所述第二数据库的数据更新要求为实时更新、并且当前处于正在过渡到正常运行状态,则读取所述新的更新命令包含的数据操作信息,将所述数据操作信息转换为两条以上的DML操作语句,根据转换得到的DML操作语句生成对应条子更新命令,按序将所述子更新命令发送至所述第二数据库中执行。

优选的,所述延迟更新模块450可用于按照设定时间间隔判断所述第二数据库是否满足预设的延迟同步条件,当确定所述第二数据库满足所述延迟同步条件时,读取保存的更新命令并将所述更新命令发送至所述第二数据库执行。

优选的,所述延迟更新模块450中可包括:

事务量检测子模块,用于统计为所述第二数据库保存的待执行的更新命令的数量,记为参数M,判断M<=V是否成立,V表示预设阈值;

第一更新执行子模块,用于若事务量检测子模块的判断结果为是,则读取所有的待执行的更新命令,对于每条待执行的更新命令,从对应的源数据库中获取与各条待执行的更新命令相关的数据,用获取到的数据对所述第二数据库进行数据更新;

第二更新执行子模块,用于若事务量检测子模块的判断结果为否,则读取保存时间最早的待执行的更新命令,读取该待执行的更新命令中用于更新的数据,用获取到的数据对所述第二数据库进行数据更新;

优选的,所述延迟更新模块450中还可包括:

状态检测子模块,用于当检测到M<=V成立时,检测所述第二数据库当前是否为要求实时更新的状态;

状态广播子模块,用于若是要求实时更新的状态,则将所述第二数据库的当前状态确定为正在过渡到正常运行状态,向与所述第二数据库链接的其他数据库广播该状态信息。还用于在执行完所述M项更新命令后,若所述第二数据库为要求实时更新的数据库,则将所述第二数据库的当前状态确定为正常运行状态,向与所述第二数据库链接的其他数据库广播该状态信息。

所述第二更新执行子模块,还用于若不是要求实时更新的状态,则读取保存时间最早的待执行的更新命令,读取该待执行的更新命令中用于更新的数据,用获取到的更新命令中的数据对所述第二数据库进行数据更新。

图5为一实施例的数据库集群的示意性结构图;如图5所示,所述数据库集群500包括第一数据库501和第二数据库502。所述第一数据库501、第二数据库502均包括有:命令识别模块、命令复制模块、实时更新模块、更新记录模块以及延迟更新模块,详述如下:

在所述第一数据库501中:

所述命令识别模块,用于接收到更新命令,根据预设的数据库会话属性识别所述更新命令是否为被复制的更新命令;所述命令复制模块,用于若命令识别模块的识别结果为否,则将所述更新命令转换为包含相同数据操作信息的新的更新命令;所述实时更新模块,用于若判断出所述第二数据库满足预设的实时更新条件,则将所述新的更新命令发送至所述第二数据库执行;所述更新记录模块,用于若判断出所述第二数据库不满足预设的实时更新条件,则为所述第二数据库保存新的更新命令;所述延迟更新模块,用于根据保存的更新命令对所述第二数据库进行延迟同步更新。

在所述第二数据库502中:所述命令识别模块,用于接收到更新命令,根据预设的数据库会话属性识别所述更新命令是否为被复制的更新命令;所述命令复制模块,用于若命令识别模块的识别结果为否,则将所述更新命令转换为包含相同数据操作信息的新的更新命令;所述实时更新模块,用于若判断出所述第一数据库满足预设的实时更新条件,则将所述新的更新命令发送至所述第一数据库执行;所述更新记录模块,用于若判断出所述第一数据库不满足预设的实时更新条件,则为所述第一数据库保存新的更新命令;所述延迟更新模块,用于根据保存的更新命令对所述第一数据库进行延迟同步更新。

作为另一优选实施方式,也可为所述第一数据库501、第二数据库502设置一个共享的更新记录模块。例如将共享的更新记录模块设置在第一数据库501、第二数据库502之外的一个独立的数据库中,该更新记录模块由第一数据库501、第二数据库502共享。这种情况下,所述第一数据库501、第二数据库502无需单独设置一个本地的更新记录模块。

图6为另一实施例的数据库集群的示意性结构图;如图6所示,所述数据库集群600包括:第一数据库501、第二数据库502和第三数据库503,所述第一数据库501和第二数据库502的数据更新要求为实时更新,所述第三数据库503的数据更新要求为延时同步更新。

本实施例中,第一数据库501、第二数据库502均可为主数据库,第三数据库503则为从数据库,主数据库的数据更新时,从数据库需要进行相应的同步更新。

所述第一数据库501、第二数据库502相互要求数据实时更新,这两个数据库可构成一个非共享存储的数据库实时子集群。第一数据库501、第二数据库502将它们的数据延迟同步到第三数据库503。所述第一数据库501、第二数据库502可各包括一个更新记录模块,用于为其他数据库记录需延迟执行的更新命令。当然,也可为所述第一数据库501、第二数据库502设置一个共享的更新记录模块。

优选的,本实施例中,保存更新命令的方式为:在所述第一数据库/第二数据中保存。对应的,该数据库集群600中,在各数据库正常运行状态时,若用户发出源更新命令到第一数据库501时,该更新命令将被第一数据库501中的实时更新模块实时同步执行到第二数据库502,并在第一数据库501中为所述第三数据库503保存该更新命令;相应的,若用户发出源更新命令到第二数据库502时,该更新将被第二数据库502中的实时更新模块实时同步执行到第一数据库501,并在第二数据库502中为所述第三数据库503保存该更新命令。

第三数据库503在延迟更新时,其延迟更新模块可周期性地从第一数据库501/第二数据库502的更新记录模块中读出与其相关的待执行的更新命令,按时间顺序将待执行的更新命令同步执行,使得第三数据库503与第一数据库501、第二数据库502实现延时同步。

假如第二数据库502处于非正常运行状态,那么第一数据库501将在其更新记录模块中为第二数据库502保存更新命令,在第二数据库502重新进入正常运行状态时,无需暂停第一数据库501,第二数据库502的延迟更新模块可从第一数据库501的更新记录模块中读出与其相关的待执行的更新命令并执行,使得第二数据库502和第一数据库501的数据同步。

需要说明的是,上述示例的系统及数据库集群的实施方式中,各模块/单元之间的信息交互、执行过程等内容,由于与本发明前述方法实施例基于同一构思,其带来的技术效果与本发明前述方法实施例相同,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。

此外,上述示例的系统及数据库集群的实施方式中,各功能模块的逻辑划分仅是举例说明,实际应用中可以根据需要,例如出于相应硬件的配置要求或者软件的实现的便利考虑,将上述功能分配由不同的功能模块完成,即将所述数据库更新同步的系统的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。其中各功能模既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。

本领域普通技术人员可以理解,实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,作为独立的产品销售或使用。所述程序在执行时,可执行如上述各方法的实施例的全部或部分步骤。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-OnlyMemory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。可以理解,其中所使用的术语“第一”、“第二”等在本文中用于区分对象,但这些对象不受这些术语限制。例如,在不脱离本发明的范围的情况下,可以将第一数据库称为第二数据库,将第二数据库称为第一数据库。

以上所述实施例仅表达了本发明的几种实施方式,不能理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号