数据库切换方法、装置及设备与流程

文档序号:13005013阅读:169来源:国知局
数据库切换方法、装置及设备与流程

本说明书实施例涉及数据处理技术领域,尤其涉及数据库切换方法、装置及设备。



背景技术:

随着数据库类型的多样化,很多业务系统都面临着将业务数据由源数据库迁移到目标数据库的问题。为了解决业务数据在不同数据库之间迁移的问题,相关技术可以响应业务请求,将与业务请求相关的数据写入源数据库的同时,将写入源数据库的数据同步到目标数据库。

综上可知,这种解决业务数据在不同数据库之间迁移的技术,会加大数据库的访问开销,进而影响业务处理效率,因此,需要一种新的技术来解决业务数据在不同类型的数据库之间迁移的问题。



技术实现要素:

有鉴于此,本说明书实施例提供一种数据库切换方法、装置及设备。

根据本说明书实施例的第一方面,提供一种数据库切换方法,包括步骤:

在有数据写入源数据库时,将所写的数据标记为待同步的数据,其中,源数据库为业务系统优先访问的数据库;

如果到达预定的同步时间,向目标数据库同步源数据库中被标记的数据;

源数据库中被标记的数据均同步到目标数据库后,将目标数据库切换为所述业务系统优先访问的数据库。

根据本说明书实施例的第二方面,提供一种数据库切换装置,包括:

数据标记模块,用于在有数据写入源数据库时,将所写的数据标记为待同步的数据,其中,源数据库为业务系统优先访问的数据库;

数据同步模块,用于在到达预定的同步时间时,向目标数据库同步源数据库中被标记的数据;

数据库切换模块,用于在源数据库中被标记的数据均同步到目标数据库后,将目标数据库切换为所述业务系统优先访问的数据库。

根据本说明书实施例的第三方面,提供一种计算机设备,包括:

处理器;

存储处理器可执行指令的存储器;

其中,所述处理器耦合于所述存储器,用于读取所述存储器存储的程序指令,并作为响应,执行如下操作:

在有数据写入源数据库时,将所写的数据标记为待同步的数据,其中,源数据库为业务系统优先访问的数据库;

如果到达预定的同步时间,向目标数据库同步源数据库中被标记的数据;

源数据库中被标记的数据均同步到目标数据库后,将目标数据库切换为所述业务系统优先访问的数据库。

实施本说明书提供的实施例,在有数据写入源数据库时,不会直接将写入的数据同步到目标数据库,而是将所写的数据标记为待同步的数据;在到达预定的同步时间,再向目标数据库同步源数据库中被标记的数据;在源数据库中被标记的数据均同步到目标数据库后,再将目标数据库切换为所述业务系统优先访问的数据库。可以减少数据在不同数据库之间的迁移过程,对业务处理过程的影响,进而提高业务处理效率。

附图说明

图1是本说明书一示例性实施例示出的实现数据库切换的系统的架构图;

图2是本说明书一示例性实施例示出的数据库切换方法的流程图;

图3-6是本说明书一示例性实施例示出的数据库切换前后的数据写入过程的示意图;

图7是本说明书一示例性实施例示出的数据库切换装置的框图;

图8是本说明书一示例性实施例示出的计算机设备的硬件结构图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。

在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

请参阅图1,图1所示的是本说明书一示例性实施例示出的实现数据处理的系统100的架构图。系统100可以包括经由网络112与一个或多个客户端106进行数据通信的运营服务器105,以及独立于运营服务器105或集成于运营服务器105的数据库115、116。网络112可以包括例如互联网、内部网、外部网、广域网(wan)、局域网(lan)、有线网、无线网或其它合适的网络等,或者两个或更多个这类网络的任何组合。贯穿示例性实施方案的论述,应了解,术语“数据”和“信息”可在本说明书中互换地用于指代可存在于基于计算机的环境中的文本、图像、音频、视频或任何其它形式的信息。

运营服务器105上可以包括可商购获得的超文本传送协议(http)服务器应用,如http服务器、互联网信息服务(iis)和/或其它服务器。

客户端106可以是安装有应用的网络装置。这里提到的应用可以是提供各种服务的业务系统涉及的应用,例如提供账务转入或转出服务的金融系统、提供通讯服务的通讯系统等,网络装置从硬件上可以包括桌上型计算机、膝上型计算机、平板计算机、智能电话、手持型计算机、个人数字助理(“pda”),或任何其它有线或无线处理器驱动的装置。

一旦用户使用客户端106并通过网络112向运营服务器105发起注册请求,运营服务器105可以记录该用户的注册信息,并按照注册请求在运营服务器105中开设预置权限的账号。此外,可以存储有各用户注册的账户、各账户的各种密码(登录密码和/或业务处理密码等等)以及用户注册时上传的身份验证信息。

后续每次用户通过客户端106发起针对某个业务的业务请求,例如:业务数据访问请求、业务数据调取请求等,从而对运营服务器105发生访问时,运营服务器105基于每次业务请求中携带的用户id之类的表明用户身份的标识,可以获知并记录这样的业务请求。特别的,可以记录该用户的请求时间,可选择的,也可以记录发起请求时的ip地址,或者所采用的网络装置的硬件类型,或者客户端版本/客户端所基于的操作系统版本之类信息中一个或多个。特别的,对于发生数据更新的业务请求,例如转入或转出资源的业务请求、修改业务状态的请求等,运营服务器105还可以记录该业务请求,并通过执行相应的内部或外部的操作后给予用户特定的响应。一般地,所有业务请求,均会在运营服务器105中留下相应记录。运营服务器105可以按照用户id、业务描述信息等信息来分别归类不同用户的所有业务请求。对于交互行为的业务请求,例如不同注册用户之间的交互,也可以按照上述用户id分类并构成集合。

运营服务器105可以用数据库115或数据库116来存储上述业务请求、响应该业务请求的操作以及该操作产生的业务数据,数据库115和数据库116可用于响应客户端106的业务请求的数据库。

针对冗余备份的应用场景,数据库115可以是主数据库和该主数据库的冗余备份数据库中的一数据库,数据库116可以是主数据库和该主数据库的冗余备份数据库中的一数据库。

针对数据迁移的应用场景,数据库115可以是主数据库和该主数据库的迁移数据库中的一数据库,数据库116可以是主数据库和该主数据库的迁移数据库中的一数据库。其中,主数据库或迁移数据库可以是qracle数据库、oceanbase数据库、mysql数据库等。

除数据库115和数据库116外系统100还可以包括其他数据库。存储在数据库115或数据库116中的数据,与以下描述的各种实施例的操作步骤相关联。

实际应用中,出于数据安全、数据处理效率、数据库运维成本等方面的考虑,可能出现切换数据库的需求。以图1所示的系统为例,数据库115是运营服务器105一直读写的数据库,可以称作源数据库,运营服务器105在接收到客户端106的业务请求后,会优先访问源数据库。由于数据库116的数据处理效率、安全保障、运维成本等属性优于数据库115,因此,需要以数据库116代替数据库115,将运营服务器105优先访问的数据库由数据库115切换成数据库116,可以将数据库116称作用于替换源数据的目标数据库。

为了在目标数据库代替源数据库后,依旧保证运营服务器105为客户端106提供正常的服务,在切换数据库前,需要将业务数据由源数据库迁移到目标数据库。以下结合附图,详细说明本说明书实施例的数据库切换过程。

请参阅图2,图2是本说明书一示例性实施例示出的数据库切换方法的流程图,该实施例可以应用于图1所示的运营服务器上,包括以下步骤s201-s203:

步骤s201、在有数据写入源数据库时,将所写的数据标记为待同步的数据,其中,源数据库为业务系统优先访问的数据库。

步骤s202、如果到达预定的同步时间,向目标数据库同步源数据库中被标记的数据。

步骤s203、源数据库中被标记的数据均同步到目标数据库后,将目标数据库切换为所述业务系统优先访问的数据库。

本实施例中,业务系统可以指服务提供方为用户提供相关服务时所涉及的各业务设备,如:用于响应客户端的业务请求、向客户端提供相应服务的运营服务器。

实际应用中,运营服务器接收到客户端发送的业务请求、或者检测到用户(如业务管理员)直接在运营服务器上触发的业务请求时,可以对源数据库执行与业务请求相应的操作,这里提到的操作可以是读操作、写操作、加锁操作等,写操作又可以指插入操作、修改操作、删除操作中的至少一项。而业务场景不同时,运营服务器接收到的业务请求不同,响应所述业务请求对源数据库执行操作时,所操作的数据也可能不同,例如:业务场景为电子商务领域的场景时,接收的业务请求为订单处理请求,所操作的数据为订单数据;业务场景为金融领域的场景时,接收的业务请求为余额查询请求,所操作的数据可以是账户余额数据。在其他业务场景,还可以接收其他类型的业务请求、操作其他类型的数据,本说明书实施例对此不做限制。

当运营服务器响应接收或检测到的业务请求,向源数据库写数据时,可以判断与待执行的操作对应的原始sql查询条件是否包含为待操作的数据配置的唯一索引,如果包含,直接对目标数据库执行写操作,如果不包含,则根据where查询条件反查从数据库的业务表,判断所述业务表中是否包括待操作的数据所属业务的唯一索引,如果不包括,则原始sql没有带查询条件,禁止对目标数据库执行写操作,如果包括,则根据所述唯一索引对目标数据库执行写操作。

可以将所写的数据标记为待同步的数据,具体标记时,可以建立一个同步数据表,在该同步数据表中添加能表征所写的数据的同步标记,如:将所写的数据的索引添加到同步数据表中,或者直接将所写的数据的索引以及描述写操作的信息添加到同步数据表中;标记时还可以直接在存储写入数据的数据表中对应写入数据添加同步标记,该同步标记可以是本方案的设计人员预定的能表示对应数据为待同步数据的字母、数字等字符。在其他实施例中,还可以采取其他方式标记待同步的数据,本说明实施例对此不做限制。

写入数据时,对源数据库所执行的操作不同时,标记的数据也可能有所不同,例如:对源数据库执行删除操作时,可以将删除的数据的索引与描述删除操作的信息添加到同步数据表,也可以将执行删除操作后,所得的一组数据的索引添加到同步数据表;对源数据库执行插入操作时,可以将插入的数据的索引与描述插入操作的信息添加到同步数据表,也可以将执行插入操作后,所得的一组数据的索引添加到同步数据表。

在标记好本次所写的数据后,如果未到达预定的同步时间,只要有数据写入源数据库,便可以再次执行将所写的数据标记为待同步数据的操作。这里提到的同步时间可以由本方案的设计人员根据实际的应用场景预定。某些例子中,可以预定为每天的固定时段,如每天凌晨的3点到6点。其他例子中,还可以预定为源数据库被操作的概率低于预定的概率阈值的时段,该概率阈值可以为5%后其他数值。

在标记好本次所写的数据后,如果到达所述同步时间,可以向目标数据库同步被标记的数据,目标数据库中没有待同步的数据时,直接将待同步的数据写入目标数据库,目标数据已经有与待同步的数据相关的历史数据时,按照同步标记或待同步的数据对相关的历史数据进行更新。

实际应用中,同步被标记的数据时,可以根据标记时间,优先将最新标记的数据同步到目标数据库,每完成一组或一条数据的同步,可以将该组或该条数据更新为已同步数据,以便区分已同步的数据和未同步的数据,具体更新时,可以将表征数据为待同步数据的标记删除,也可以增加表征数据为已同步数据的标记。此外,也可以从上次同步到的数据开始,继续同步后续的数据。在其他例子中,还可以按其他顺序同步被标记的数据,本说明书实施例对此不做限制。

在同步被标记的数据的同时,可以保持源数据库为业务系统优先访问的数据库,便于在有数据需要写入源数据库时,同步被标记的同时,将数据写入源数据库,并标记所写的数据。超出所述同步时间后,可以暂时终止数据同步,下次到达预定的同步时间后,再继续进行数据同步。

某些场景下,并非从源数据库中写入第一组数据时,开始标记待同步的数据,所以标记待同步的数据之前写入源数据库的数据中,可能有至少部分数据还需要同步到目标数据库中,所以,在源数据库中被标记的数据均同步到目标数据库后,还可以向目标数据库同步源数据库中未被标记的待同步数据;在源数据库中未被标记的待同步数据均同步到目标数据库后,再将目标数据库切换为业务系统优先访问的数据库。这里提到的源数据库中未被标记的待同步数据,可以由本方案的设计人员或者系统管理人员根据实际的业务需求确定,例如:可以将未标记的数据中与已标记的数据相关的数据确定为待同步的数据,与已标记的数据相关的数据可以是与已标记的数据所属的业务相同的数据。在其他例子中,还可以将未标记的数据中比较重要的业务数据、可能反复访问的业务数据等确定为待同步的数据,本说明书实施例对此不做限制。

在将目标数据库切换为所述业务系统优先访问的数据库后,考虑到新切换的目标数据库没有在业务系统的实际运营环境下稳定运行过,可能出现故障,进而影响业务的及时处理,为了避免目标数据库的故障对业务的影响,可以在切换后的预定时段内有数据写入目标数据库时,将所写的数据标记为待同步的数据,到达预定的同步时间时,向源数据库同步目标数据库中被标记的数据。这里提到的预定时间可以由本方案设计人员或者业务管理人员根据业务需求设定,如设定为1小时、1天或其他时段。

在预定时段内将目标数据库中的新数据同步到源数据库,可以当目标数据库在所述预定时段内出现异常运行状况时,重新将源数据库切换为所述业务系统优先访问的数据库。然后再次在有数据写入源数据库时,将所写的数据标记为待同步的数据;到达预定的同步时间时,向源数据库同步目标数据库中被标记的数据,向目标数据库同步源数据库中被标记的数据;源数据库中被标记的数据均同步到目标数据库后,重新将目标数据库切换为所述业务系统优先访问的数据库。通过故障时的数据库回切,可以使业务系统和目标数据库能更好的配合运行,避免切换数据库后故障对业务的影响,而且也便于及时对目标数据库进行调整,能够有效降低目标数据库的故障发生率,进而提高业务处理效率。

由于数据库的回切,在同步被标记的数据时,既会向源数据库同步目标数据库中的数据,也会向目标数据库同步源数据库中的数据,为了避免同一业务数据来回在不同数据库间同步,在同步被标记的任一组数据时,将该组数据由乐观锁版本高的数据库同步到乐观锁版本低的数据库。

在其他例子中,还可以循环执行回切数据库、标记待同步的数据、向目标数据库同步数据、切换目标数据库为所述业务系统优先访问的数据库的步骤,直至目标数据库在所述预定时段内不出现异常运行状况。

此外,如果目标数据库在所述预定时段内未出现异常运行状况,可以直接弃用源数据库。但是,为了避免目标数据库在该预定时段之后的短时间内出现故障,影响业务处理,在所述预定时段之后有数据写入目标数据库时,可以有选择的将所写的数据同步到源数据库,某些例子中,可以在所述预定时段之后有数据写入目标数据库时,获取当前时间对应的待同步数据,其中,当前时间与所述预定时段的时间距离越大,对应的待同步数据越少;写入的数据与当前时间对应的待同步数据匹配时,将所写的数据标记为待同步的数据。当前时间对应的待同步数据,可以由本方案人员预先设定,针对不同的时间设定不同的待同步数据,例如:数据的重要性越差,对应的时间越少,这样可以慢慢降低标记的待同步的数据的量,直至不再标记待同步的数据。

考虑到切换为业务系统优先访问的数据库后,当目标数据库在预定时段出现故障时,会将源数据库重新切换为业务系统优先访问的数据库,在将标记的待同步数据都同步到目标数据库后,又会重新将目标数据库切换为业务系统优先访问的数据库。因此,至少一段时间内业务系统优先访问的数据库不固定,那么在这段时间内,运营服务器可能接收到针对同一业务的多次业务请求(多次请求属于同一业务),第一次业务请求在源数据库与目标数据库切换前收到,运营服务器105响应该第一次业务请求,对源数据库执行相应操作,将该业务的状态数据更新为1。用目标数据库替换源数据库后,目标数据库成为运营服务器优先访问的数据库,第二次业务请求发送到运营服务器,运营服务器响应该第二次业务请求,对目标数据库执行相应操作,将该业务的状态数据更新为2。

综上可知,运营服务器响应两次业务请求,对不同数据库执行了操作,会导致两个数据库中同一业务的数据不一致,而不同数据库中同一业务的流水型的数据一致,容易出现幂等失效,造成用户资损。本说明书实施例为了解决该问题,可以在写入源数据库的数据是流水型数据时,将所述写入的数据所属的业务和数据库存储到预定的业务操作记录,其中,所属的数据库为源数据库。

另外,属于同一业务的数据在业务操作记录中记录一次,便可以解决上述问题,所以将写入的数据所属的业务和数据库存储到预定的业务操作记录前,可以调取所述业务操作记录;判断所述业务操作记录中是否记录有所述写入的数据所属的业务和数据库;在所述业务操作记录中没有所述写入的数据所属的业务和数据库时,再将所述写入的数据所属的业务和数据库记录到预定的业务操作记录。此外,为了降低不同数据库之间的幂等问题,可以将所述业务操作记录存储在目标数据库中,这样无需再通过其他措施保障业务操作记录所在数据库与目标数据库之间的幂等性。

除流水型数据外,还可能有非流水型的数据需要写入目标数据库或源数据库,非流水型数据可以指状态数据,可能会被频繁修改,如电子账户内的余额之类的账务数据,对于非流水型数据,如果同一业务的一部分数据分布在目标数据库中,另一部分数据分布在源数据库中,会造成涉及非流水型数据的业务处理报错,因此,在每次切换源数据库或目标数据库为业务系统优先访问的数据库后的一时段内,如果需要操作主数据库,主数据库为源数据库和目标数据库中被所述业务系统优先访问的数据库,源数据库和目标数据库中另一数据库为从数据库,可以在主数据库被操作前,基于以下至少一项确定操作策略:

待操作的数据的数据类型,待操作的数据所属的业务,预定的业务操作记录;根据所确定的操作策略对主数据库执行相应操作。

其中,所述业务操作记录包括已操作的数据所属的业务和数据库;所确定的操作策略为禁止对主数据库执行相应操作的策略,或允许对主数据库执行相应操作的策略。

此外,考虑到运营服务器响应单个业务请求可能对其优先访问的数据库执行多次操作,如果多次操作的操作策略不同,易导致不同数据库中同一业务的数据一致,因此,在根据所确定的操作策略对主数据库执行相应操作时,如果各操作响应的业务请求相同,则对主数据库执行各操作时所根据的操作策略相同,这个相同的操作策略可以是响应该业务请求对主数据库执行首次操作前,根据待操作的数据的数据类型、待操作的数据所属的业务和预定的业务操作记录中的至少一项所确定的操作策略。

在确定操作策略时,应用场景不同时,确定操作策略所依据的内容不同,以下列举几种应用场景,以及确定操作策略的方式:

场景一:该场景下的业务涉及的数据为非流水型数据,或者该场景下需要对主数据库执行的操作为读操作或加锁操作时,可以仅根据待操作的数据所属的业务来确定操作策略。这里提到的操作可以是写操作、读操作和加锁操作中的任一种,写操作可以是插入操作、删除操作和修改操作中的任一种。

在根据待操作的数据所属的业务来确定操作策略时,可以从运营服务器接收或检测到的业务请求携带的内容中,获得该业务请求所针对的业务、响应该业务请求需要操作的数据,将获得的业务为需操作的数据所属的业务,然后判断从数据库中属于该业务的数据是否已全部同步到主数据库,如果是,所确定的操作策略可以是允许对主数据库执行相应操作的策略;如果否,则所确定的操作策略可以是禁止对主数据库执行相应操作的策略。

实际判断时,可以在从数据库的同步数据表中查询属于该业务的数据的同步标记,如果查找到,则确定从数据库中属于该业务的数据未全部同步到主数据库,如果未查找到,还可以根据该业务的索引或待操作的数据的索引,在从数据库中搜索该业务,搜索到该业务后,判断该业务的数据是否均已同步到主数据库,如果否,则确定从数据库中属于该业务的数据未全部同步到主数据库,如果是,则确定从数据库中属于该业务的数据已全部同步到主数据库。

在其他实施例中,确定操作策略时,可以先判断与待执行的操作对应的原始sql查询条件是否包含为待操作的数据配置的唯一索引,如果包含,则根据该唯一索引,查询从数据库中该业务的数据是否均已同步到主数据库,如果是,所确定的操作策略可以是允许对主数据库执行相应操作的策略,如果否,所确定的操作策略可以是进展对主数据库执行相应操作的策略。

如果原始sql查询条件不包含为待操作的数据配置的唯一索引,则判断原始sql查询条件的主键id配置是否为空,如果是,则确定该sql查询条件为批量操作的查询条件,则根据同步数据表的表名和同步标记查询从数据库中该业务的数据是否均已同步到主数据库,如果否,所确定的操作策略可以是进展对主数据库执行相应操作的策略,如果是,所确定的操作策略可以是允许对主数据库执行相应操作的策略。

如果原始sql查询条件的主键id配置不为空,则根据主键id查询从数据库中该业务的数据是否为空,如果不是,则判断根据主键id查询到的数据是否均已同步到主数据库,如果是,所确定的操作策略可以是允许对主数据库执行相应操作的策略,如果否,所确定的操作策略可以是进展对主数据库执行相应操作的策略。

如果根据主键id查询从数据库中该业务的数据是空,则根据where查询条件反查从数据库的业务表,判断所述业务表中是否包括待操作的数据所属业务的唯一索引,如果不包括,则确定该sql查询条件为批量操作的查询条件,则根据同步数据表的表名和同步标记查询从数据库中该业务的数据是否均已同步到主数据库,如果是,所确定的操作策略可以是允许对主数据库执行相应操作的策略,如果否,所确定的操作策略可以是进展对主数据库执行相应操作的策略。

如果所述业务表中包括待操作的数据所属业务的唯一索引,则从所述业务表中读取操作的数据所属业务的唯一索引,然后根据该唯一索引,查询从数据库中该业务的数据是否均已同步到主数据库,如果是,所确定的操作策略可以是允许对主数据库执行相应操作的策略,如果否,所确定的操作策略可以是进展对主数据库执行相应操作的策略。

在上述确定操作策略的过程中,如果所确定的操作策略为禁止对主数据库执行相应操作,可以通过抛错来表示所确定的操作策略。如果需要对主数据库执行的操作为读操作,那么在所确定的操作策略为禁止对主数据库执行相应操作时,本说明书实施例,可以允许运营服务器读取从数据库的数据。

在其他场景下,如果需要对主数据库执行的操作为写操作,待写入主数据库的数据可能是流水型数据,也可能是非流水型数据时,在确定操作策略时,可以在判断与待执行的操作对应的原始sql查询条件是否包含为待操作的数据配置的唯一索引前,先确定待操作的数据的数据类型,如果是非流水型数据,则判断与待执行的操作对应的原始sql查询条件是否包含为待操作的数据配置的唯一索引,如果是流水型数据,则根据待操作的数据所属的业务和预定的业务记录表,来确定操作策略。

场景二:该场景下的业务涉及的数据既有非流水型数据,又有流水型数据,可以根据待操作的数据的数据类型和其所属的业务来确定操作策略,也可以同时根据待操作的数据的数据类型、其所属的业务和预定的业务操作记录来确定操作策略。

在根据待操作的数据的数据类型和其所属的业务,判定待操作的数据不是流水型数据,且从数据库中与所述待操作的数据同业务的数据,已全同步到主数据库时,所确定的操作策略可以是允许对主数据库执行相应操作的策略。

在根据待操作的数据所属的业务和数据类型,判定待操作的数据不是流水型数据,且从数据库中与所述待操作的数据同业务的数据,未全同步到主数据库时,所确定的操作策略可以是禁止对主数据库执行相应操作的策略。

在根据待操作的数据的数据类型、其所属的业务和预定的业务操作记录,判定待操作的数据是流水型数据,且所述业务操作记录中没有所述待操作的数据所属的业务时,所确定的操作策略可以是允许对主数据库执行相应操作的策略。

另外在判定待操作的数据是流水型数据,且所述业务操作记录中有所述待操作的数据所属的业务时,进一步判断所述业务操作记录中属于该业务的数据是否属于主数据库,如果属于,则所确定的操作策略可以是允许对主数据库执行相应操作的策略。

如果所述业务操作记录中属于该业务的数据属于从数据库,则可以进一步通过待操作的数据所属的业务,判断从数据库中属于该业务的数据是否已全部同步到主数据库,如果已全部同步到主数据库,所确定的操作策略可以是允许对主数据库执行相应操作的策略,如果未全部同步到从数据库,所确定的操作策略可以是禁止对主数据库执行相应操作的策略。

在上述确定操作策略过程中,如果待操作的数据是流水型数据,可以在需要对数据库执行的操作是写操作时,根据待操作的数据的数据类型、其所属的业务和预定的业务操作记录来确定操作策略,禁止的操作是写操作。

此外,待操作的数据是流水型数据,所确定的操作策略为允许对主数据库执行相应操作,在对主数据库执行相应操作后,可以将所操作的数据所属的业务与数据库记录到所述业务操作记录,其中,所属的数据库为主数据库。这样可以方便下次针对流水型的数据进行操作策略的确定。

在其他场景下,如果业务涉及的数据只有流水型数据,可以根据待操作的所属的业务和预定的业务操作记录来确定操作策略,具体确定方式可以参阅上述实施例的确定方式,在此不再赘述。

以下结合附图3至6,在涉及到数据库切换的业务场景下例举说明下,切换业务系统优先访问的数据库的前后,如何处理流水型数据的写入操作。流水型数据可以指电子账户流水、订单数据之类的业务数据,涉及的业务具有像流水一样的动态过程。

在图3至6所示的各业务场景中,包括两个数据库,其中一个为数据库master,另一个为数据库slave,业务处理记录为黑名单,用于记录已操作的数据所属的业务(业务请求针对的业务)、所属的数据库(响应业务请求操作的数据库),待同步的数据的标记在同步数据表内,根据该同步数据表内记录的内容,可以确定出待同步的数据。

请参阅图3,图3所示的场景中,数据库master为源数据库,是运营服务器优先访问的初始数据库,数据库slave为目标数据库,具体可以是数据库master的冗余备份数据库或迁移数据库,数据库master中的数据还未开始向数据库slave同步,也未生成过业务处理记录(黑名单)。

实际应用中,如果用户在客户端设备登录客户端,并通过客户端向运营服务器发送针对业务a的第一业务请求(步骤301):将业务a的状态设为1,运营服务器接收到该业务请求后,运营服务器可向数据库master写入用于将业务a的状态设为1的数据(步骤s302):表示“业务a的状态为1”的字符串。然后,为了后期同步数据,可以标记写入的数据,生成图3中所示的同步数据表31。由于数据库master中的数据还未开始向数据库slave同步,运营服务器还未对数据库slave执行操作,所以数据库slave的同步数据为空,如图3中所示的表32。

此外,为了再次接收到业务a的业务请求时判断出本次操作的是数据库master,可以将业务a的标识a和数据库标识master对应记录,生成如图3中表33所示的黑名单,存储在数据库slave。

请参阅图4,图4所示的场景中,数据库master为源数据库,是运营服务器优先访问的初始数据库,数据库slave为目标数据库,具体可以是数据库master的冗余备份数据库或迁移数据库,数据库master存储有图3对应的实施例中生成的数据同步记录,如图4所示的表41,已根据表41将数据库master的至少部分数据同步到数据库slave,数据库slave是运营服务器当前化优先访问的数据库,存储有图3对应的实施例中生成的黑名单,如图4所示的表42。

实际应用中,如果用户在客户端设备登录客户端,并通过客户端向运营服务器发送针对业务b的第一业务请求(步骤401):将业务b的状态设为1,运营服务器接收到该业务请求后,运营服务器可从数据库slave中调取表42所示的黑名单(步骤402),再判断调取的黑名单中是否存在业务b(步骤403),判断结果为不存在,可以向数据库slave写入用于将业务b的状态设为1的数据(步骤s404):表示“业务b的状态为1”的字符串。然后,为了后期同步数据,可以标记写入的数据,生成图4中所示的同步数据表43。

此外,为了再次接收到业务b的业务请求时判断出本次操作的是数据库slave,可以将业务b的标识b和数据库标识slave对应记录,生成如图4中表44所示的黑名单。

请参阅图5,图5所示的场景中,数据库master为源数据库,是运营服务器优先访问的初始数据库,数据库slave为目标数据库,具体可以是数据库master的冗余备份数据库或迁移数据库,数据库master存储有图3对应的实施例中生成的数据同步记录,如图5所示的表51,已根据表51将数据库master的至少部分数据同步到数据库slave,数据库slave是运营服务器当前化优先访问的数据库,存储有图4对应的实施例中生成的同步数据记录和黑名单,分别如图5所示的表52和表53。

实际应用中,如果用户在客户端设备登录客户端,并通过客户端向运营服务器发送针对业务a的第二业务请求(步骤501):将业务a的状态设为2,运营服务器接收到该业务请求后,运营服务器可从数据库slave中调取表53所示的黑名单(步骤502),再判断调取的黑名单中是否存在业务a,以及存在时对应的服务器标识是否为slave(步骤503),判断结果是存在业务a,对应的服务器标识不是slave,此时,不允许运营服务器向数据库slave写入用于将业务a的状态设为2的数据,则拒绝该业务请求(步骤s504)。

在其他场景下,如果数据库master是运营服务器初始化优先访问的数据库,数据库slave是数据库master的冗余备份数据库或迁移数据库,数据库master存储有图3对应的实施例中生成的数据同步记录,如图5所示的表51,已根据表51将数据库master的所有需同步的数据同步到数据库slave,那么即使调取的黑名单中存在业务a,且业务a对应的服务器标识不是slave,也允许运营服务器向数据库slave写入用于将业务a的状态设为2的数据。

请参阅图6,图6所示的场景中,数据库master为源数据库,是运营服务器优先访问的初始数据库,数据库slave为目标数据库,具体可以是数据库master的冗余备份数据库或迁移数据库,已根据图3对应的实施例中生成的数据同步记录,将数据库master的至少部分数据同步到数据库slave。

数据库slave在切换为运营服务器化优先访问的数据库后,存储有图4对应的实施例中生成的黑名单和同步数据记录,分别如图6所示的表62和表63,已根据表63所示的数据同步记录,将数据库slave的至少部分数据同步到数据库master,再次切换后,数据库master是运营服务器当前优先访问的数据库。

实际应用中,如果用户在客户端设备登录客户端,并通过客户端向运营服务器发送针对业务a的第二业务请求(步骤601):将业务a的状态设为2,运营服务器接收到该业务请求后,运营服务器可从数据库slave中调取表62所示的黑名单(步骤602),再判断调取的黑名单中是否存在业务a,以及存在时对应的服务器标识是否为master(步骤603),判断结果是存在业务a,对应的服务器标识不是master,此时,运营服务器可以向数据库master写入用于将业务a的状态设为2的数据(步骤s604):表示“业务a的状态为2”的字符串。然后,为了后期同步数据,可以标记写入的数据,生成图6中所示的同步数据表61。

此外,由于也去请求记录中已存在业务a和本次操作的是数据库的标识master,可以不对黑名单进行修改。

针对图3至图6中任一项所述的应用场景,当满足预定的定时条件时,可以将数据库master中已标记的数据同步到数据库slave中,或者,将数据库slave中已标记的数据同步到数据库master中。

此外,如果业务a或业务b时需要实现幂等的业务,可以在允许对数据库master或数据库slave进行与业务请求相应的操作前,判断是否首次接收到该业务请求,如果是则允许对数据库master或数据库slave进行与业务请求相应的操作,如果不是,则禁止对数据库master或数据库slave进行与业务请求相应的操作。

由上述实施例可知:本说明书提供的数据切换方案,既可以实现同一业务在各数据库的数据一致,还可以保证数据库切换过程中的业务幂等。

与前述方法的实施例相对应,本说明书还提供了装置的实施例。

参见图7,图7是本说明书一示例性实施例示出的数据库切换装置的框图,该装置可以包括:数据标记模块710、数据同步模块720和数据库切换模块730。

其中,数据标记模块710,用于在有数据写入源数据库时,将所写的数据标记为待同步的数据,其中,源数据库为业务系统优先访问的数据库。

数据同步模块720,用于在到达预定的同步时间时,向目标数据库同步源数据库中被标记的数据。

数据库切换模块730,用于在源数据库中被标记的数据均同步到目标数据库后,将目标数据库切换为所述业务系统优先访问的数据库。

一些例子中,本说明书实施例的数据库切换装置还可以包括:

深度同步模块,用于在源数据库中被标记的数据均同步到目标数据库后,向目标数据库同步源数据库中未被标记的待同步数据;

数据库切换模块730还可以用于:

在源数据库中未被标记的待同步数据均同步到目标数据库后,将目标数据库切换为所述业务系统优先访问的数据库。

另一些例子中,本说明书实施例的数据库切换装置还可以包括:

后续标记模块,用于在目标数据库切换为所述业务系统优先访问的数据库后的预定时段内,有数据写入目标数据库时,将所写的数据标记为待同步的数据。

后续同步模块,用于在到达预定的同步时间时,向源数据库同步目标数据库中被标记的数据。

另一些例子中,本说明书实施例的数据库切换装置还可以包括:

数据类型获取模块,用于在目标数据库在所述预定时段内未出现异常运行状况,且所述预定时段后有数据写入目标数据库时,获取当前时间对应的待同步数据,其中,当前时间与所述预定时段的时间距离越大,对应的待同步数据越少。

补充标记模块,用于写入的数据与当前时间对应的待同步数据匹配时,将所写的数据标记为待同步的数据。

另一些例子中,本说明书实施例的数据库切换装置还可以包括故障切换模块、双向同步模块和数据库回切模块:

所述故障应对模块,用于在目标数据库在所述预定时段内出现异常运行状况时,重新将源数据库切换为所述业务系统优先访问的数据库,并通知所述数据同步模块仍用于在有数据写入源数据库时,将所写的数据标记为待同步的数据。

所述双向同步模块,用于在到达预定的同步时间时时,向源数据库同步目标数据库中被标记的数据,向目标数据库同步源数据库中被标记的数据。

所述数据库回切模块,用于在源数据库中被标记的数据均同步到目标数据库后,重新将目标数据库切换为所述业务系统优先访问的数据库。

作为例子,所述双向同步模块还用于在同步被标记的任一组数据时,将该组数据由乐观锁版本高的数据库同步到乐观锁版本低的数据库。

另一些例子中,源数据库为oracle数据库,目标数据库为oceanbase数据库。

另一些例子中,本说明书实施例的数据库切换装置还可以包括:

业务记录模块,用于在写入的数据是流水型数据时,将所述写入的数据所属的业务和数据库存储到预定的业务操作记录,其中,所属的数据库为源数据库。

另一些例子中,本说明书实施例的数据库切换装置还可以包括:

记录调取模块,用于在将所述写入的数据所属的业务和数据库存储到预定的业务操作记录前,调取所述业务操作记录;

记录判断模块,用于判断所述业务操作记录中是否记录有所述写入的数据所属的业务和数据库;

所述业务记录模块,用于在所述业务操作记录中没有所述写入的数据所属的业务和数据库时,将所述写入的数据所属的业务和数据库记录到预定的业务操作记录。

作为例子,所述业务操作记录存储在目标数据库中。

另一些例子中,本说明书实施例的数据库切换装置还可以包括:

策略确定模块,用于在目标数据库切换为所述业务系统优先访问的数据库后,主数据库被操作前,基于以下至少一项确定操作策略:

待操作的数据的数据类型,待操作的数据所属的业务,预定的业务操作记录;

操作执行模块,用于根据所确定的操作策略对主数据库执行相应操作;

其中,源数据库和目标数据库中被所述业务系统优先访问的数据库为主数据库,另一数据库为从数据库;

所述业务操作记录包括已操作的数据所属的业务和数据库;

所确定的操作策略为:

禁止对主数据库执行相应操作的策略;或,

允许对主数据库执行相应操作的策略。

作为例子,从数据库中与所述待操作的数据同业务的数据,已全同步到主数据库时,所确定的操作策略为允许对主数据库执行相应操作的策略;

从数据库中与所述待操作的数据同业务的数据,未全同步到主数据库时,所确定的操作策略为禁止对主数据库执行相应操作的策略。

作为例子,待操作的数据不是流水型数据,且从数据库中与所述待操作的数据同业务的数据,已全同步到主数据库时,所确定的操作策略为允许对主数据库执行相应操作的策略;

待操作的数据不是流水型数据,且从数据库中与所述待操作的数据同业务的数据,未全同步到主数据库时,所确定的操作策略为禁止对主数据库执行相应操作的策略。

作为例子,待操作的数据是流水型数据,且所述业务操作记录中没有所述待操作的数据所属的业务时,所确定的操作策略为允许对主数据库执行相应操作的策略;

本说明书实施例的数据库切换装置还可以包括:

第一记录模块,用于在主数据库被执行相应操作后,将所操作的数据所属的业务主数据库记录到所述业务操作记录,其中,所属的数据库为主数据库。

作为例子,待操作的数据是流水型数据,所述业务操作记录中有所述待操作的数据所属的业务,且所述业务操作记录中属于该业务的数据不属于主数据库时,所确定的操作策略为禁止对主数据库执行相应操作的策略;

待操作的数据是流水型数据,所述业务操作记录中有所述待操作的数据所属的业务,且所述业务操作记录中属于该业务的数据均属于主数据库时,所确定的操作策略为允许对主数据库执行相应操作的策略;

本说明书实施例的数据库切换装置还可以包括:

第二记录模块,用于在主数据库被执行相应操作后,将所操作的数据所属的业务与数据库记录到所述业务操作记录,其中,所属的数据库为主数据库。

作为例子,待操作的数据是流水型数据,所述业务操作记录中有所述待操作的数据所属的业务,所述业务操作记录中属于该业务的数据不属于主数据库,且从数据库中与所述待操作的数据同业务的数据,未全同步到主数据库时,所确定的操作策略为禁止对主数据库执行相应操作的策略;

待操作的数据是流水型数据,所述业务操作记录中记录有所述待操作的数据所属的业务,所述业务操作记录中属于该业务的数据不属于主数据库,且从数据库中与所述待操作的数据同业务的数据,全同步到主数据库时,所确定的操作策略为允许对主数据库执行相应操作的策略;

本说明书实施例的数据库切换装置还可以包括:

第三记录模块,用于在主数据库被执行相应操作后,将所操作的数据所属的业务与数据库记录到所述业务操作记录,其中,所属的数据库为主数据库。

作为例子,所述业务操作记录存储在从数据库中。

作为例子,如果待操作的数据是流水型数据,禁止的操作是写操作。

作为例子,本说明书实施例的数据库切换装置还可以包括:

数据读取模块,用于在禁止的操作为读操作时,允许在从数据库对所述待读的数据进行读操作。

作为例子,所述操作执行模块还用于:

在各操作响应的业务请求相同时,根据相同的操作策略对主数据库执行各操作;

所述操作策略为响应该业务请求对主数据库执行首次操作前,根据待操作的数据的数据类型、待操作的数据所属的业务和预定的业务操作记录中的至少一项所确定的操作策略。

上述装置中各个单元(或模块)的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。

对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元或模块可以是或者也可以不是物理上分开的,作为单元或模块显示的部件可以是或者也可以不是物理单元或模块,即可以位于一个地方,或者也可以分布到多个网络单元或模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

本说明书装置的实施例可以应用在计算机设备上。具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现中,计算机设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、个人数字助理、媒体播放器或者这些设备中的任意几种设备的组合。

装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在计算机设备的处理器将非易失性存储器等可读介质中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图8所示,为本说明书装置所在计算机设备的一种硬件结构图,除了图8所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的计算机设备通常根据该计算机设备的实际功能,还可以包括其他硬件,对此不再赘述。

在一个例子中,计算机设备的存储器可以存储处理器可执行程序指令;处理器可以耦合存储器,用于读取所述存储器存储的程序指令,并作为响应,执行如下操作:在有数据写入源数据库时,将所写的数据标记为待同步的数据,其中,源数据库为业务系统优先访问的数据库;如果到达预定的同步时间,向目标数据库同步源数据库中被标记的数据;源数据库中被标记的数据均同步到目标数据库后,将目标数据库切换为所述业务系统优先访问的数据库。

在其他实施例中,处理器所执行的操作可以参考上文方法实施例中相关的描述,在此不予赘述。

上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。

以上所述仅为本说明书的较佳实施例而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。

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