掌桥专利:专业的专利平台
掌桥专利
首页

数据表迁移的方法、装置和计算设备集群

文献发布时间:2024-01-17 01:17:49


数据表迁移的方法、装置和计算设备集群

技术领域

本申请涉及数据迁移技术领域,尤其涉及一种数据表迁移的方法、装置和计算设备集群。

背景技术

在数据库的迁移过程中,对于多张无主键表迁移到一张无主键表的场景,为了保证数据的一致性,除了采用数据库快照技术以外,还额外需要通过临时表中转汇总的方式来实现,实现迁移过程如下:

1.在待迁移的数据库中建立数据表的多个快照,多个快照各自对应迁移至的数据库的临时表,将每个快照记录的数据通过逻辑读写的方式写入迁移至的数据库对应的临时表中。

2.将迁移至的数据库中数据表的所有临时表的数据汇聚到一个数据表中。

为了保证操作的原子性,在临时表汇聚的过程,会通过数据库的事务特性来实现,即如果发生异常中断的话,数据库就会自动回滚所有操作保持第一步结束时的数据状态;换言之,将临时表的数据汇聚到一个数据表作为一个数据库的事务,这样,一旦发生中断,则需要重新汇聚临时表的数据;综上,临时表汇聚的过程执行数据库事务的过程中操作的数据的数据量可能较大,这样,一方面,容易造成数据库的压力,影响其他的业务,另一方面,若数据库事务出现中断,则需要从重新执行数据库事务,影响数据汇聚的效率。

公开于该背景技术部分的信息仅仅旨在增加对本发明的总体背景的理解,而不应当被视为承认或以任何形式暗示该信息构成已为本领域一般技术人员所公知的现有技术。

发明内容

本申请实施例提供了一种数据表迁移方法、装置和计算设备集群,临时表中的数据分成多份处理,一个数据库事务处理临时表划分后的一份数据,降低了执行数据库事务的过程中操作大量数据的可能性,一方面,能够在一定程序上降低数据库的压力,降低影响其他的业务的可能性;另一方面,若数据库事务出现中断,虽然需要从重新执行数据库事务,但是执行数据库事务的过程中操作的数据的数据量相对较小,尽可能确保数据汇聚的效率。

第一方面,本申请实施例提供了一种数据表迁移方法,包括:将源数据库中无主键的源表的数据写入目标数据库中的多个临时表;确定所述源表对应的目标表;将所述多个临时表中的第一临时表中的数据分成多份分别进行数据库事务处理;其中,所述数据库事务处理包括:从所述目标数据库中读出所述第一临时表中的一份数据,将读出的所述第一临时表中的一份数据写入所述目标表中。

本方案中,临时表中的数据分成多份处理,一个数据库事务处理临时表划分后的一份数据,降低了执行数据库事务的过程中操作大量数据的可能性,一方面,能够在一定程序上降低数据库的压力,降低影响其他的业务的可能性;另一方面,若数据库事务出现中断,虽然需要从重新执行数据库事务,但是执行数据库事务的过程中操作的数据的数据量相对较小,尽可能确保数据汇聚的效率。

在一种可能的实现方式中,所述数据库事务处理还包括:对读出的所述一份数据打上删除标记。

在一种可能的实现方式中,所述第一临时表中的一份数据分多次读出,所述数据库事务处理还包括:对于所述第一临时表中的一份数据分多次读出中的每次,在读出所述第一临时表中的数据的同时为所述读出的数据打上删除标记。

本方案中,相对于先整体读出再整体打上删除标记的方式,采用读出数据的同时为数据打上删除标记,在对数据打上删除标记的时候无需对读出数据进行查询,减少了数据操作量,确保数据处理效率。

在一种可能的实现方式中,所述数据库事务处理还包括:将打上删除标记的所述一份数据从所述目标数据库中删除打上删除标记的所述一份数据。

在一种可能的实现方式中,所述源表包括多个子表,所述多个临时表分别与所述多个子表一一对应,每个临时表写入对应的子表中的数据。

在一种可能的实现方式中,所述确定所述源表对应的目标表,包括:在所述目标数据库中不存在所述源表的目标表时;将所述多个临时表中的第二临时表,确定为目标表。

本方案中,在目标数据库不存在源表的目标表的情况下,可以将任一临时表作为目标表,从而可以在一定程度上减少临时表写入目标表的处理操作,确保数据汇聚的效率。

在一种可能的实现方式中,所述源数据库有多个,所述源表的数据为所述多个源数据库中相同表名的源表的数据。

本方案中,可以将分布式存储的数据表的数据汇聚,可以满足不同场景下的数据汇聚的需求。

第二方面,本申请实施例提供了一种数据表迁移的装置,数据表迁移的装置包括若干个模块,各个模块用于执行本发明实施例第一方面提供的数据表迁移的方法中的各个步骤,关于模块的划分在此不做限制。该数据表迁移的装置各个模块所执行的具体功能及达到的有益效果请参考本发明实施例第一方面提供的数据表迁移的方法的各个步骤的功能,在此不再赘述。

示例地,数据表迁移的装置包括:

写入模块,用于将源数据库中无主键的源表的数据写入目标数据库中的多个临时表;

目标表确定模块,用于确定所述源表对应的目标表;

事务处理模块,用于将所述多个临时表中的第一临时表中的数据分成多份分别进行数据库事务处理;其中,所述数据库事务处理包括:将从所述目标数据库中读出所述第一临时表中的一份数据写入所述目标表中。

在一种可能的实现方式中,所述数据库事务处理还包括:对读出的所述一份数据打上删除标记。

在一种可能的实现方式中,所述第一临时表中的一份数据分多次读出,所述数据库事务处理还包括:对于所述第一临时表中的一份数据分多次读出中的每次,在读出所述第一临时表中的数据的同时为所述读出的数据打上删除标记。

在一种可能的实现方式中,所述数据库事务处理还包括:将打上删除标记的所述一份数据从所述目标数据库中删除打上删除标记的所述一份数据。

在一种可能的实现方式中,所述目标表确定模块,用于在所述目标数据库中不存在所述源表的目标表时;将所述多个临时表中的第二临时表,确定为目标表。

在一种可能的实现方式中,所述源表包括多个子表,所述多个临时表分别与所述多个子表一一对应,每个临时表写入对应的子表中的数据。

在一种可能的实现方式中,所述确定所述源表对应的目标表,包括:在所述目标数据库中不存在所述源表的目标表时;将所述多个临时表中的第二临时表,确定为目标表。

在一种可能的实现方式中,所述源数据库有多个,所述源表的数据为所述多个源数据库中相同表名的源表的数据。

第三方面,本申请实施例提供了一种数据表迁移的装置,包括:至少一个存储器,用于存储程序;至少一个处理器,用于执行存储器存储的程序,当存储器存储的程序被执行时,处理器用于执行第一方面中所提供的方法。

第四方面,本申请实施例提供了一种数据表迁移的装置,其特征在于,装置运行计算机程序指令,以执行第一方面中所提供的方法。示例性的,该装置可以为芯片,或处理器。

在一个例子中,该装置可以包括处理器,该处理器可以与存储器耦合,读取存储器中的指令并根据该指令执行第一方面中所提供的方法。其中,该存储器可以集成在芯片或处理器中,也可以独立于芯片或处理器之外。

第五方面,本申请实施例提供了一种计算机存储介质,计算机存储介质中存储有指令,当指令在计算机上运行时,使得计算机执行第一方面中所提供的方法。

第六方面,本申请实施例提供了一种包含指令的计算机程序产品,当指令在计算机上运行时,使得计算机执行第一方面中所提供的方法。

附图说明

图1a是本申请实施例提供的数据处理系统的系统架构图一;

图1b是本申请实施例提供的数据处理系统的系统架构图二;

图2a是本申请实施例提供的数据库迁移的场景系示意图一;

图2b是本申请实施例提供的数据库迁移的场景系示意图二;

图2c是本申请实施例提供的数据库迁移的场景系示意图三;

图2d是本申请实施例提供的数据库迁移的场景系示意图四;

图3是本申请实施例提供的一种数据表迁移的方法的流程示意图;

图4a是图3示出的步骤360的流程示意图一;

图4b是图3示出的步骤360的流程示意图二;

图5是本申请实施例提供的数据表迁移的装置的结构示意图;

图6是本申请实施例提供的计算设备的结构示意图;

图7是本申请实施例提供的计算设备集群的结构示意图;

图8是图7示出的计算设备集群的示例的示意图。

具体实施方式

为了使本申请实施例的目的、技术方案和优点更加清楚,下面将结合附图,对本申请实施例中的技术方案进行描述。

在本申请实施例的描述中,“示例性的”、“例如”或者“举例来说”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性的”、“例如”或者“举例来说”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”、“例如”或者“举例来说”等词旨在以具体方式呈现相关概念。

在本申请实施例的描述中,术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,单独存在B,同时存在A和B这三种情况。另外,除非另有说明,术语“多个”的含义是指两个或两个以上。例如,多个系统是指两个或两个以上的系统,多个终端是指两个或两个以上的终端。

此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。

目前,为了满足业务需要,可以将已有的一个数据库系统的数据迁移到另一数据库系统中。

在一种可能的场景中,当用户想要将已有的一个数据库系统的应用的业务迁移到另一数据库系统中时,此时需要将一个数据库系统的数据迁移到另一个数据库系统。

在一种可能的场景中,当已有的一个数据库系统需要备份时,此时需要将一个数据库系统中的数据迁移到另一数据库系统。

在一种可能的场景中,若需要预先导出已有的一个数据库系统中的数据,从而便于后续随时处理时,此时需要将一个数据库系统中的数据迁移到另一数据库系统。

本申请实施例将待迁移数据所在数据库系统称为源数据库系统,将数据迁移至的数据库系统称为目标数据库系统。

图1是本申请实施例提供的数据表迁移的方法所涉及的数据处理系统的系统架构图,该数据处理系统包括至少两个数据库系统(Database System,DBS)。每个数据库系统可以为一个服务器或者由多个服务器组成的服务器集群。

示例的,图1假设数据处理系统包括源数据库系统110、目标数据库系统120和终端设备130,源数据库系统110中的数据需要迁移至目标数据库系统120。在一种可能的场景,终端设备130可以向源数据库系统110下发迁移指令,源数据库系统110将自身的数据迁移到目标数据库系统120中。

进一步地,源数据库系统110还可以包括迁移系统140。在一种可能的场景,终端设备130可以向迁移系统140下发迁移指令,迁移系统140控制源数据库系统110中的数据迁移到目标数据库系统120中。

其中,源数据库系统110可以为云数据库系统或用户的本地数据库系统;目标数据库系统120可以为云数据库系统。示例的,目标数据库系统可以为虚拟私有云(VirtualPrivateCloud,VPC)数据库系统。云数据库系统是指被部署在一个虚拟计算环境中的数据库系统。当源数据库系统110为本地数据库系统,目标数据库系统120为云数据库系统时,此时,若应用从源数据库系统切换至目标数据库系统,该过程也称迁移上云。云数据库系统可以实现按需付费、按需扩展、高可用性以及存储整合等功能。

在源数据库系统110和目标数据库系统120中,每个数据库系统包括:包括数据库管理软件和用该软件建立起来的一个或多个数据库(Database,DB)。数据库采用数据结构存储数据。数据结构可以为关系模型,关系模型以行和列的形式存储数据,可以称为表结构;对应的,按照表结构存储的数据可以称为数据表。对应的,前述数据库可以为关系型数据库(relational database),示例性地,数据库为MySQL数据库、DB2数据库、SQL Server数据库、Postgre SQL数据库。

进一步地,每个数据表根据有无主键可以分成2种类型:具有主键的数据表(即有主键表)和无主键的数据表(即无主键表)。其中,主键是数据表的唯一索引,主要的作用是确定该数据的唯一性,为在数据表中能够唯一标识一行的列的集合。比如比如学生表里有学号和姓名,姓名可能有重名的,但学号确是唯一的,则学号为主键,当从学生表中搜索一条纪录如查找一个人,就根据学号去查找,可以找出唯一的一个。其中,有主键表即数据表中包含主键的表。数据表一般拥有一个主键。在创建有主键表后,会自动为主键列创建一个全局唯一索引,可以通过主键快速定位到行,实现数据查找。其中,数据表中未指定主键的表称为无主键表,由于没有全局索引,无主键表通常使用ROWID(ROWID是数据的详细地址)来快速定位到行。

另外,数据表可以包括多个子表。比如,excel表可以包括多个子表,每个子表为一个工作表sheet。

本申请实施例将源数据库系统110中的数据库称为源数据库111,数据库管理软件称为源数据库管理软件112,源数据库111中的数据表称为源表。将目标数据库系统120中的数据库称为目标数据库121,数据库管理软件称为目标数据库管理软件122,目标数据库121中的数据表称为目标表。

需要说明的是,源数据库系统110中的源数据库111和目标数据库系统120中的目标数据库121为相同类型的数据库。一种可能的实现场景,源数据库111和目标数据库121均为关系型数据库;另外,源数据库111和目标数据库121之间可以为相同类型的关系型数据库,也可以为不同类型的关系型数据库。在源数据库111和目标数据库121为相同类型的关系型数据库时,示例性地,源数据库111和目标数据库121为MySQL数据库、DB2数据库、SQLServer数据库或Postgre SQL数据库;在源数据库111和目标数据库121为不同类型的关系型数据库时,示例性地,源数据库111可以为MySQL数据库,目标数据库121为SQL Server数据库。

在一种可能的情况,在目标表和源表中,每个数据表可以为有主键的数据表,也可以为无主键的数据表。

在相关的技术中,源数据表111中无主键的源表需要迁移到目标数据表121中。具体地迁移过程如下:

在源数据表系统110中的源数据库管理软件112在源数据库111中建立无主键的源表的N(大于等于2)个副本;一个副本为无主键的源表的一个子表的副本,比如,可以为快照。目标数据表系统120中的目标数据库管理软件122在目标数据库121中建立无主键的源表的N个临时表;N个临时表分别与N个副本一一对应。源数据表系统110中的源数据库管理软件112将源数据库111中无主键的源表的N个副本记录的数据发送到目标数据表系统120,目标数据表系统120中的目标数据库管理软件122将接收到的无主键的源表的数据写入N个临时表中。

示例性地,如图1a和图1b所示,假设源数据库111中的源表E1中的数据迁移到目标数据库111中的目标表P1。源表E1中包括3个子表,记为子表S1、子表S2和子表S3,源数据库系统110中的源数据库管理软件112建立子表S1、子表S2和子表S3各自的副本,记为副本C1、副本C2和副本C3;目标数据库系统120中的目标数据库管理软件122建立子表S1、子表S2和子表S3各自的临时表,记为临时表P1、临时表P2和临时表P3;然后,目标数据库系统120中的目标数据库管理软件122将副本C1记录的子表S1的数据写入临时表P1中,副本C2记录的子表S2的数据写入临时表P2中,副本C3记录的子表S3的数据写入临时表P3中。然后将临时表P1、P2、P3的数据汇聚到目标表T1中。

在相关技术中,在将N个临时表的数据汇聚到一个目标表的过程中,会开启一个数据库事务,该数据库事务用于将N个临时表的数据全部写入到一个目标表中,之后,删除N个临时表的数据;或者,对于任一临时表,开启一个数据库事务,数据库事务用于在将临时表的数据全部写入到一个目标表中,然后删除该临时表。之后,会提交数据库事务,即从目标数据库121中删除临时表。

需要说明的是,数据库事务可以理解为访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。数据库事务由事务开始与事务结束之间执行的全部数据库操作组成。本申请实施例中,数据库事务处理可以理解为执行数据库事务中的数据库操作,并提交数据库事务。其中,提交数据库事务可以理解为基于执行数据库事务过程得到的结果,操作数据库,这样数据库事务不可撤销。应当理解的是,执行数据库事务过程的操作是可以撤销了,而一旦数据库事务提交了,则完成了对数据库的操作,此时,数据库事务不可撤销。举例来说,在执行数据库事务的过程中,会对数据库进行一系列修改,在修改过程中,暂时不写入数据库,而是缓存起来,用户在自己的终端可以预览变化,直到全部修改完成,并经过检查确认无误后,一次性提交并写入数据库,在提交之前,所做的修改都可以取消,提交之后,就不能撤销,提交成功后其他用户才可以通过查询浏览数据的变化。

在相关技术中,数据库事务具有事务特性,事务特性为在数据库事务未完成时,若数据库事务中断,则需要回滚到数据库事务执行之前的数据状态,从头开始重新执行数据库事务。在N个临时表的数据汇聚到一个目标表的过程中,数据库事务是针对临时表为单位设计的,因此,数据库事务需要处理临时表中全部的数据,因此,执行一个数据库事务的过程操作的数据的数据量可能较大,此时,一方面,容易造成数据库的压力,影响其他的业务;另一方面,若数据库事务出现中断,则需要从重新执行数据库事务,影响数据汇聚的效率。

为了解决上述问题,本发明实施例提出了数据表迁移的方法。该方法在将源数据库111中无主键的源表的数据写入目标数据库121中的多个临时表后,对于临时表,将临时表中的数据分成多份分别进行数据库事务处理,数据库事务处理包括:从目标数据库121中读出第一临时表中的一份数据,将读出的第一临时表中的一份数据写入目标表中。这样,执行数据库事务的过程中仅仅需要处理临时表中的数据划分后的一份数据,降低了执行数据库事务的过程中操作大量数据的可能性,一方面,能够在一定程度上降低数据库的压力,降低影响其他的业务的可能性;另一方面,若数据库事务出现中断,虽然需要从重新执行数据库事务,但是执行数据库事务的过程中操作的数据的数据量相对较小,尽可能确保数据汇聚的效率。

根据一种可行的实现方式,在目标数据库121不存在源表的目标表的情况下,可以将任一临时表作为目标表,从而可以在一定程度上减少临时表写入目标表的处理操作,确保数据汇聚的效率。

根据一种可行的实现方式,数据库事务处理的过程中,在读出临时表中的一份数据时,一般分多次读出,具体地,在第1次读出数据后,同时为读出的数据打上删除标记,循环反复,直到读出临时表中的一份数据;综上,相对于读出一份数据后,再对读出的一份数据分多次查询,并对每次查询到的数据打上删除标记,本申请实施例通过在读出数据的同时为数据打上删除标记,能够减少对读出数据之后的操作,能够在一定程度上降低数据操作量,从而可以在一定程度上降低对数据库的资源占用和性能影响。

根据一种可行的实现方式,在分布式存储的场景下,源数据库系统110包括多个源数据库111,在存储数据表中的数据时,将数据表的数据存储在源数据库系统110中的多个源数据库111中的相同表名的源表中;则在本申请实施例中,可以将多个源数据库111中相同表名的源表中的数据写入目标数据库121中的多个临时表中,从而满足分布式场景下的数据汇聚的需求。

下面对本申请实施例可能应用的迁移场景进行介绍。

在一种可能的场景,源数据库系统110可以包括1个源数据库111,目标数据库系统120可以包括1个或多个目标数据库121,则将源数据库111中的数据表中的数据迁移到目标数据库121中。

在一种可能的场景,源数据库系统110可以包括多个源数据库111,采用分布式存储的方式存储数据表中的数据,则数据表中的数据存储在多个源数据库111中。

目标数据库系统120可以包括1个或多个目标数据库121。

在目标数据库系统120包括1个目标数据库121的情况下,多个源数据库111中相同表名的源表中的数据可以迁移到1个目标数据库121中。

示例性地,如图2a所示,源数据库系统110包括3个源数据库111,记为源数据库111A1、源数据库111A2、源数据库111A3,目标数据库系统120包括1个目标数据库121,记为目标数据库121B1,将源数据库111A1、源数据库111A2、源数据库111A3中的相同表名的源表中数据,迁移到目标数据库121B1。

在目标数据库系统120包括多个目标数据库121的情况下,多个源数据库111中相同表名的源表中的数据可以迁移到1个目标数据库121中,也可以迁移到任意多个目标数据库121中。如图2b所示,源数据库系统110包括3个源数据库111,记为源数据库111A1、源数据库111A2、源数据库111A3,目标数据库系统120包括2个目标数据库121,记为目标数据库121B1、目标数据库121B2、目标数据库121B3,将源数据库111A1、源数据库111A2、源数据库111A3中的相同表名的源表中数据,迁移到目标数据库121B2。

在多个源数据库111中相同表名的源表中的数据可以迁移到多个目标数据库121的情况,在一种可能的情况,1个源数据库111中的源表中的数据可以迁移到1个目标数据库121中;在另一种可能的情况,多个源数据库111中的源表中的数据可以迁移到1个目标数据库121中。

示例性地,多个源数据库111中的源表中的数据分别可以迁移到1个目标数据库121中。比如,如图2c所示,源数据库系统110包括3个源数据库111,记为源数据库111A1、源数据库111A2、源数据库111A3,目标数据库系统120包括2个目标数据库121,记为目标数据库121B1、目标数据库121B2、目标数据库121B3,将源数据库111A1中的源表中数据,迁移到目标数据库121B1,源数据库111A2中的源表中数据,迁移到目标数据库121B2,源数据库111A3中的源表中数据,迁移到目标数据库121B3。

示例性地,对于多个源数据库111,部分源数据库111的源表中的数据分别可以迁移到1个目标数据库121,部分源数据库111的源表中的数据整体迁移到1个目标数据库121;比如,如图2d所示,源数据库系统110包括3个源数据库111,记为源数据库111A1、源数据库111A2、源数据库111A3,目标数据库系统120包括2个目标数据库121,记为目标数据库121B1、目标数据库121B2、目标数据库121B3,将源数据库111A1中的源表中数据,迁移到目标数据库121B1,源数据库111A1和源数据库111A1中的相同表名的源表中数据,迁移到目标数据库121B1,源数据库111A3中的源表中数据,迁移到目标数据库121B3。

接下来,结合上述提供的数据处理系统,对本发明实施例提供的一种数据表迁移的方法进行详细介绍。本申请将以一个源数据库111的无主键的源表的数据写入一个目标数据库121的N个临时表为例,对本发明实施例的技术方案进行阐述。

图3是本申请实施例提供的数据表迁移的方法的流程示意图。本实施例可应用在目标数据库系统120上,具体可以应用在部署目标数据库系统120中的目标数据库管理软件122的电子设备上,电子设备可以为服务器或一般计算机上。

如图3所示,本申请实施例提供的数据库处理的方法至少包括如下步骤:

步骤310、将源数据库111中无主键的源表的数据写入目标数据库121中的N个临时表。

对于目标数据库121的N个临时表,可以写入1个源数据库111中的源表中的数据,也可以写入多个源数据库111中相同表名的源表的数据。如图2a和图2b所示,可以将源数据库111A1、源数据库111A2、源数据库111A3中的相同表名的源表中数据,迁移到目标数据库121B1。如图2d所示,可以将源数据库111A1、源数据库111A2中的相同表名的源表中数据,迁移到目标数据库121B1中。如图2c所示,可以将源数据库111A1中源表中数据,迁移到目标数据库121B1。如图2d所示,可以将源数据库111A3中源表中数据,迁移到目标数据库121B3中。

在一种可能的场景中,终端设备130可以向源数据库111下发迁移指令,源数据库111基于迁移指令将无主键的源表迁移到目标数据库121。

在一种可能的场景中,终端设备130可以向迁移系统140下发迁移指令,迁移系统140基于迁移指令控制源数据库系统110将源数据库111中的无主键的源表迁移到目标数据库121,目标数据库系统120将迁移来的源表的数据写入N个临时表中。

可选地,迁移指令可以指示将源数据库系统110中所有的无主键的源表迁移到目标数据库121。

可选地,迁移指令可以指示将源数据库系统110中部分的无主键的源表迁移到目标数据库121。

其中,迁移指令可以包括无主键的源表的名称。对于任一目标数据库121的N个临时表,可以写入1个源数据库111中的该名称对应的源表中的数据,也可以写入多个源数据库111中该名称对应的源表的数据。

步骤320、判断目标数据库121中是否存在无主键的源表对应的目标表;如果是,执行步骤330,如果否,执行步骤340。

具体地,迁移指令包含无主键的源表的名称,则可以扫描目标数据库121中的数据表的名称,如果匹配到迁移指令中的无主键的源表的名称。

步骤330、将N个临时表分别作为第一临时表。

需要说明的是,第一临时表可以理解为需要汇聚到目标表的临时表。

步骤340、将N个临时表中的第二临时表重命名为目标表。

在目标数据库121不存在源表的目标表的情况下,可以将任一临时表作为目标表,从而可以在一定程度上减少临时表写入目标表的处理操作,确保数据汇聚的效率。

在一些可行的实施例中,N个临时表并行处理,最先处理到步骤320的临时表重命名为目标表。

步骤350、将N个临时表中第二临时表之外的临时表分别作为第一临时表。

需要说明的是,第一临时表可以理解为需要汇聚到目标表的临时表。

步骤360、对第一临时表中的数据分成多份分别进行数据库事务处理;其中,数据库事务处理包括:从目标数据库中读出第一临时表中的一份数据,将读出的第一临时表中的一份数据写入目标表中。

本方案中,处理一个数据库事务的过程中仅仅需要处理临时表中数据划分后的一份数据,降低了执行数据库事务的过程中操作大量数据的可能性,一方面,能够在一定程度上降低数据库的压力,降低影响其他的业务的可能性;另一方面,若数据库事务出现中断,虽然需要从重新执行数据库事务,但是执行数据库事务的过程中操作的数据的数据量相对较小,尽可能确保数据汇聚的效率。

示例性地,数据库事务可以包括读取数据并将数据写入目标表这一系列的数据库操作。

进一步地,本申请实施例中,为了提高数据处理效率,在数据库事务还包括:删除读出的一份数据。示例性地,数据库事务可以包括读取数据并将数据写入目标表,删除数据这一系列的数据库操作。需要说明的是,在删除一份数据的过程中,首先需要为待删除的数据打上删除标记,在提交数据库事务的时候,将打上删除标记的数据从目标数据库121中删除。

下面对数据库事务处理进行详细描述。主要通过如下两种实现方式实现数据库事务处理。

实现方式1,如图4a所示,在上述图3所示实施例的基础上,本申请实施例中,步骤360中的数据库事务处理,具体可以包括如下步骤:

步骤3611、从目标数据库121中读出第一临时表中一份数据。

这里,一份数据包括第一临时表中的部分的记录。

在实际应用中,目标数据库系统120基于需要读出的记录条数,从目标数据库121中读出适配记录条数的多条记录,从而得到一份数据。值得注意的是,仅仅告知目标数据库系统120读取的记录条数,无需指定需要读出的数据的标记,交由目标数据库系统120按照自身读取数据的原则,选择数据并读出即可。

在如图1a所示的场景下,源数据库系统110确定需要读出的记录的记录条数后通知给目标数据库系统120。

在如图1a所示的场景下,迁移系统140确定需要读出的记录的记录条数后通知给目标数据库系统120。

步骤3612、将读出的一份数据写入目标表中。

步骤3613、对读出的一份数据打上删除标识。

步骤3614、将打上删除标记的一份数据从目标数据库121中删除。

需要说明的是,目标数据库121中的数据存储在存储介质中,将打上删除标记的一份数据从目标数据库121中删除,可以理解为从存储介质中删除数据。

需要说明的是,步骤3611和步骤3613执行的内容可以作为一个数据库事务;对应地,步骤3614可以理解为提交数据库事务,实现数据删除。

实现方式2,如图4b所示,在上述图3所示实施例的基础上,本申请实施例中,步骤360中的数据库事务处理,具体可以包括如下步骤:

步骤3621、从目标数据库121中读出第一临时表中的一份数据;其中,一份数据分多次读出,每次读出数据的同时为读出的数据打上删除标记。

一份数据包括多条记录,在实际应用中,每次读出若干条记录,比如1条记录,在读取多次后,得到一份数据。换言之,本申请实施例中,每一次读出若干条记录后同时为读取出的记录打上删除标记。

需要说明的是,对于读出一份数据之后,若需要对读出的一份数据打上删除标记,需要查询若干个记录,比如1条记录,在查询到这些记录后,对查询到的记录打上删除标记,因此,读出的一份数据需要分多次查询并对查询到的数据打上删除标识;因此,相对于读出一份数据之后,对读出的一份数据打上删除标记这样的处理操作,本申请实施例通过在读出数据的同时为数据打上删除标记,能够减少对读出数据的查询操作,能够在一定程度上降低操作的数据的数据量,从而可以在一定程度上降低对数据库的资源占用和性能影响。

需要说明的是,在实际读取数据时,会采用游标(Cursor)的方式;其中,游标(Cursor)是处理数据的一种方法,游标提供了在一次一行或者多行前进或向后浏览数据的能力。把游标当作一个指针,它可以指定任何位置,然后允许用户对指定位置的数据进行处理。

在读出数据的同时打上删除标记的方式中,在读出若干条记录时,此时游标指向读出的若干条记录,由于游标指向读出的若干条记录,此时可以直接操作读出的数据,为其打上删除标记。

在读出数据之后再打上删除标记的方式中,首先读出若干条记录时,此时游标指向读出的若干条记录。之后,在需要对读出的一份数据打上删除标记时,此时需要查询,使得游标指向查询到的数据,此时可以直接操作查询到的数据,为其打上删除标记。

因此,相对于读出的数据同时打上删除标记的方式,先整体读出再整体打上删除标记的方式增加了对读出数据的查询操作,增加了数据操作量。相对于整体读出再整体打上删除标记的方式,读出的数据同时打上删除标记的方式,能够在一定程度上降低操作的数据的数据量,从而可以在一定程度上降低对数据库的资源占用和性能影响。

步骤3622、将打上删除标记的一份数据写入目标表中。

步骤3623、将打上删除标记的一份数据从目标数据库121中删除。

详细内容参见上述步骤3615,不再赘述。

需要说明的是,步骤3621和步骤3622执行的内容可以作为一个数据库事务;对应地,步骤3623可以理解为提交数据库事务。

本方案中,采用读出数据的同时为数据打上删除标记的方式,相对于先整体读出再整体打上删除标记的方式,减少了对读出数据的查询操作,减少了数据操作量,确保数据处理效率。

本申请还提供一种数据表迁移的装置,如图5所示,包括:

写入模块501,用于将源数据库中无主键的源表的数据写入目标数据库中的多个临时表;

目标表确定模块502,用于确定所述源表对应的目标表;

事务处理模块503,用于将所述多个临时表中的第一临时表中的数据分成多份分别进行数据库事务处理;其中,所述数据库事务处理包括:将从所述目标数据库中读出所述第一临时表中的一份数据写入所述目标表中。

其中,写入模块501、目标表确定模块502和事务处理模块503均可以通过软件实现,或者可以通过硬件实现。示例性的,接下来以写入模块501为例,介绍写入模块501的实现方式。类似的,目标表确定模块502和事务处理模块503的实现方式可以参考写入模块501的实现方式。

模块作为软件功能单元的一种举例,写入模块501可以包括运行在计算实例上的代码。其中,计算实例可以包括物理主机(计算设备)、虚拟机、容器中的至少一种。进一步地,上述计算实例可以是一台或者多台。例如,写入模块501可以包括运行在多个主机/虚拟机/容器上的代码。需要说明的是,用于运行该代码的多个主机/虚拟机/容器可以分布在相同的区域(region)中,也可以分布在不同的region中。进一步地,用于运行该代码的多个主机/虚拟机/容器可以分布在相同的可用区(availability zone,AZ)中,也可以分布在不同的AZ中,每个AZ包括一个数据中心或多个地理位置相近的数据中心。其中,通常一个region可以包括多个AZ。

同样,用于运行该代码的多个主机/虚拟机/容器可以分布在同一个虚拟私有云(virtual private cloud,VPC)中,也可以分布在多个VPC中。其中,通常一个VPC设置在一个region内,同一region内两个VPC之间,以及不同region的VPC之间跨区通信需在每个VPC内设置通信网关,经通信网关实现VPC之间的互连。

模块作为硬件功能单元的一种举例,写入模块501可以包括至少一个计算设备,如服务器等。或者,写入模块501也可以是利用专用集成电路(application-specificintegrated circuit,ASIC)实现、或可编程逻辑器件(programmable logic device,PLD)实现的设备等。其中,上述PLD可以是复杂程序逻辑器件(complex programmable logicaldevice,CPLD)、现场可编程门阵列(field-programmable gate array,FPGA)、通用阵列逻辑(generic array logic,GAL)或其任意组合实现。

写入模块501包括的多个计算设备可以分布在相同的region中,也可以分布在不同的region中。写入模块501包括的多个计算设备可以分布在相同的AZ中,也可以分布在不同的AZ中。同样,写入模块501包括的多个计算设备可以分布在同一个VPC中,也可以分布在多个VPC中。其中,所述多个计算设备可以是服务器、ASIC、PLD、CPLD、FPGA和GAL等计算设备的任意组合。

需要说明的是,在其他实施例中,写入模块501可以用于执行数据表迁移的方法中的任意步骤,目标表确定模块502可以用于执行数据表迁移的方法中的任意步骤,事务处理模块503可以用于执行数据表迁移的方法中的任意步骤,写入模块501、目标表确定模块502、以及事务处理模块503负责实现的步骤可根据需要指定,通过写入模块501、目标表确定模块502、以及事务处理模块503分别实现数据表迁移的方法中不同的步骤来实现数据表迁移的装置的全部功能。

本申请还提供一种计算设备600。如图6所示,计算设备600包括:总线602、处理器604、存储器606和通信接口608。处理器604、存储器606和通信接口608之间通过总线602通信。计算设备600可以是服务器或终端设备。应理解,本申请不限定计算设备600中的处理器、存储器的个数。

总线602可以是外设部件互连标准(peripheral component interconnect,PCI)总线或扩展工业标准结构(extended industry standard architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图3中仅用一条线表示,但并不表示仅有一根总线或一种类型的总线。总线602可包括在计算设备600各个部件(例如,存储器606、处理器604、通信接口608)之间传送信息的通路。

处理器604可以包括中央处理器(central processing unit,CPU)、图形处理器(graphics processing unit,GPU)、微处理器(micro processor,MP)或者数字信号处理器(digital signal processor,DSP)等处理器中的任意一种或多种。

存储器606可以包括易失性存储器(volatile memory),例如随机存取存储器(random access memory,RAM)。处理器604还可以包括非易失性存储器(non-volatilememory),例如只读存储器(read-only memory,ROM),快闪存储器,机械硬盘(hard diskdrive,HDD)或固态硬盘(solid state drive,SSD)。

存储器606中存储有可执行的程序代码,处理器604执行该可执行的程序代码以分别实现前述写入模块501、目标表确定模块502和事务处理模块503的功能,从而实现数据表迁移的方法。也即,存储器606上存有用于执行数据库处理的方法的指令。

通信接口608使用例如但不限于网络接口卡、收发器一类的收发模块,来实现计算设备600与其他设备或通信网络之间的通信。

本申请实施例还提供了一种计算设备集群。该计算设备集群包括至少一台计算设备。该计算设备可以是服务器,例如是中心服务器、边缘服务器,或者是本地数据中心中的本地服务器。在一些实施例中,计算设备也可以是台式机、笔记本电脑或者智能手机等终端设备。

如图7所示,所述计算设备集群包括至少一个计算设备100。计算设备集群中的一个或多个计算设备100中的存储器106中可以存有相同的用于执行数据表迁移的方法的指令。

在一些可能的实现方式中,该计算设备集群中的一个或多个计算设备100的存储器106中也可以分别存有用于执行数据表迁移的方法的部分指令。换言之,一个或多个计算设备100的组合可以共同执行用于执行数据表迁移的方法的指令。

需要说明的是,计算设备集群中的不同的计算设备100中的存储器106可以存储不同的指令,分别用于执行数据表迁移的装置的部分功能。也即,不同的计算设备100中的存储器106存储的指令可以实现写入模块501、目标表确定模块502和事务处理模块503中的一个或多个模块的功能。

值得注意的是,计算设备集群设置有上述数据处理系统中的源数据库系统110和目标数据库系统120,其中,写入模块501、目标表确定模块502和事务处理模块503可以为目标数据库管理软件112中的软件模块。另外,若通过迁移系统140控制数据表的数据迁移,则计算设备集群设置有上述迁移系统140。

在一些可能的实现方式中,计算设备集群中的一个或多个计算设备可以通过网络连接。其中,所述网络可以是广域网或局域网等等。图8示出了一种可能的实现方式。如图8所示,三个计算设备600A、600B和600C之间通过网络进行连接。具体地,通过各个计算设备中的通信接口与所述网络进行连接。在这一类可能的实现方式中,计算设备600A中的存储器606中存有执行写入模块501、目标表确定模块502和事务处理模块503的功能的指令。同时,计算设备600B中的存储器606中存有目标数据库121中的数据,计算设备600C中的存储器606中存有源数据库111中的数据。

图8所示的计算设备集群之间的连接方式可以是考虑到本申请提供的数据表迁移的方法需要通过数据库大量地存储数据和对数据库中的数据进行迁移操作,因此考虑将写入模块501、目标表确定模块502和事务处理模块503实现的功能交由计算设备600A执行,确保数据处理的性能;源数据库111和目标数据库121存储在不同的计算设备600上。

应理解,图8中示出的计算设备600A的功能也可以由多个计算设备100完成。同样,计算设备600B中的目标数据库121的数据也可以由多个计算设备100分布式存储,计算设备600C中的源数据库111的数据也可以由多个计算设备100分布式存储。

本申请实施例还提供了一种包含指令的计算机程序产品。所述计算机程序产品可以是包含指令的,能够运行在计算设备上或被储存在任何可用介质中的软件或程序产品。当所述计算机程序产品在至少一个计算设备上运行时,使得至少一个计算设备执行数据表迁移的方法。

本申请实施例还提供了一种计算机可读存储介质。所述计算机可读存储介质可以是计算设备能够存储的任何可用介质或者是包含一个或多个可用介质的数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘)等。该计算机可读存储介质包括指令,所述指令指示计算设备执行数据表迁移的方法。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。

应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。

以上结合具体实施例描述了本申请的基本原理,但是,需要指出的是,在本申请中提及的优点、优势、效果等仅是示例而非限制,不能认为这些优点、优势、效果等是本公开的各个实施例必须具备的。另外,上述公开的具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本公开为必须采用上述具体的细节来实现。

本公开中涉及的器件、装置、设备、系统的方框图仅作为例示性的例子并且不意图要求或暗示必须按照方框图示出的方式进行连接、布置、配置。如本领域技术人员将认识到的,可以按任意方式连接、布置、配置这些器件、装置、设备、系统。诸如“包括”、“包含”、“具有”等等的词语是开放性词汇,指“包括但不限于”,且可与其互换使用。这里所使用的词汇“或”和“和”指词汇“和/或”,且可与其互换使用,除非上下文明确指示不是如此。这里所使用的词汇“诸如”指词组“诸如但不限于”,且可与其互换使用。

还需要指出的是,在本公开的装置、设备和方法中,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本公开的等效方案。

为了例示和描述的目的已经给出了以上描述。此外,此描述不意图将本公开的实施例限制到在此公开的形式。尽管以上已经讨论了多个示例方面和实施例,但是本领域技术人员将认识到其某些变型、修改、改变、添加和子组合。

可以理解的是,在本申请的实施例中涉及的各种数字编号仅为描述方便进行的区分,并不用来限制本申请的实施例的范围。

相关技术
  • 测试数据表的处理方法、装置、计算机设备和存储介质
  • 数据表关联的方法、装置、计算机设备和存储介质
  • 数据表处理方法、装置、计算机设备和存储介质
  • 数据表查询方法、装置、计算机设备及存储介质
  • 云计算集群资源调度方法、介质、装置和计算设备
  • 数据表迁移方法、装置、计算机设备和存储介质
  • 跨集群服务发现实现集群迁移的方法、系统及计算机设备
技术分类

06120116113748