CN104965879B - 修改数据表的表结构的方法及装置 - Google Patents
修改数据表的表结构的方法及装置 Download PDFInfo
- Publication number
- CN104965879B CN104965879B CN201510325164.6A CN201510325164A CN104965879B CN 104965879 B CN104965879 B CN 104965879B CN 201510325164 A CN201510325164 A CN 201510325164A CN 104965879 B CN104965879 B CN 104965879B
- Authority
- CN
- China
- Prior art keywords
- data
- original
- interim
- original table
- trigger
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开揭示了一种修改数据表的表结构的方法及装置,属于数据库领域。该方法包括:创建与原始表对应的临时表;临时表是相对于原始表修改了表结构的表;将原始表中的数据行复制到临时表;在复制过程中接收到数据处理请求时,通过触发器技术将数据处理请求在原始表中的处理操作,同步至临时表中;在复制完毕后,采用临时表代替原始表。本公开在将原始表中的数据行复制到临时表的过程中,通过触发器技术将数据处理请求在原始表中的处理操作同步至临时表中,解决了相关技术中需要终止原始表提供的业务来保证修改表结构的过程中原始表与临时表的数据一致性的问题;达到不需要终止原始表提供的业务,也能保持原始表与临时表的数据一致性的效果。
Description
技术领域
本公开涉及数据库领域,特别涉及一种修改数据表的表结构的方法及装置。
背景技术
在数据库的日常运维工作中,存在修改数据表的表结构的需求,比如,原始表结构中的每行数据有4个数据项,修改后的表结构中的每行数据增加了一个数据项。
发明内容
为了克服相关技术中存在的问题,本公开提供一种修改数据表的表结构的方法及装置。该技术方案如下:
根据本公开实施例的第一方面,提供一种修改数据表的表结构的方法,该方法包括:
创建与原始表对应的临时表;该临时表是相对于该原始表修改了表结构的表;
将该原始表中的数据行复制到该临时表中;
在该复制过程中接收到数据处理请求时,通过触发器技术将该数据处理请求在该原始表中的处理操作,同步至该临时表中;
在该复制过程完毕后,采用该临时表代替该原始表。
在一个可能的实施例中,该方法还包括:
预先为该原始表设置插入触发器、更新触发器和删除触发器中的至少一种触发器;
该插入触发器用于将该原始表T中插入的数据同步插入至该临时表中;
该更新触发器用于将该原始表T中更新的数据同步更新至该临时表中;
该删除触发器用于将该原始表T中删除的数据同步从该临时表中删除。
在一个可能的实施例中,该通过触发器技术将该数据处理请求在该原始表中的处理操作,同步至该临时表中,包括:
若该数据处理请求是在该原始表中针对第一数据的插入请求,在将该第一数据插入该原始表后,通过插入触发器将该第一数据覆盖插入至该临时表。
在一个可能的实施例中,该通过触发器技术将该数据处理请求在该原始表中的处理操作,同步至该临时表中,包括:
若该数据处理请求是在该原始表中针对第二数据的更新请求,在将该第二数据更新入该原始表后,通过更新触发器将该第二数据覆盖插入至该临时表。
在一个可能的实施例中,该通过触发器技术将该数据处理请求在该原始表中的处理操作,同步至该临时表中,包括:
若该数据处理请求是在该原始表T中针对第三数据的删除请求,在将该第三数据从该原始表T删除后,通过删除触发器将该第三数据从该临时表中删除。
在一个可能的实施例中,该将该原始表中的数据复制到该临时表中,包括:
将该原始表中的数据分批复制到该临时表中。
在一个可能的实施例中,该将该原始表中的数据分批复制到该临时表中,包括:
设定本批次需要复制的数据行数量;
根据该数据行数量完成本批次复制过程;
若在该本批次复制过程结束后还存在需要复制的数据行,则休眠预定时长后,进入下一批次的复制过程;
该下一批次复制的数据行的起始地址与该本批次复制的数据行的结束地址相衔接。
在一个可能的实施例中,该方法还包括:
在该本批次复制过程结束后,检测该原始表中的连接数是否超过预设值;
若超过该预设值,则动态延长休眠时的该预定时长。
根据本公开实施例的第二方面,提供一种修改数据表的表结构的装置,该装置包括:
创建模块,被配置为创建与原始表对应的临时表;该临时表是相对于该原始表修改了表结构的表;
复制模块,被配置为将该原始表中的数据行复制到该临时表中;
同步模块,被配置为在该复制过程中接收到数据处理请求时,通过触发器技术将该数据处理请求在该原始表中的处理操作,同步至该临时表中;
代替模块,被配置为在该复制过程完毕后,采用该临时表代替该原始表。
在一个可能的实施例中,该装置还包括:
设置模块,被配置为预先为该原始表设置插入触发器、更新触发器和删除触发器中的至少一种触发器;
该插入触发器用于将该原始表T中插入的数据同步插入至该临时表中;
该更新触发器用于将该原始表T中更新的数据同步更新至该临时表中;
该删除触发器用于将该原始表T中删除的数据同步从该临时表中删除。
在一个可能的实施例中,该同步模块,还被配置为当该数据处理请求是在该原始表中针对第一数据的插入请求时,在将该第一数据插入该原始表后,通过插入触发器将该第一数据覆盖插入至该临时表。
在一个可能的实施例中,该同步模块,还被配置为当该数据处理请求是在该原始表中针对第二数据的更新请求时,在将该第二数据更新入该原始表后,通过更新触发器将该第二数据覆盖插入至该临时表。
在一个可能的实施例中,该同步模块,还被配置为当该数据处理请求是在该原始表T中针对第三数据的删除请求时,在将该第三数据从该原始表T删除后,通过删除触发器将该第三数据从该临时表中删除。
在一个可能的实施例中,该复制模块,还被配置为将该原始表中的数据分批复制到该临时表中。
在一个可能的实施例中,该复制模块,还包括:
设定子模块,被配置为设定本批次需要复制的数据行数量;
复制子模块,被配置为根据该数据行数量完成本批次复制过程;
休眠子模块,被配置为若在该本批次复制过程结束后还存在需要复制的数据行,则休眠预定时长后,进入下一批次的复制过程;
该下一批次复制的数据行的起始地址与该本批次复制的数据行的结束地址相衔接。
在一个可能的实施例中,该复制模块,还包括:
检测子模块,被配置为在该本批次复制过程结束后,检测该原始表中的连接数是否超过预设值;
延时子模块,被配置为若超过该预设值,则动态延长休眠时的该预定时长。
根据本公开实施例的第三方面,提供一种修改数据表的表结构的装置,该装置包括:
处理器;
用于存储该处理器可执行指令的存储器;
其中,该处理器被配置为:
创建与原始表对应的临时表;该临时表是相对于该原始表修改了表结构的表;
将该原始表中的数据行复制到该临时表中;
在该复制过程中接收到数据处理请求时,通过触发器技术将该数据处理请求在该原始表中的处理操作,同步至该临时表中;
在该复制过程完毕后,采用该临时表代替该原始表。
本公开的实施例提供的技术方案可以包括以下有益效果:
通过在将原始表中的数据行复制到修改了表结构形成的临时表的过程中,通过触发器技术将接收到的数据处理请求在原始表中的处理操作,同步至临时表中,并在复制完成后使用临时表代替原始表;解决了相关技术中需要终止原始表提供的业务来保证修改表结构的过程中原始表与临时表的数据一致性的问题;达到了不需要终止原始表提供的业务,也能通过触发器技术保持原始表与临时表的数据一致性,使得修改表结构的过程中原始表依然可以向外提供业务的效果。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并于说明书一起用于解释本公开的原理。
图1是根据一示例性实施例示出的一种修改数据表的表结构的方法的流程图;
图2是根据另一示例性实施例示出的一种修改数据表的表结构的方法的流程图;
图3A是根据再一示例性实施例示出的一种修改数据表的表结构的方法的流程图;
图3B是根据一示例性实施例示出的一种数据分批复制方法的流程图;
图4是根据一示例性实施例示出的修改数据表的表结构的装置的框图;
图5是根据另一示例性实施例示出的修改数据表的表结构的装置的框图;
图6是根据另一示例性实施例示出的一种修改数据表的表结构的装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
在需要修改数据表的表结构时,常见的一种修改方法为:按照原始表的表结构和修改数据库表语句,新建一个不可见的临时表,该临时表是表结构修改后的表;然后在原始表上设置写锁定,阻塞原始表上所有的数据处理操作;将原始表中的数据对应复制到临时表中;重新命名原始表为旧表,重新命名临时表为原始表,删除旧表;解除对原始表的写锁定。
显然这种修改方法需要终止原始表提供的业务,来保证修改表结构的过程中原始表与临时表的数据一致性。而在一些对实时性要求比较高的业务系统中,如果原始表所在的数据库终止业务,将会极大程度地影响业务系统的正常运行。为此,本公开提供如下实施例。
请参见图1所示,其是根据一示例性实施例示出的一种修改数据表的表结构的方法的流程图,包括以下步骤。
在步骤101中,创建与原始表对应的临时表,该临时表是相对于原始表修改了表结构的表。
在步骤102中,将原始表中的数据行复制到临时表中。
在步骤103中,在复制过程中接收到数据处理请求时,通过触发器技术将数据处理请求在原始表中的处理操作,同步至临时表中。
触发器(英文:Trigger)技术是诸如MySQL数据库之类的数据中提供的一种技术。触发器可以在数据表中的数据发生增、删和改等事件变化时自动强制执行预定代码语句。
在步骤104中,在复制过程完毕后,采用临时表代替原始表。
综上所述,本公开实施例中提供的修改数据表的表结构的方法,通过在将原始表中的数据行复制到修改了表结构形成的临时表的过程中,通过触发器技术将接收到的数据处理请求在原始表中的处理操作,同步至临时表中,并在复制完成后使用临时表代替原始表;解决了相关技术中需要终止原始表提供的业务来保证修改表结构的过程中原始表与临时表的数据一致性的问题;达到了不需要终止原始表提供的业务,也能通过触发器技术保持原始表与临时表的数据一致性,使得修改表结构的过程中原始表依然可以向外提供业务的效果。
请参见图2所示,其是根据另一示例性实施例示出的一种修改数据表的表结构的方法的流程图,该方法包括以下步骤。
在步骤201中,创建与原始表对应的临时表。
原始表的表结构可以如表1所示。
键值 | 日期 | 用户 | 单价 | 数量 |
1 | 4月1日 | 小王 | 10 | 30 |
2 | 4月1日 | 小红 | 20 | 5 |
3 | 4月2日 | 小王 | 10 | 10 |
4 | 4月2日 | 小李 | 10 | 20 |
5 | 4月3日 | 小张 | 20 | 10 |
6 | 4月3日 | 小李 | 30 | 10 |
7 | 4月3日 | 小红 | 30 | 20 |
8 | 4月4日 | 小张 | 30 | 30 |
表1
临时表是相对于原始表修改了表结构的表,临时表在被创建时,仅具有表结构,并未存储任何数据。
以原始表为表1为例进行说明,可以将原始表中的表结构增加“物品”一栏,此时,临时表的表结构可以如表2所示。
键值 | 日期 | 用户 | 单价 | 数量 | 物品 |
表2
在步骤202中,预先为原始表设置插入触发器、更新触发器和删除触发器中的至少一种触发器。
本实施例以同时设置上述三种触发器来举例说明。
插入触发器用于将原始表T中插入的数据同步插入至临时表中。
更新触发器用于将原始表T中更新的数据同步更新至临时表中。
删除触发器用于将原始表T中删除的数据同步从临时表中删除。
需要说明的是,设置插入触发器的伪代码可以如下:
CREATE TRIGGER mk_idx_insert AFTER INSERT ON src_db.old_table//创建一个在数据被插入原始表时触发的插入触发器。
FOR EACH ROW
REPLACE INTO dst_db.new_table(id,type,content,ctime)VALUES(NEW.id,NEW.type,NEW.content,NEW.ctime)。//将插入原始表的数据覆盖插入至临时表中。
需要说明的是,设置更新触发器的伪代码可以如下:
CREATE TRIGGER mk_idx_update AFTER UPDATE ON src_db.old_table//创建一个在原始表中数据被更新时触发的更新触发器。
FOR EACH ROW
REPLACE INTO dst_db.new_table(id,type,content,ctime)VALUES(NEW.id,NEW.type,NEW.content,NEW.ctime)。//将原始表中更新的数据覆盖插入至临时表中。
需要说明的是,设置删除触发器的伪代码可以如下:
CREATE TRIGGER mk_idx_delete AFTER DELETE ON src_db.old_table//创建一个在原始表中的数据被删除时触发的删除触发器。
FOR EACH ROW
DELETE IGNORE FROM dst_db.new_table WHERE dst_db.new_table.id=OLD.id。//将原始表中删除的数据从临时表中删除,如果发生删除错误事件,则忽略该错误事件。
在步骤203中,将原始表中的数据行复制到临时表中。
在步骤204中,在复制过程中接收到数据处理请求时,若数据处理请求是在原始表中针对第一数据的插入请求,在将第一数据插入原始表后,通过插入触发器将第一数据覆盖插入至临时表。
在服务器将原始表中的数据复制到临时表的复制过程中,由于原始表并未停止向用户提供业务,因此服务器依然会接收用户发送的数据处理请求,该数据处理请求可以是插入请求、更新请求、删除请求等等。
若该数据处理请求为在原始表中针对第一数据的插入请求,则在将第一数据插入原始表后,会触发插入触发器。然后,该插入触发器执行将第一数据覆盖插入至临时表的指令。
该第一数据可以为:
9 | 4月10日 | 小林 | 10 | 30 |
需要说明的是,存在某种可能的情况下,服务器在将第一数据插入原始表之前,该第一数据已经从原始表复制入临时表中。
为了保证数据的一致性,服务器通过插入触发器在临时表中采用覆盖插入操作插入该第一数据。
在步骤205中,在复制过程中接收到数据处理请求时,若数据处理请求是在原始表中针对第二数据的更新请求,在将第二数据更新入原始表后,通过更新触发器将第二数据覆盖插入至临时表。
若该数据处理请求是在原始表中针对第二数据的更新请求,在将第二数据更新入原始表后,会触发更新触发器。然后,服务器通过更新触发器将第二数据覆盖插入至临时表。
该第二数据可以为:
1 | 4月1日 | 小王 | 10 | 40 |
需要说明的是,当服务器将第二数据更新入原始表时,第二数据对应的原始数据可能已经被复制入临时表中,也可能还未被复制入临时表中。
为了保证数据的一致性,服务器通过更新触发器在临时表中采用覆盖插入操作插入该第二数据。
在步骤206中,在复制过程中接收到数据处理请求时,若数据处理请求是在原始表T中针对第三数据的删除请求,则在将第三数据从原始表T删除后,通过删除触发器将第三数据从临时表中删除。
若数据处理请求是在原始表中针对第三数据的删除请求,则会触发删除触发器。在将第三数据从原始表删除后,服务器通过删除触发器将第三数据从临时表中删除。
需要说明的是,服务器在将第三数据从原始表删除时,第三数据可能已经被复制至临时表中,也可能还未被复制至临时表中。
如果第三数据还未被复制至临时表中,则有可能会出现删除错误事件。如果出现删除错误事件,则忽略该删除错误事件。
在步骤207中,在复制过程完毕后,采用临时表代替原始表。
服务器在完成本批次的复制过程后,若检测到原始表中已经不存在需要复制入临时表中的数据,则将原始表重新命名为旧表,再将临时表命名为原始表作为新表使用,从而完成对原始表的表结构的修改。
可选地,旧表可以删除。
综上所述,本公开实施例中提供的修改数据表的表结构的方法,通过在将原始表中的数据行复制到修改了表结构形成的临时表的过程中,通过触发器技术将接收到的数据处理请求在原始表中的处理操作,同步至临时表中,并在复制完成后使用临时表代替原始表;解决了相关技术中需要终止原始表提供的业务来保证修改表结构的过程中原始表与临时表的数据一致性的问题;达到了不需要终止原始表提供的业务,也能通过触发器技术保持原始表与临时表的数据一致性,使得修改表结构的过程中原始表依然可以向外提供业务的效果。
请参见图3A所示,其是根据再一示例性实施例示出的一种修改数据表的表结构的方法的流程图,包括以下步骤。
在步骤301中,创建与原始表对应的临时表。
原始表的表结构可以如表1所示。
临时表是相对于原始表修改了表结构的表,临时表在被创建出来时,仅具有表结构,并未存储任何数据。
以原始表为表1为例进行说明,可以将原始表中的表结构增加“物品”一栏,此时,临时表的表结构可以如表2所示。
在步骤302中,预先为原始表设置插入触发器、更新触发器和删除触发器中的至少一种触发器。
在步骤303中,将原始表中的数据分批复制到临时表中。
当服务器对原始表中的数据进行大批量的复制操作时,原始表的读写压力会很大,从而导致原始表接收业务上的数据操作能力下降。
为了减小从原始表中复制数据的过程中给原始表造成的读写压力,服务器可以将原始表中的数据分批复制到临时表中。
在一种可能的实现方式中,服务器可以将原始表中的数据通过图3B示出的步骤303a至步骤303e分批复制到临时表中,如图3B。
在步骤303a中,设定本批次需要复制的数据行数量。
比如,服务器将本批次需要复制的数据行数量设置为100。
其中,该数据行数量是固定值,比如:100行、200行。
其中,该数据行数量可以根据原始表的当前数据处理频率而动态设定。若原始表的当前数据处理频率比较频繁时,本批次需要复制的数据行数量减少;若原始表的当前数据处理频率比较低时,本批次需要复制的数据行数量增多。
在步骤303b中,根据数据行数量完成本批次复制过程。
服务器可以根据设定的数据行数量对应的数据复制入临时表中。
比如,数据行数量为4,服务器将表1中键值为1至4的4行数据复制入临时表中。此时,临时表如表3所示。
键值 | 日期 | 用户 | 单价 | 数量 | 物品 |
1 | 4月1日 | 小王 | 10 | 30 | |
2 | 4月1日 | 小红 | 20 | 5 | |
3 | 4月2日 | 小王 | 10 | 10 | |
4 | 4月2日 | 小李 | 10 | 20 |
表3
在步骤303c中,若在本批次复制过程结束后还存在需要复制的数据行,则休眠预定时长后,进入下一批次的复制过程。
为了避免长时间的复制操作对原始表造成较大读写压力,服务器可以在完成每批次复制过程后,检测当前原始表中是否还存在需要复制的数据行,若检测出在本批次复制过程结束后还存在需要复制的数据行,则休眠预定时长后,进入下一批次的复制过程。
比如,服务器在对键值1至4的数据行的复制后,检测出原始表中还存在键值为5的数据行需要复制,则休眠5s后进入下一批次的复制过程。
其中,下一批次复制的数据行的起始地址与本批次复制的数据行的结束地址相衔接。比如,本批次复制的数据行的结束地址为键值为4的数据行,则下一批次复制的数据行的起始地址为键值为5的数据行。
在步骤303d中,在本批次复制过程结束后,检测原始表中的连接数是否超过预设值。
原始表中的连接数反映了当前原始表接收到数据处理操作的量,当原始表中的连接数较大时,原始表当前可承受其他数据处理操作的能力较小,此时,若服务器继续对原始表进行数据行复制操作,很容易对原始表正常提供的业务造成影响。
在本公开实施例中,服务器在每完成一批次导出过程后,可以检测当前原始表中的连接数,若检测出连接数超过预设值,则服务器确定原始表当前接收的数据处理操作量较大,若继续执行数据行复制操作将会对原始表提供的业务造成影响。
在步骤303e中,若超过预设值,则动态延长休眠时的预定时长。
在检测出原始表中的连接数超过预设值时,服务器确定数据表当前接收的数据处理操作量较为频繁,则动态延长休眠时间,比如,休眠时的预定时长为5s,则将该预定时长延长为10s。
需要说明的是,在休眠过程中,服务器还可以通过每隔预设时间间隔检测原始表中的连接数是否超过预设值,或者实时检测原始表中的连接数是否超过预设值的方法,对原始表当前接收的数据处理操作量进行监控,若在服务器休眠的时长达到预定时长时依然检测到原始表中的连接数超过预设值,则服务器继续延长休眠时间。
当服务器检测出原始表中的连接数低于预设值时,则确定对原始表进行数据行导出操作对原始表提供业务的影响不大,可对原始表进行数据行复制操作。
需要说明的一点是,将原始表中的数据复制至临时表中的部分伪代码可以如下:
id_list=SELECT id FROM t FORCE INDEX(id)WHERE type=1LIMIT 10;//从原始表中选择需要插入临时表中的数据
foreach my_id in id_list;do
INSERT IGNORE INTO dst_db.new_table SELECT*FROM src_db.old_tableWHEREid=my_id;//将选择的数据插入临时表中,若在插入过程中,被选择的数据在原始表中被删除,则忽略对该数据的插入操作
done
SET max_id=MAX(id_list)//记录处理到的数据
id_list=SELECT id FROM t FORCE INDEX(id)WHERE type=1AND id>max_id//从记录的已经处理到的数据后,再次从原始表中去除指定数量的id用于下一轮的插入操作
LIMIT 10。
在步骤304中,在复制过程中接收到数据处理请求时,若数据处理请求是在原始表中针对第一数据的插入请求,在将第一数据插入原始表后,通过插入触发器将第一数据覆盖插入至临时表。
在步骤305中,在复制过程中接收到数据处理请求时,若数据处理请求是在原始表中针对第二数据的更新请求,在将第二数据更新入原始表后,通过更新触发器将第二数据覆盖插入至临时表。
在步骤306中,在复制过程中接收到数据处理请求时,若数据处理请求是在原始表T中针对第三数据的删除请求,则在将第三数据从原始表T删除后,通过删除触发器将第三数据从临时表中删除。
在步骤307中,在复制过程完毕后,采用临时表代替原始表。
综上所述,本公开实施例中提供的修改数据表的表结构的方法,通过在将原始表中的数据行复制到修改了表结构形成的临时表的过程中,通过触发器技术将接收到的数据处理请求在原始表中的处理操作,同步至临时表中,并在复制完成后使用临时表代替原始表;解决了相关技术中需要终止原始表提供的业务来保证修改表结构的过程中原始表与临时表的数据一致性的问题;达到了不需要终止原始表提供的业务,也能通过触发器技术保持原始表与临时表的数据一致性,使得修改表结构的过程中原始表依然可以向外提供业务的效果。
本公开实施例提供的修改数据表的表结构的方法,还通过分批次将原始表中的数据复制到临时表中,解决了复制大量数据时会给原始表造成较大的读写压力,降低原始表的可用性的问题,达到了分批复制数据行,每批次复制过程对原始表造成的读写压力较小,还能够通过动态调整休眠时间来进一步地降低对原始表造成的读写压力的效果。
下述为本公开装置实施例,可以用于执行本公开方法实施例。对于本公开装置实施例中未披露的细节,请参照本公开方法实施例。
请参见图4所示,其是根据一示例性实施例示出的修改数据表的表结构的装置的框图,该装置包括:
创建模块410,被配置为创建与原始表对应的临时表;该临时表是相对于该原始表修改了表结构的表;
复制模块420,被配置为将该原始表中的数据行复制到该临时表中;
同步模块430,被配置为在该复制过程中接收到数据处理请求时,通过触发器技术将该数据处理请求在该原始表中的处理操作,同步至该临时表中;
代替模块440,被配置为在该复制过程完毕后,采用该临时表代替该原始表。
综上所述,本公开实施例中提供的修改数据表的表结构的装置,通过在将原始表中的数据行复制到修改了表结构形成的临时表的过程中,通过触发器技术将接收到的数据处理请求在原始表中的处理操作,同步至临时表中,并在复制完成后使用临时表代替原始表;解决了相关技术中需要终止原始表提供的业务来保证修改表结构的过程中原始表与临时表的数据一致性的问题;达到了不需要终止原始表提供的业务,也能通过触发器技术保持原始表与临时表的数据一致性,使得修改表结构的过程中原始表依然可以向外提供业务的效果。
请参见图5所示,其是根据另一示例性实施例示出的修改数据表的表结构的装置的框图,该装置包括:
创建模块410,被配置为创建与原始表对应的临时表;该临时表是相对于该原始表修改了表结构的表;
复制模块420,被配置为将该原始表中的数据行复制到该临时表中;
同步模块430,被配置为在该复制过程中接收到数据处理请求时,通过触发器技术将该数据处理请求在该原始表中的处理操作,同步至该临时表中;
代替模块440,被配置为在该复制过程完毕后,采用该临时表代替该原始表。
可选的,该装置还包括:
设置模块450,被配置为预先为该原始表设置插入触发器、更新触发器和删除触发器中的至少一种触发器;
该插入触发器用于将该原始表T中插入的数据同步插入至该临时表中;
该更新触发器用于将该原始表T中更新的数据同步更新至该临时表中;
该删除触发器用于将该原始表T中删除的数据同步从该临时表中删除。
可选的,该同步模块430,还被配置为当该数据处理请求是在该原始表中针对第一数据的插入请求时,在将该第一数据插入该原始表后,通过插入触发器将该第一数据覆盖插入至该临时表。
可选的,该同步模块430,还被配置为当该数据处理请求是在该原始表中针对第二数据的更新请求时,在将该第二数据更新入该原始表后,通过更新触发器将该第二数据覆盖插入至该临时表。
可选的,该同步模块430,还被配置为当该数据处理请求是在该原始表T中针对第三数据的删除请求时,在将该第三数据从该原始表T删除后,通过删除触发器将该第三数据从该临时表中删除。
可选的,该复制模块420,还被配置为将该原始表中的数据分批复制到该临时表中。
可选的,该复制模块420,还包括:
设定子模块421,被配置为设定本批次需要复制的数据行数量;
复制子模块422,被配置为根据该数据行数量完成本批次复制过程;
休眠子模块423,被配置为若在该本批次复制过程结束后还存在需要复制的数据行,则休眠预定时长后,进入下一批次的复制过程;
该下一批次复制的数据行的起始地址与该本批次复制的数据行的结束地址相衔接。
可选的,该复制模块420,还包括:
检测子模块424,被配置为在该本批次复制过程结束后,检测该原始表中的连接数是否超过预设值;
延时子模块425,被配置为若超过该预设值,则动态延长休眠时的该预定时长。
综上所述,本公开实施例中提供的修改数据表的表结构的装置,通过在将原始表中的数据行复制到修改了表结构形成的临时表的过程中,通过触发器技术将接收到的数据处理请求在原始表中的处理操作,同步至临时表中,并在复制完成后使用临时表代替原始表;解决了相关技术中需要终止原始表提供的业务来保证修改表结构的过程中原始表与临时表的数据一致性的问题;达到了不需要终止原始表提供的业务,也能通过触发器技术保持原始表与临时表的数据一致性,使得修改表结构的过程中原始表依然可以向外提供业务的效果。
本公开实施例提供的修改数据表的表结构的装置,还通过分批次将原始表中的数据复制到临时表中,解决了复制大量数据时会给原始表造成较大的读写压力,降低原始表的可用性的问题,达到了分批复制数据行,每批次复制过程对原始表造成的读写压力较小,还能够通过动态调整休眠时间来进一步地降低对原始表造成的读写压力的效果。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
本公开一示例性实施例提供了一种修改数据表的表结构的装置,能够实现本公开提供的修改数据表的表结构的方法,该修改数据表的表结构的装置包括:处理器、用于存储处理器可执行指令的存储器;
其中,处理器被配置为:
创建与原始表对应的临时表;该临时表是相对于该原始表修改了表结构的表;
将该原始表中的数据行复制到该临时表中;
在该复制过程中接收到数据处理请求时,通过触发器技术将该数据处理请求在该原始表中的处理操作,同步至该临时表中;
在该复制过程完毕后,采用该临时表代替该原始表。
图6是根据另一示例性实施例示出的一种修改数据表的表结构的装置的框图。例如,装置600可以被提供为一网络侧设备。参照图6,装置600包括处理组件602,其进一步包括一个或多个处理器,以及由存储器604所代表的存储器资源,用于存储可由处理组件602的执行的指令,例如应用程序。存储器604中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理组件602被配置为执行指令,以执行上述修改数据表的表结构的方法。
装置600还可以包括一个电源组件606被配置为执行装置600的电源管理,一个有线或无线网络接口608被配置为将装置600连接到网络,和一个输入输出(I/O)接口610。装置600可以操作基于存储在存储器604的操作系统,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM或类似。
也即,上述存储器存储有用于执行如下操作的指令:
创建与原始表对应的临时表;临时表是相对于原始表修改了表结构的表;
将原始表中的数据行复制到临时表中;
在复制过程中接收到数据处理请求时,通过触发器技术将数据处理请求在原始表中的处理操作,同步至临时表中;
在复制过程完毕后,采用临时表代替原始表。
在一个可能的实施例中,上述存储器还存储有用于执行如下操作的指令:
预先为原始表设置插入触发器、更新触发器和删除触发器中的至少一种触发器;
插入触发器用于将原始表T中插入的数据同步插入至临时表中;
更新触发器用于将原始表T中更新的数据同步更新至临时表中;
删除触发器用于将原始表T中删除的数据同步从临时表中删除。
在一个可能的实施例中,上述存储器还存储有用于执行如下操作的指令:
通过触发器技术将数据处理请求在原始表中的处理操作,同步至临时表中,包括:
若数据处理请求是在原始表中针对第一数据的插入请求,在将第一数据插入原始表后,通过插入触发器将第一数据覆盖插入至临时表。
在一个可能的实施例中,上述存储器还存储有用于执行如下操作的指令:
若数据处理请求是在原始表中针对第二数据的更新请求,在将第二数据更新入原始表后,通过更新触发器将第二数据覆盖插入至临时表。
在一个可能的实施例中,上述存储器还存储有用于执行如下操作的指令:
若数据处理请求是在原始表T中针对第三数据的删除请求,在将第三数据从原始表T删除后,通过删除触发器将第三数据从临时表中删除。
在一个可能的实施例中,上述存储器还存储有用于执行如下操作的指令:
将原始表中的数据分批复制到临时表中。
在一个可能的实施例中,上述存储器还存储有用于执行如下操作的指令:
设定本批次需要复制的数据行数量;
根据数据行数量完成本批次复制过程;
若在本批次复制过程结束后还存在需要复制的数据行,则休眠预定时长后,进入下一批次的复制过程;
下一批次复制的数据行的起始地址与本批次复制的数据行的结束地址相衔接。
在一个可能的实施例中,上述存储器还存储有用于执行如下操作的指令:
在本批次复制过程结束后,检测原始表中的连接数是否超过预设值;
若超过预设值,则动态延长休眠时的预定时长。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
Claims (14)
1.一种修改数据表的表结构的方法,其特征在于,所述方法包括:
创建与原始表对应的临时表;所述临时表是相对于所述原始表修改了表结构的表;
将所述原始表中的数据行复制到所述临时表中;
在所述复制过程中接收到数据处理请求时,通过触发器技术将所述数据处理请求在所述原始表中的处理操作,同步至所述临时表中;
在所述复制过程完毕后,采用所述临时表代替所述原始表,
所述方法还包括:
预先为所述原始表设置插入触发器、更新触发器和删除触发器中的至少一种触发器;
所述插入触发器用于将所述原始表中插入的数据同步插入至所述临时表中;
所述更新触发器用于将所述原始表中更新的数据同步更新至所述临时表中;
所述删除触发器用于将所述原始表中删除的数据同步从所述临时表中删除。
2.根据权利要求1所述的方法,其特征在于,所述通过触发器技术将所述数据处理请求在所述原始表中的处理操作,同步至所述临时表中,包括:
若所述数据处理请求是在所述原始表中针对第一数据的插入请求,在将所述第一数据插入所述原始表后,通过插入触发器将所述第一数据覆盖插入至所述临时表。
3.根据权利要求1所述的方法,其特征在于,所述通过触发器技术将所述数据处理请求在所述原始表中的处理操作,同步至所述临时表中,包括:
若所述数据处理请求是在所述原始表中针对第二数据的更新请求,在将所述第二数据更新入所述原始表后,通过更新触发器将所述第二数据覆盖插入至所述临时表。
4.根据权利要求1或2所述的方法,其特征在于,所述通过触发器技术将所述数据处理请求在所述原始表中的处理操作,同步至所述临时表中,包括:
若所述数据处理请求是在所述原始表中针对第三数据的删除请求,在将所述第三数据从所述原始表删除后,通过删除触发器将所述第三数据从所述临时表中删除。
5.根据权利要求1所述的方法,其特征在于,所述将所述原始表中的数据复制到所述临时表中,包括:
将所述原始表中的数据分批复制到所述临时表中。
6.根据权利要求5所述的方法,其特征在于,所述将所述原始表中的数据分批复制到所述临时表中,包括:
设定本批次需要复制的数据行数量;
根据所述数据行数量完成本批次复制过程;
若在所述本批次复制过程结束后还存在需要复制的数据行,则休眠预定时长后,进入下一批次的复制过程;
所述下一批次复制的数据行的起始地址与所述本批次复制的数据行的结束地址相衔接。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
在所述本批次复制过程结束后,检测所述原始表中的连接数是否超过预设值;
若超过所述预设值,则动态延长休眠时的所述预定时长。
8.一种修改数据表的表结构的装置,其特征在于,所述装置包括:
创建模块,被配置为创建与原始表对应的临时表;所述临时表是相对于所述原始表修改了表结构的表;
复制模块,被配置为将所述原始表中的数据行复制到所述临时表中;
同步模块,被配置为在所述复制过程中接收到数据处理请求时,通过触发器技术将所述数据处理请求在所述原始表中的处理操作,同步至所述临时表中;
代替模块,被配置为在所述复制过程完毕后,采用所述临时表代替所述原始表,
所述装置还包括:
设置模块,被配置为预先为所述原始表设置插入触发器、更新触发器和删除触发器中的至少一种触发器;
所述插入触发器用于将所述原始表中插入的数据同步插入至所述临时表中;
所述更新触发器用于将所述原始表中更新的数据同步更新至所述临时表中;
所述删除触发器用于将所述原始表中删除的数据同步从所述临时表中删除。
9.根据权利要求8所述的装置,其特征在于,所述同步模块,还被配置为当所述数据处理请求是在所述原始表中针对第一数据的插入请求时,在将所述第一数据插入所述原始表后,通过插入触发器将所述第一数据覆盖插入至所述临时表。
10.根据权利要求8所述的装置,其特征在于,所述同步模块,还被配置为当所述数据处理请求是在所述原始表中针对第二数据的更新请求时,在将所述第二数据更新入所述原始表后,通过更新触发器将所述第二数据覆盖插入至所述临时表。
11.根据权利要求8所述的装置,其特征在于,所述同步模块,还被配置为当所述数据处理请求是在所述原始表中针对第三数据的删除请求时,在将所述第三数据从所述原始表删除后,通过删除触发器将所述第三数据从所述临时表中删除。
12.根据权利要求8所述的装置,其特征在于,所述复制模块,还被配置为将所述原始表中的数据分批复制到所述临时表中。
13.根据权利要求12所述的装置,其特征在于,所述复制模块,还包括:
设定子模块,被配置为设定本批次需要复制的数据行数量;
复制子模块,被配置为根据所述数据行数量完成本批次复制过程;
休眠子模块,被配置为若在所述本批次复制过程结束后还存在需要复制的数据行,则休眠预定时长后,进入下一批次的复制过程;
所述下一批次复制的数据行的起始地址与所述本批次复制的数据行的结束地址相衔接。
14.根据权利要求13所述的装置,其特征在于,所述复制模块,还包括:
检测子模块,被配置为在所述本批次复制过程结束后,检测所述原始表中的连接数是否超过预设值;
延时子模块,被配置为若超过所述预设值,则动态延长休眠时的所述预定时长。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510325164.6A CN104965879B (zh) | 2015-06-12 | 2015-06-12 | 修改数据表的表结构的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510325164.6A CN104965879B (zh) | 2015-06-12 | 2015-06-12 | 修改数据表的表结构的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104965879A CN104965879A (zh) | 2015-10-07 |
CN104965879B true CN104965879B (zh) | 2019-03-26 |
Family
ID=54219916
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510325164.6A Active CN104965879B (zh) | 2015-06-12 | 2015-06-12 | 修改数据表的表结构的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104965879B (zh) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106709803B (zh) * | 2016-11-11 | 2020-08-28 | 中国人民银行清算总中心 | 支付业务监控处理方法及装置 |
CN108287835B (zh) * | 2017-01-09 | 2022-06-21 | 腾讯科技(深圳)有限公司 | 一种数据清理方法及装置 |
CN107193688A (zh) * | 2017-04-25 | 2017-09-22 | 北京潘达互娱科技有限公司 | 数据表结构修改方法及装置 |
CN107193736B (zh) * | 2017-05-18 | 2020-07-28 | 恒生电子股份有限公司 | 测试方法、装置、电子设备以及存储介质 |
CN108009223B (zh) * | 2017-11-24 | 2021-12-07 | 中体彩科技发展有限公司 | 一种交易数据的一致性检测方法及装置 |
CN108573015B (zh) * | 2017-12-25 | 2021-02-05 | 北京金山云网络技术有限公司 | 变更表格式的方法、装置、电子设备和可读存储介质 |
CN109656932B (zh) * | 2018-11-12 | 2022-03-25 | 武汉达梦数据库股份有限公司 | 一种数据同步时利用更新游标的数据初始化方法 |
CN110209735B (zh) * | 2019-05-05 | 2024-04-30 | 深圳市腾讯计算机系统有限公司 | 数据库备份方法、数据库备份装置、计算设备和存储介质 |
CN110196883A (zh) * | 2019-05-29 | 2019-09-03 | 贝壳技术有限公司 | 一种对线上业务无影响的数据同步方法及装置 |
CN110502585A (zh) * | 2019-08-30 | 2019-11-26 | 山东健康医疗大数据有限公司 | 一种可配置的MySql数据库间数据同步方法 |
CN110597823A (zh) * | 2019-09-20 | 2019-12-20 | 四川长虹电器股份有限公司 | 一种支持MySQL数据库在线DDL操作的方法 |
CN110909087A (zh) * | 2019-11-28 | 2020-03-24 | 北京思特奇信息技术股份有限公司 | 一种关系型数据库在线ddl修改表结构的方法和装置 |
CN111680040A (zh) * | 2020-05-29 | 2020-09-18 | 泰康保险集团股份有限公司 | 数据表处理方法及装置 |
CN112347115A (zh) * | 2020-10-29 | 2021-02-09 | 北京新数科技有限公司 | 一种数据库在线表变更方法和装置 |
CN112783868A (zh) * | 2021-02-10 | 2021-05-11 | 中国工商银行股份有限公司 | 分布式数据库表结构灰度升级方法、装置及系统 |
CN112860697A (zh) * | 2021-02-10 | 2021-05-28 | 中国工商银行股份有限公司 | 分布式数据库表结构变更方法、装置及系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103593447A (zh) * | 2013-11-18 | 2014-02-19 | 北京国双科技有限公司 | 用于数据库表的数据处理方法和装置 |
CN103631967A (zh) * | 2013-12-18 | 2014-03-12 | 北京华环电子股份有限公司 | 一种带自增量标识字段的数据表的处理方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104516724B (zh) * | 2013-09-26 | 2019-05-31 | Sap欧洲公司 | 对于复制的数据表的表属性管理 |
-
2015
- 2015-06-12 CN CN201510325164.6A patent/CN104965879B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103593447A (zh) * | 2013-11-18 | 2014-02-19 | 北京国双科技有限公司 | 用于数据库表的数据处理方法和装置 |
CN103631967A (zh) * | 2013-12-18 | 2014-03-12 | 北京华环电子股份有限公司 | 一种带自增量标识字段的数据表的处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN104965879A (zh) | 2015-10-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104965879B (zh) | 修改数据表的表结构的方法及装置 | |
US11023448B2 (en) | Data scrubbing method and apparatus, and computer readable storage medium | |
US10437795B2 (en) | Upgrading systems with changing constraints | |
US10042908B2 (en) | Method and system for implementing a unified DB clone system | |
CN110209735B (zh) | 数据库备份方法、数据库备份装置、计算设备和存储介质 | |
CN107004010A (zh) | 控制多数据库系统 | |
CN108205560B (zh) | 一种数据同步方法以及装置 | |
CN110096476A (zh) | 数据备份方法、装置及计算机可读存储介质 | |
US20120330890A1 (en) | Propagating tables while preserving cyclic foreign key relationships | |
CN106155839B (zh) | 一种用于备份数据的方法与设备 | |
CN103970834A (zh) | 一种异构数据库同步系统中增量数据同步故障的恢复方法 | |
CN103970833A (zh) | 一种基于日志的异构数据库同步系统中双向同步数据循环的解决方法 | |
CN106569738A (zh) | 一种删除级联快照的方法及装置 | |
CN110502523A (zh) | 业务数据存储方法、装置、服务器及计算机可读存储介质 | |
CN104516796B (zh) | 一种基于命令集的网元备份与恢复方法及装置 | |
CN103514114A (zh) | 源清除级联卷 | |
US8880464B1 (en) | Methods and apparatus for synchronizing closed heterogenous systems | |
US11989095B2 (en) | Techniques for preserving clone relationships between files | |
CN109933461A (zh) | 一种数据处理的方法和装置 | |
CN104503868B (zh) | 数据同步方法、装置以及系统 | |
CN106484313A (zh) | 数据信息备份方法、数据备份方法及装置 | |
WO2020134930A1 (zh) | 一种基于区块链的数字资产有效期处理的方法及装置 | |
US9569461B2 (en) | Distributed data authority system | |
CN111078418A (zh) | 操作同步方法、装置、电子设备及计算机可读存储介质 | |
GB2581947A (en) | Management of data written via a bus interface to a storage controller during remote copy operations |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |