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

表结构的修改方法、存储介质及设备

文献发布时间:2023-06-19 19:37:02


表结构的修改方法、存储介质及设备

技术领域

本发明涉及数据库技术领域,特别是涉及一种表结构的修改方法、存储介质及设备。

背景技术

随着数据量的变化、业务的发展,数据架构的调整,特别是表结构的变更变的越来越常见。现有技术中,通过alter table之类的DDL语句即可完成。然而当执行alter table语句时,数据库会对目标表加独占锁,阻塞该表上的所有操作。当表中数据量较为庞大时,阻塞时间将会相当长,导致与该表相关的服务长时间不可用,严重影响用户的使用体验,因此还有待改善。

发明内容

本发明的一个目的是要提供一种能够克服上述问题或者部分地解决上述问题的表结构的修改方法、存储介质及设备。

本发明的一个进一步的目的是要防止出现数据丢失的问题。

特别地,本发明提供了一种表结构的修改方法,包括:

对待修改的目标表加变更锁;

将所述目标表的并发操作信息记录至日志表中;

创建临时表,根据预置的修改类型修改所述临时表的结构;

将所述目标表的数据拷贝至所述临时表;

升级所述变更锁为独占锁;

根据所述日志表中的并发操作信息修改所述临时表的数据;

调换所述目标表与所述临时表的信息。

可选地,所述将所述目标表的数据拷贝至所述临时表的步骤包括:

扫描所述目标表的历史快照得到备份数据;

根据所述临时表的结构对所述备份数据进行数据处理;

将处理后的备份数据插入至所述临时表。

可选地,根据所述临时表的结构对所述备份数据进行数据处理的步骤包括:

根据所述临时表的结构对所述备份数据的各行数据相应地进行类型转换、投影或默认值填充。

可选地,在将所述目标表的数据拷贝至所述临时表的步骤之前,还包括:

判断修改所述目标表的所有事务是否结束;

若是,将所述目标表的数据拷贝至所述临时表。

可选地,所述并发操作信息包括插入操作、更新操作和删除操作,根据所述日志表中的并发操作信息修改所述临时表的数据的步骤包括:

根据所述插入操作将新增的数据进行类型转换、投影或者默认值填充后插入至所述临时表中;

根据所述更新操作或所述删除操作在所述临时表中查找目标行的数据,对所述目标行的数据进行更新或删除。

可选地,在将所述目标表的并发操作信息记录至日志表中的步骤之前,还包括:

判断所述目标表上是否存在日志表;

若是,则清空所述日志表;

若否,则创建所述日志表,并将所述日志表以独立事务提交。

可选地,调换所述目标表和所述临时表的信息的步骤包括:

调换所述目标表和所述临时表的表名、附属关系及依赖对象。

可选地,在调换所述目标表和所述临时表的信息的步骤之后,还包括:

删除所述临时表和所述日志表。

根据本发明的另一个方面,本发明还提供了一种机器可读存储介质,其上存储有机器可执行程序,所述机器可执行程序被处理器执行时实现根据上述任一项所述的表结构的修改方法。

根据本发明的又一个方面,本发明还提供了一种计算机设备,包括存储器、处理器及存储在所述存储器上并在所述处理器上运行的机器可执行程序,并且所述处理器执行所述机器可执行程序时实现根据上述任一项所述的表结构的修改方法。

本发明的表结构的修改方法,首先对待修改的目标表加变更锁,变更锁锁定期间允许对目标表进行并发查询、插入、更新和删除操作,然后将目标表的并发操作信息记录至日志表中,接着创建临时表,根据预置的修改类型修改临时表的结构,使得临时表的结构符合要求,然后将目标表的数据拷贝至临时表,再升级变更锁为独占锁,而后根据日志表中的并发操作信息修改临时表的数据,最后调换目标表与临时表的信息,从而得到修改后的目标表。通过此种方法,可以提高数据库的并发操作能力,降低业务阻塞时长,改善用户的使用体验。

进一步地,本发明的表结构的修改方法,在将目标表的数据拷贝至临时表的步骤之前,可以先判断修改目标表的所有事务是否结束,若修改目标表的所有事务均结束,再将目标表的数据拷贝至临时表。如此,可以防止拷贝过程中出现数据丢失的问题,保证了数据拷贝的可靠性。

根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述以及其他目的、优点和特征。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1是根据本发明一个实施例的表结构的修改方法的流程图;

图2是根据本发明一个实施例的表结构的修改方法中将目标表的并发操作信息记录至日志表中的步骤之前的示意性流程图;

图3是根据本发明一个实施例的表结构的修改方法中将目标表的数据拷贝至临时表的步骤的流程图;

图4是根据本发明一个实施例的机器可读存储介质的示意图;

图5是根据本发明一个实施例的计算机设备的示意图。

具体实施方式

本领域技术人员应当理解的是,下文所描述的实施例仅仅是本发明的一部分实施例,而不是本发明的全部实施例,该一部分实施例旨在用于解释本发明的技术原理,并非用于限制本发明的保护范围。基于本发明提供的实施例,本领域普通技术人员在没有付出创造性劳动的情况下所获得的其它所有实施例,仍应落入到本发明的保护范围之内。

需要说明的是,在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。

图1是根据本发明一个可选实施例的表结构的修改方法的流程图,参照图1,本发明的表结构的修改方法至少包括以下步骤S102至步骤S114。

步骤S102,对待修改的目标表加变更锁。

步骤S104,将目标表的并发操作信息记录至日志表中。

步骤S106,创建临时表,根据预置的修改类型修改临时表的结构。

步骤S108,将目标表的数据拷贝至临时表。

步骤S110,升级变更锁为独占锁。

步骤S112,根据日志表中的并发操作信息修改临时表的数据;

步骤S114,调换目标表与临时表的信息。

应用本发明的技术方案,首先对待修改的目标表加变更锁,变更锁锁定期间允许对目标表进行并发查询、插入、更新和删除操作,然后将目标表的并发操作信息记录至日志表中,接着创建临时表,根据预置的修改类型修改临时表的结构,使得临时表的结构符合要求,然后将目标表的数据拷贝至临时表,再升级变更锁为独占锁,而后根据日志表中的并发操作信息修改临时表的数据,最后调换目标表与临时表的信息,从而得到修改后的目标表。通过此种方法,可以提高数据库的并发操作能力,降低业务阻塞时长,改善用户的使用体验。

表结构的变更包括列的增删、列类型的修改等,变更期间会影响其他并发操作的输入或者输出,因此表结构的变更和查询、更新、插入、删除等操作在本质上是冲突的。前文提到,常规的alter table(修改表语句)操作必须对目标表加独占锁,通过阻塞目标表上的其他并发操作,从而保证表结构的修改能顺利进行。

在线修改表结构指的是,在不阻塞目标表上的并发查询、更新、插入和删除操作的情况下对目标表的结构进行变更。在线修改表结构在事务型数据库中是一个重要的应用场景,可以在应用层通过不同的技术来实现表结构的在线变更,但是在数据库端实现方案效率更高,且能很大程度上增强数据库的能力。

为了解决表结构变更对业务长时间阻塞的问题,本发明对修改表结构的操作进行分解,将耗时最长的表结构修改及数据变更分解出来,作为表结构修改的准备阶段,在此期间变更锁可以允许目标表上的并发操作。当最耗时的准备工作完成后,再获取必须的独占锁,进行最后的提交操作。这样,可以极大地缩短整个过程中独占锁的持有时间,最大程度地降低对业务的阻塞时间。

在上文步骤S104中,参照图2,在将目标表的并发操作信息记录至日志表中的步骤之前还可以包括:

步骤S1031,判断目标表上是否存在日志表,若判断结果为是,执行步骤S1032,若判断结果为否,执行步骤S1033。

步骤S1032,清空日志表。

步骤S1033,创建日志表,并将日志表以独立事务提交。

可以理解,在对目标表加变更锁之后,对目标表的并发操作会带来数据的增量变化,为此需要对增量变化的数据进行记录和处理,否则会存在数据丢失的风险。本发明采用日志表的形式进行记录和处理。当目标表上存在日志表时,先将日志表中的内容清空,日志表中的内容包括操作类型、事务信息和数据行标识符等。有了日志表以后,对目标表的操作均会被记录到日志表中。若没有日志表,可以为目标表专门创建一个日志表,创建日志表的逻辑需要以独立事务提交,后续对目标表的操作均记录到该日志表中。

在上文步骤S106中,可以将目标表作为模板来创建临时表,复制包括目标表的列定义、索引、约束等,然后根据预置的修改类型修改临时表的结构,使得临时表的结构能够满足要求。

在上文步骤S108中,参照图3,将目标表的数据拷贝至临时表的步骤可以包括:

步骤S1081,扫描目标表的历史快照得到备份数据。

步骤S1082,根据临时表的结构对备份数据进行数据处理。

步骤S1083,将处理后的备份数据插入至临时表。

可以理解,此时临时表的结构为变更后的状态,其与目标表的结构存在差异,因此,在将目标表的数据拷贝至临时表的过程中,需要先对扫描得到的备份数据进行数据处理,使备份数据符合临时表的结构,最后将符合要求的备份数据插入至临时表中。

具体地,根据临时表的结构对备份数据进行数据处理的步骤可以使根据临时表的结构对备份数据的各行数据相应地进行类型转换、投影或默认值填充。

在上文步骤S108中,在将目标表的数据拷贝至临时表的步骤之前还可以判断修改目标表的所有事务是否结束,若修改目标表的所有事务均结束,再将目标表的数据拷贝至临时表。例如,在修改目标表的所有事务均结束后,可以获取一个拷贝指令,然后基于该拷贝指令将目标表的数据拷贝至临时表。如此,可以防止拷贝过程中出现数据丢失的问题,保证了数据拷贝的可靠性。

在上文步骤S112中,并发操作信息包括但不限于插入操作、更新操作和删除操作。根据日志表中的并发操作信息修改临时表的数据的步骤可以是根据插入操作将新增的数据进行类型转换、投影或者默认值填充后插入至临时表中,根据更新操作或删除操作在临时表中查找目标行的数据,对目标行的数据进行更新或删除。如此,可以将日志表中的并发操作信息完整地转换至临时表中。

值得注意的是,并发操作信息是按照目标表中各项操作记录生成的先后顺序依次存储在日志表中的,在讲日志表中的并发操作信息转换至临时表的过程中,应按照顺序依次转换,防止数据出现紊乱。

在上文步骤S114中,调换目标表和临时表的信息的步骤可以是调换目标表和临时表的表名、附属关系及依赖对象,当目标表与临时表的表换、附属关系及依赖对象均调换完成后,原来的临时表即为修改后的目标表。

由于通过前述操作已经获取修改后的目标面,因此在调换目标表和临时表的信息的步骤之后,可以删除当前的临时表和日志表,以减少空间占用,提交事务,完成整个在线表结构变更过程。

总体上来说,本发明通过对修改表结构的过程进行分解,将目标表的修改操作分解为两个事务来完成:

在第一个事务中,在目标表上创建一个日志表,后续对目标表的所有更新、插入和删除都会被记录到该日志表中。为了保证并发操作信息能够被完全记入日志表中,创建日志表的逻辑需要以独立事务进行提交。

在第二个事务中,对目标表加变更锁,以目标表为模板创建临时表,等待所有可能修改目标表的事务结束,然后获取历史快照,并基于此快照对目标表进行扫描,将得到的数据插入到临时表中。当完成目标表中基础数据的导入后,升级目标表的锁为独占锁,然后根据日志表中的数据将目标表上并发事务的操作同步到临时表上,最后交换临时表和目标表的信息,删除临时表和日志表,从而完成事务提交。

可以理解,修改表结构必定会阻塞其他并发操作,为降低阻塞时长,本发明将整个修改过程中最耗时的部分分解出来,作为整个变更的准备阶段,并新增日志表的处理逻辑,用于同步其他并发操作带来的增量数据。通过两个事务组合实现了在线变更表结构,提高了数据库的并发操作能力,有效降低了修改表结构带来的业务阻塞时长。

此外,本发明主要描述了以日志表的形式处理目标上并发操作带来的增量数据,在一些其他实施例中,还可以采用解析预写日志的方式处理目标上并发操作带来的增量数据。采用日志表记录增量数据时,本发明采用了内置到目标的更改流程中,在其他一些实施例中,也可以采用触发器的方式实现日志表数据的记录。

本实施例还提供了一种机器可读存储介质10和计算机设备20。图4是根据本发明一个实施例的机器可读存储介质10的示意图。图5是根据本发明一个实施例的计算机设备20的示意图。

机器可读存储介质10其上存储有机器可执行程序11,机器可执行程序11被处理器执行时实现上述任一实施例的表结构的修改方法。

计算机设备20可以包括存储器210、处理器220及存储在存储器210上并在处理器220上运行的机器可执行程序11,并且处理器220执行机器可执行程序11时实现上述任一实施例的表结构的修改方法。

需要说明的是,在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何机器可读存储介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。

就本实施例的描述而言,机器可读存储介质10可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,机器可读存储介质10甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。

应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。

计算机设备20可以是例如服务器、台式计算机、笔记本式计算机、平板计算机或智能手机。在一些示例中,计算机设备20可以是云计算节点。计算机设备20可以在由计算机系统执行的计算机系统可执行指令(诸如程序模块)的一般语境下描述。通常,程序模块可以包括执行特定的任务或者实现特定的抽象数据类型的例程、程序、目标程序、组件、逻辑、数据结构等。计算机设备50可以在通过通信网络链接的远程处理设备执行任务的分布式云计算环境中实施。在分布式云计算环境中,程序模块可以位于包括存储设备的本地或远程计算系统存储介质上。

计算机设备20可以包括适于执行存储的指令的处理器220、在操作期间为所述指令的操作提供临时存储空间的存储器210。处理器220可以是单核处理器、多核处理器、计算集群或任何数量的其他配置。存储器210可以包括随机存取存储器(RAM)、只读存储器、闪存或任何其他合适的存储系统。

处理器220可以通过系统互连(例如PCI、PCI-Express等)连接到适于将计算机设备20连接到一个或多个I/O设备(输入/输出设备)的I/O接口(输入/输出接口)。I/O设备可以包括例如键盘和指示设备,其中指示设备可以包括触摸板或触摸屏等等。I/O设备可以是计算机设备20的内置组件,或者可以是外部连接到计算设备的设备。

处理器220也可以通过系统互连链接到适于将计算机设备20连接到显示设备的显示接口。显示设备可以包括作为计算机设备20的内置组件的显示屏。显示设备还可以包括外部连接到计算机设备20的计算机监视器、电视机或投影仪等。此外,网络接口控制器(network interface controller,NIC)可以适于通过系统互连将计算机设备20连接到网络。在一些实施例中,NIC可以使用任何合适的接口或协议(诸如因特网小型计算机系统接口等)来传输数据。网络可以是蜂窝网络、无线电网络、广域网(WAN))、局域网(LAN)或因特网等等。远程设备可以通过网络连接到计算设备。

本实施例提供的流程图并不旨在指示方法的操作将以任何特定的顺序执行,或者方法的所有操作都包括在所有的每种情况下。此外,方法可以包括附加操作。在本实施例方法提供的技术思路的范围内,可以对上述方法进行附加变化。

至此,本领域技术人员应认识到,虽然本文已详尽示出和描述了本发明的多个示例性实施例,但是,在不脱离本发明精神和范围的情况下,仍可根据本发明公开的内容直接确定或推导出符合本发明原理的许多其他变型或修改。因此,本发明的范围应被理解和认定为覆盖了所有这些其他变型或修改。

相关技术
  • 一种服务器主机名修改方法、装置、设备及可读存储介质
  • 配置文件修改方法、装置、计算机设备和存储介质
  • 保单信息批量修改方法、装置、计算机设备及存储介质
  • 存储设备测试方法、存储设备测试系统及存储介质
  • 一种后端存储设备的管理方法、装置、设备以及存储介质
  • 表结构修改方法、装置、设备及计算机可读存储介质
  • 自动修改数据库集群中表结构的方法、装置及存储介质
技术分类

06120115973111