变更表格式的方法、装置、电子设备和可读存储介质与流程

文档序号:15518026发布日期:2018-09-25 18:48阅读:146来源:国知局
本发明涉及数据库
技术领域
:,特别是涉及变更表格式的方法、装置、电子设备和可读存储介质。
背景技术
::目前,在需要对数据库进行表格式变更时,应用较为广泛的方法是pt-online-schema-change方法,具体的处理过程如下:第一步,按照用户所需的新表格式,创建一张临时表;第二步,向待变更表格式的原表中,插入修改触发器,修改触发器可以包括插入(insert)触发器、更改(update)触发器和删除(delete)触发器;第三步,当用户对原表中的数据进行变更操作时,通过触发修改触发器直接向临时表修改数据;比如,用户对原表进行update操作,通过触发update触发器直接对临时表进行update操作,此时原表被锁定,导致除该用户以外的其他业务进程无法再对原表进行操作;第四步,将修改后的原表的所有数据写入到修改后的临时表中;第五步,使用修改后的临时表置换修改后的原表;具体的,先将原表的表名修改为区分于原表名,且与原表名不同的随机名,将临时表的表名改为原表的表名,再解锁定原表;第六步,删除原表。但是,由于在第三步中,通过触发变更触发器直接向临时表修改数据可能会触发锁定原表,导致用户在对数据库中的原表进行表格式变更时,其他业务进程无法对原表进行操作,在锁定时间较长的情况下会影响其他业务的正常使用。技术实现要素:本发明实施例的目的在于提供一种变更表格式的方法、装置、电子设备和可读存储介质,以实现在变更表格式的过程中,不锁定原表,以避免影响其他业务的正常运行。具体技术方案如下:本发明实施例提供一种变更表格式的方法,方法包括:创建一张原表格式的修改记录表,以及一张对原表进行表格式变更后的临时表;在插入有修改触发器对应的原表中的数据被修改,并触发修改触发器后,在修改记录表中记录原表的修改信息;将修改后的原表中的所有数据写入临时表;根据修改记录表中记录的修改信息,对临时表中的数据进行第一修改操作;使用修改后的临时表置换修改后的原表,并删除修改后的原表。可选的,修改记录表包括用于记录插入信息、更改信息和删除信息的字段;在修改记录表中记录原表的修改信息的步骤,包括:修改触发器在修改记录表中对应的字段中,插入原表中修改后的数据和修改后的数据对应的修改类型,修改类型包括插入、更改和删除;根据修改记录表中记录的修改信息,对临时表中的数据进行第一修改操作的步骤,包括:根据修改记录表中记录的修改后的数据和修改后的数据对应的修改类型,对临时表中的数据进行相应的修改操作。可选的,在使用修改后的临时表置换修改后的原表的步骤之前,方法还包括:使用预设的校验函数,对修改后的原表中的数据以及修改后的临时表中的数据进行一致性校验;当修改后的原表中的数据与修改后的临时表中的数据不一致时,返回执行根据修改记录表中记录的修改信息,对临时表中的数据进行第一修改操作的步骤;当修改后的原表中的数据与修改后的临时表中的数据一致时,执行使用修改后的临时表置换修改后的原表的步骤。可选的,使用预设的校验函数,对修改后的原表中的数据以及修改后的临时表中的数据进行一致性校验的步骤,包括:使用预设的校验函数,通过计算修改后的原表中每个数据行对应的第一校验值,以及修改后的临时表中的每个数据行对应的第二校验值,对修改后的原表中每个数据行以及修改后的临时表中的每个数据行进行一致性校验;当修改后的原表中的数据与修改后的临时表中的数据不一致时,返回执行根据修改记录表中记录的修改信息,对临时表中的数据进行第一修改操作的步骤,包括:当修改后的原表中的数据与修改后的临时表中的数据不一致时,根据修改记录表中记录的修改信息,对临时表中的数据进行第二修改操作;根据修改后的原表中每个数据行对应的第一校验值,以及修改后的临时表中的每个数据行对应的第二校验值,确定错误行,其中,当修改后的原表中第一数据行对应的第一校验值,与变更后的临时表中、与第一数据行处于同一行的第二数据行对应的第二校验值不一致时,第一数据行和第二数据行均为错误行;使用校验函数,对错误行进行一致性校验;当错误行中的数据不一致时,返回执行根据修改记录表中记录的修改信息,对临时表中的数据进行第二修改操作的步骤。可选的,在使用校验函数,对错误行进行一致性校验的步骤之后,方法还包括:获取对错误行进行一致性校验的处理过程所耗费的时长;当修改后的原表中的数据与修改后的临时表中的数据一致时,执行使用修改后的临时表置换修改后的原表的步骤,包括:当错误行中的数据一致,且使用时长小于预设时长阈值时,执行使用修改后的临时表置换修改后的原表的步骤。可选的,当错误行中的数据不一致时,返回执行根据修改记录表中记录的修改信息,对临时表中的数据进行第二修改操作的步骤,包括:当错误行中的数据不一致,或者,时长大于或等于预设时长阈值时,返回执行根据修改记录表中记录的修改信息,对临时表中的数据进行第二修改操作的步骤。可选的,在执行使用修改后的临时表置换修改后的原表的步骤之前,方法还包括:根据变化记录表中记录的修改信息,对修改后的临时表中的数据进行第一修改操作;使用预设的校验函数,对修改后的原表中的数据以及修改后的临时表中的数据进行一致性校验;当修改后的原表中的数据与修改后的临时表中的数据一致时,执行使用修改后的临时表置换修改后的原表的步骤。本发明实施例还提供一种变更表格式的装置,装置包括:创建单元,用于创建一张原表格式的修改记录表,以及一张对原表进行表格式变更后的临时表;记录单元,用于在插入有修改触发器对应的原表中的数据被修改,并触发修改触发器后,在修改记录表中记录原表的修改信息;写入单元,用于将修改后的原表中的所有数据写入临时表;第一修改单元,用于根据修改记录表中记录的修改信息,对临时表中的数据进行第一修改操作;置换单元,用于使用修改后的临时表置换修改后的原表,并删除修改后的原表。可选的,修改记录表包括用于记录插入信息、更改信息和删除信息的字段;记录单元,具体用于修改触发器在修改记录表中对应的字段中,插入原表中修改后的数据和修改后的数据对应的修改类型,修改类型包括插入、更改和删除;第一修改单元,具体用于根据修改记录表中记录的修改后的数据和修改后的数据对应的修改类型,对临时表中的数据进行相应的修改操作。可选的,装置还包括:第一校验单元,用于使用预设的校验函数,对修改后的原表中的数据以及修改后的临时表中的数据进行一致性校验;第一执行单元,用于当校验单元的校验结果为修改后的原表中的数据与修改后的临时表中的数据不一致时,返回执行第一修改单元;第二执行单元,用于当校验单元的校验结果为修改后的原表中的数据与修改后的临时表中的数据一致时,执行置换单元。可选的,第一校验单元,具体用于使用预设的校验函数,通过计算修改后的原表中每个数据行对应的第一校验值,以及修改后的临时表中的每个数据行对应的第二校验值,对修改后的原表中每个数据行以及修改后的临时表中的每个数据行进行一致性校验;第一执行单元,包括:修改子单元、确定子单元、校验子单元和执行子单元;修改子单元,用于当修改后的原表中的数据与修改后的临时表中的数据不一致时,根据修改记录表中记录的修改信息,对临时表中的数据进行第二修改操作;确定子单元,用于根据修改后的原表中每个数据行对应的第一校验值,以及修改后的临时表中的每个数据行对应的第二校验值,确定错误行,其中,当修改后的原表中第一数据行对应的第一校验值,与变更后的临时表中、与第一数据行处于同一行的第二数据行对应的第二校验值不一致时,第一数据行和第二数据行均为错误行;校验子单元,用于使用校验函数,对错误行进行一致性校验;执行子单元,用于当错误行中的数据不一致时,返回执行修改子单元。可选的,装置还包括:获取单元,用于获取对错误行进行一致性校验的处理过程所耗费的时长;第二执行单元,具体用于当错误行中的数据一致,且使用时长小于预设时长阈值时,执行置换单元。可选的,执行子单元,具体用于当错误行中的数据不一致,或者,时长大于或等于预设时长阈值时,返回执行修改子单元。可选的,装置还包括:第二修改单元,用于根据变化记录表中记录的修改信息,对修改后的临时表中的数据进行第一修改操作;第二校验单元,用于使用预设的校验函数,对修改后的原表中的数据以及修改后的临时表中的数据进行一致性校验;第三执行单元,用于当修改后的原表中的数据与修改后的临时表中的数据一致时,执行置换单元。本发明实施再提供了一种电子设备,包括处理器和存储器;存储器,用于存放计算机程序;处理器,用于执行存储器上所存放的程序时,实现上述任一所述的变更表格式的方法。本发明实施再提供了一种计算机可读存储介质,计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述任一所述的变更表格式的方法。本发明实施再提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一所述的变更表格式的方法。本发明实施例提供的变更表格式的方法、装置、电子设备和可读存储介质,可以先创建一张原表格式的修改记录表,以及一张对原表格式进行表格式变更后的临时表;然后,向原表中插入修改触发器;在由于原表中的数据发生变更而触发修改触发器后,在修改记录表中记录原表的修改信息;接下来,将修改后的原表中的所有数据写入临时表;随后,根据修改记录表中记录的修改信息,对临时表中的数据进行修改操作;最后,使用修改后的临时表置换修改后的原表,并删除修改后的原表;至此,完成对原表的表格式变更操作。这样,在用户对原表的表格式进行更改的过程中,当用户需要修改原表数据时,由于修改数据所触发的修改触发器不会直接对临时表进行修改操作,使得原表不会被锁表,从而避免影响其他业务程序对原表进行操作,保证在对原表的表格式进行更改的过程中不会影响其他业务的正常运行。当然,实施本发明的任一产品或方法必不一定需要同时达到以上所述的所有优点。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本发明实施例的变更表格式的方法的一种流程图;图2为本发明实施例的变更表格式的方法的又一种流程图;图3为本发明实施例的变更表格式的方法的另一种流程图;图4为本发明实施例的变更表格式的装置的结构图;图5为本发明实施例的电子设备的示意图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。目前,在需要对数据库进行表格式变更时,应用较为广泛的方法是pt-online-schema-change方法,具体的处理过程如下:第一步,按照用户所需的新表格式,创建一张临时表;第二步,向待变更表格式的原表中,插入修改触发器,修改触发器可以包括insert触发器、update触发器和delete触发器;第三步,当用户对原表中的数据进行变更操作时,通过触发修改触发器直接向临时表修改数据;比如,用户对原表进行update操作,通过触发update触发器直接对临时表进行update操作,此时原表被锁定,导致除该用户以外的其他业务进程无法再对原表进行操作;第四步,将修改后的原表的所有数据写入到修改后的临时表中;第五步,使用修改后的临时表置换修改后的原表;具体的,先将原表的表名修改为区分于原表名,且与原表名不同的随机名,将临时表的表名改为原表的表名,再解锁定原表;第六步,删除原表。但是,由于在第三步中,通过触发变更触发器直接向临时表修改数据可能会触发锁定原表,导致用户在对数据库中的原表进行表格式变更时,其他业务进程无法对原表进行操作,在锁定时间较长的情况下会影响其他业务的正常使用。为了解决上述问题,本发明实施例提供了一种变更表格式的方法及装置,能够在用户对原表的表格式进行更改的过程中,当用户需要修改原表数据时,由于修改数据所触发的修改触发器不会直接对临时表进行修改操作,使得原表不会被锁表,从而避免影响其他业务程序对原表进行操作,保证在对原表的表格式进行更改的过程中不会其他业务的正常运行。本发明实施例提供了一种变更表格式的方法。参见图1,图1为本发明实施例的变更表格式的方法的一种流程图,包括如下步骤:步骤101,创建一张原表格式的修改记录表,以及一张对原表格式进行表格式变更后的临时表。在本步骤中,可以创建一张原表格式的修改记录表,和一张对原表进行表格式变更后的临时表;其中,临时表就是用户需要将原表的表格式变更后得到的新表;修改记录表用于记录在对原表进行表格式变更的过程中,原表中的数据修改信息,以使得能够根据修改记录表,对临时表中的数据进行修改。可选的,修改记录表包括用于记录插入信息、更改信息和删除信息的字段。具体的,修改记录表可以包括与原表相同的主键,以及用于记录增加、删除和更改信息的字段。在具体实施中,修改记录表中用于记录增加、删除和更改信息的字段可以为枚举(enum)类型的数据操作语言类(datamanipulationlanguagetype,dml_type)字段。比如,修改记录表中用于记录增加、更改和删除信息的字段可以为enum("insert","update","delete")。比如,原表为学生名单,表结构为student(idbigintprimarykey,namevarchar(30)),其中,id为学号,设定为主键,类型为bigint,name为学生姓名,字符串类型。那么,创建的临时表的表结构可以为__new__student(idbigintprimarykey,namevarchar(30),sexbit(1)),该临时表的表格式是在原表的表格式基础上做了变更,新增了用于表示学生性别的sex列;修改记录表的表结构可以为__chg__student(idbigintprimarykey,typedml_type,namevarchar(30)),该表结构除原表结构外,增加了dml_type类型的type字段,用于记录发生的变更类型。又比如,原表为用户信息表,表结构为user(useridbigintprimarykey,usernamevarchar(30)),其中,userid为用户编号,设定为主键,username为用户名。那么,创建的临时表的表结构可以为_new_user(useridbigintprimarykey,username,passwordvarchar(30)),该临时表的表格式是在原表的表格式基础上做了变更,新增了用于表示用户密码的password列;修改记录表的表结构可以为__chg__user(useridbigintprimarykey,typedml_type,usernamevarchar(30)),该表结构除原表结构外,增加了dml_type类型的type字段,用于记录发生的变更类型。在具体实施中,在步骤101之前,还需要对原表进行预检查,具体包括:确定原表是否存在,确定原表存在主键或唯一索引,确定原表没有外键,以及确定临时表中的主键或唯一索引与原表中的主键或唯一索引一致。步骤102,在插入有修改触发器对应的原表中的数据被修改,并触发修改触发器后,在修改记录表中记录原表的修改信息。在本步骤中,在原表中插入修改触发器,当用户对原表中的数据进行修改时,可以触发修改触发器,进而修改触发器在修改记录表中记录相关的修改信息,其中,修改触发器可以包括insert触发器、update触发器和delete触发器。在现有技术中,当用户对原表中的数据进行修改时,可以触发修改触发器,使得修改触发器直接在临时表中修改数据。当用户对原表中的数据进行更改操作时,可以触发update触发器直接对原表中的数据进行更改,此时,原表会检测到数据被执行更改操作,进而对被更改的目标行数据进行行锁操作,从而导致除该用户以外的其他业务进程无法再对该目标行数据进行操作,尤其在锁定时间较长的情况下,可能会影响其他业务的正常使用。而在本发明实施例中,由于修改触发器在被触发后,可以在修改记录表中插入相关的修改信息,不会导致原表被锁表,这样,除该用户以外的其他业务进程可以对原表进行操作,从而避免影响其他业务的正常使用。可选的,步骤102中,在修改记录表中记录原表的修改信息的步骤,可以包括:修改触发器在修改记录表中对应的字段中,插入原表中修改后的数据和修改后的数据对应的修改类型,修改类型包括插入、更改和删除。具体的,由于修改记录表包括用于记录插入信息、更改信息和删除信息的字段,因此,修改触发器将原表中修改后的数据和对应的修改类型插入到修改记录表中的相应字段中;可以理解的,修改类型包括插入、更改和删除。为了方便说明,在步骤101中第一个例子的基础上继续进行说明:若用户或其他业务进程向原表student插入一条数据student(1,’张三’),则insert触发器会向修改记录表__chg__student中插入__chg__student(1,’insert’,’张三’);若用户或其他业务进程向原表student更改一条数据student(1,’张三’)–>student(1,’李四’),则update触发器会向修改记录表__chg__student表插入__chg__student(1,’update’,’李四’)若用户或其他业务进程从原表student删除一条数据student(1,’李四’),则delete触发器会向修改记录表__chg__student表插入__chg__student(1,’delete’,’李四’)。此外,在具体实施中,可以通过解析行格式的binlog来替换修改触发器的功能。步骤103,将修改后的原表中的所有数据写入临时表。在本步骤中,将用户修改后的原表中的所有数据写入到临时表中;具体的,可使用sql语句:insertintotable2(field1,field2,...);selectvalue1,value2,...fromtable1来实现,其中,table2为临时表,table1为修改后的原表,也可以使用sql语句:selectintooutfile和loaddatainfile来实现相同效果。本步骤的详细过程可以参考现有技术,在此不再赘述。需要说明的是,步骤103可能会花费较长的时间,尤其在原表的数据量较大的情况下,在此期间,步骤102可以同时进行。也就是说,在将原表中的数据写入临时表的过程中,可能由于用户或者其他业务进程的操作,原表会产生新的修改,而正在写入临时表中的原表数据可能不包括这些新的修改。针对上述问题,可以通过步骤102,由修改触发器将这些新的修改记录在修改记录表中,这样,就可以根据修改记录表中的修改信息,对临时表进行修改,以保证临时表中的数据与原表中的数据一致。步骤104,根据修改记录表中记录的修改信息,对临时表中的数据进行第一修改操作。在本步骤中,由于在将原表中的数据写入临时表的过程中,原表可能会产生新的修改,而正在写入临时表中的原表数据不包括这些新的修改,这样,可以根据修改记录表中的修改信息,对临时表中的数据进行修改操作,以保证临时表中的数据与原表中的数据一致。可选的,步骤104可以包括:根据修改记录表中记录的修改后的数据和修改后的数据对应的修改类型,对临时表中的数据进行相应的修改操作。具体的,由于修改记录表中记录了原表中修改后的数据和对应的修改类型,可以根据上述修改信息,对临时表中的数据进行相应的修改操作。为了方便说明,在步骤102中关于修改触发器向修改记录表记录修改信息的例子的基础上继续进行说明:若修改记录表__chg__student中的修改信息为__chg__student(1,’insert’,’张三’),则可以根据修改信息,向临时表__new__student插入一条数据,其中新增列sex保留为null__new__student(1,’张三’,null);若修改记录表__chg__student中的修改信息为__chg__student(1,’update’,’李四’),则可以根据修改信息,向临时表__new__student发起update操作,其中新增列sex保留为null__new__student(1)–>student(1,’李四’,null);若修改记录表__chg__student中的修改信息为__chg__student(1,’delete’,’李四’),则可以根据修改信息,删除临时表__new__student中的一条数据:__new__student(1)。步骤105,使用修改后的临时表置换修改后的原表,并删除修改后的原表。在本步骤中,可以使用修改后的临时表置换修改后的原表;具体的,可以先将原表的表名修改为区分于原表名,且与原表名不同的随机名,同时,将临时表的表名改为原表的表名,再提交事务,使得临时表置换原表;最后,删除原表和修改记录表,完成对原表进行表格式变更的处理流程。可选的,在步骤105之前,本发明实施例的变更表格式的方法,还包括:使用预设的校验函数,对修改后的原表中的数据以及修改后的临时表中的数据进行一致性校验;当修改后的原表中的数据与修改后的临时表中的数据不一致时,返回执行根据修改记录表中记录的修改信息,对临时表中的数据进行修改操作的步骤;当修改后的原表中的数据与修改后的临时表中的数据一致时,执行使用修改后的临时表置换修改后的原表的步骤。具体的,当步骤103中“将修改后的原表中的所有数据写入临时表”的处理过程所耗费的时间较长时,步骤104中“根据修改记录表中记录的修改信息,对临时表中的数据进行修改操作”可能在修改后的原表中的所有数据尚未完全写入临时表中的时刻发生,这样,修改后的临时表中的数据与修改后的原表中的数据仍不一致。针对上述问题,可以使用预设的校验函数,对修改后的原表中的数据以及修改后的临时表中的数据进行一致性校验;当修改后的原表中的数据与修改后的临时表中的数据不一致时,可能存在两种情况,一种情况是:修改后的原表中的所有数据尚未完全写入临时表中,另一种情况是,在步骤103中开始将修改后的原表数据写入临时表之后,原表又产生了新的修改,也即修改记录表中又增加了新的修改信息;此时,可以返回执行步骤104,一方面,可以再次根据修改记录表中的修改信息对临时表中的数据进行修改,另一方便,可以等待,使修改后的原表中的数据继续写入临时表中。而当修改后的原表中的数据与修改后的临时表中的数据一致时,说明原表中的数据与临时表中的数据一致,也就是说,此时修改后的原表中的所有数据已经完全写入临时表,且修改记录表中没有增加新的修改信息,这样,可以继续执行步骤105,完成对原表进行表格式变更的处理流程。其中,预设的校验函数,可以是mysql提供的校验和计算函数,也可以是使用安全哈希算法(securehashalgorithm,sha)等哈希算法,当然,也可以根据实际需求使用其他具有一致性校验功能的函数。可见,在本发明实施例提供的变更表格式的方法中,可以先创建一张原表格式的修改记录表,以及一张对原表格式进行表格式变更后的临时表;然后,向原表中插入修改触发器;在由于原表中的数据发生变更而触发修改触发器后,在修改记录表中记录原表的修改信息;接下来,将修改后的原表中的所有数据写入临时表;随后,根据修改记录表中记录的修改信息,对临时表中的数据进行修改操作;最后,使用修改后的临时表置换修改后的原表,并删除修改后的原表;至此,完成原表的表格式变更操作。这样,在用户对原表的表格式进行更改的过程中,当用户需要修改原表数据时,由于修改数据所触发的修改触发器不会直接对临时表进行修改操作,使得原表不会被锁表,从而避免影响其他业务程序对原表进行操作,保证在对原表的表格式进行更改的过程中不会其他业务的正常运行。本发明实施例还提供了一种变更表格式的方法。参见图2,图2为本发明实施例的变更表格式的方法的又一种流程图,包括如下步骤:步骤201,创建一张原表格式的修改记录表,以及一张对原表格式进行表格式变更后的临时表。在本步骤中,可以创建一张原表格式的修改记录表,和一张对原表进行表格式变更后的临时表;其中,临时表就是用户需要将原表的表格式变更后得到的新表;修改记录表用于记录在对原表进行表格式变更的过程中,原表中的数据修改信息,以使得能够根据修改记录表,对临时表中的数据进行修改。需要说明的是,本步骤的详细过程和技术效果可以参考图1所示的变更表格式的方法中的步骤101,在此不再赘述。步骤202,在插入有修改触发器对应的原表中的数据被修改,并触发修改触发器后,在修改记录表中记录原表的修改信息。在本步骤中,可以在原表中插入修改触发器,当用户对原表中的数据进行修改时,可以触发修改触发器,进而修改触发器在修改记录表中记录相关的修改信息。需要说明的是,本步骤的详细过程和技术效果可以参考图1所示的变更表格式的方法中的步骤102,在此不再赘述。步骤203,将修改后的原表中的所有数据写入临时表。在本步骤中,可以将用户修改后的原表中的所有数据写入到临时表中。需要说明的是,本步骤的详细过程和技术效果可以参考图1所示的变更表格式的方法中的步骤103,在此不再赘述。步骤204,根据修改记录表中记录的修改信息,对临时表中的数据进行第一修改操作。在本步骤中,由于在将原表中的数据写入临时表的过程中,原表可能会产生新的修改,而正在写入临时表中的原表数据不包括这些新的修改,这样,可以根据修改记录表中的修改信息,对临时表中的数据进行修改操作,以保证临时表中的数据与原表中的数据一致。需要说明的是,本步骤的详细过程和技术效果可以参考图1所示的变更表格式的方法中的步骤104,在此不再赘述。步骤205,使用预设的校验函数,通过计算修改后的原表中每个数据行对应的第一校验值,以及修改后的临时表中的每个数据行对应的第二校验值,对修改后的原表中每个数据行以及修改后的临时表中的每个数据行进行一致性校验;当修改后的原表中的数据与修改后的临时表中的数据不一致时,执行步骤206;当修改后的原表中的数据与修改后的临时表中的数据一致时,执行步骤209。在本步骤中,可以使用预设的校验函数,对修改后的原表中的所有数据行,以及修改后的临时表中的所有数据行进行第一次一致性校验,如果修改后的原表与修改后的临时表中的数据不一致,则通过执行步骤206,再次根据修改记录表中的修改信息对临时表中的出数据进行修改操作,如果修改后的原表与修改后的临时表中的数据一致,则通过执行步骤209,使用临时表置换原表。步骤206,根据修改记录表中记录的修改信息,对临时表中的数据进行第二修改操作,执行步骤207。需要说明的是,步骤206和步骤204的处理过程是相同的。但因为对修改后的原表和修改后的临时表中数据的第一次一致性校验和后续一致性校验的处理过程不同,第一次一致性校验针对的是修改后的原表和修改后的临时表中的所有数据,且只需要执行一次,因此,为了整体处理流程的逻辑性,不可以将步骤204和步骤205放入循环中,因此,这里单独列出步骤206,以便后续的循环使用,并使用第一修改操作和第二修改操作区分步骤204和步骤206。步骤207,根据修改后的原表中每个数据行对应的第一校验值,以及修改后的临时表中的每个数据行对应的第二校验值,确定错误行,执行步骤208。其中,当修改后的原表中第一数据行对应的第一校验值,与变更后的临时表中、与第一数据行处于同一行的第二数据行对应的第二校验值不一致时,第一数据行和第二数据行均为错误行。在本步骤中,可以根据步骤205计算出的第一校验值和第二校验值,确定出修改后的原表与修改后的临时表中不一致的数据行,也即错误行。为了提高校验效率,后续只需要对这些错误行进行一致性校验即可。步骤208,使用校验函数,对错误行进行一致性校验;当错误行中的数据一致时,执行步骤209,当错误行中的数据不一致时,返回执行步骤206。在本步骤中,可以使用预设的校验函数,对修改后的原表以及修改后的临时表中的错误行进行一致性校验,如果错误行中的数据不一致,则通过执行步骤206,再次根据修改记录表中的修改信息对临时表中的出数据进行修改操作,如果错误行中的数据一致,则通过执行步骤209,使用临时表置换原表。步骤209,使用修改后的临时表置换修改后的原表,并删除修改后的原表。在本步骤中,可以使用修改后的临时表置换修改后的原表;具体的,可以先将原表的表名修改为区分于原表名,且与原表名不同的随机名,同时,将临时表的表名改为原表的表名,再提交事务,使得临时表置换原表;最后,删除原表和修改记录表,完成对原表进行表格式变更的处理流程。需要说明的是,本步骤的详细过程和技术效果可以参考图1所示的变更表格式的方法中的步骤105,在此不再赘述。可选的,为了严格保证原表中数据与临时表中的数据一致,在步骤209之前,本发明实施例的变更表格式的方法还可以包括:根据变化记录表中记录的修改信息,对修改后的临时表中的数据进行修改操作;使用预设的校验函数,对修改后的原表中的数据以及修改后的临时表中的数据进行一致性校验;当修改后的原表中的数据与修改后的临时表中的数据一致时,执行步骤209。具体的,为了避免在步骤208中确定错误行的数据一致之后,在步骤209使用临时表置换原表之前,由于用户或者其他业务进程的操作使得原表又出现新的修改,因此,在步骤205中当修改后的原表中的数据与修改后的临时表中的数据一致时,或者步骤208中当错误行中的数据一致时,可以再次根据变化记录表中的修改信息,对修改后的原表进行修改操作,并在修改后再次校验一致性,当再次校验通过时,才会执行步骤209,以严格保证原表中数据与临时表中的数据一致。可见,在本发明实施例提供的变更表格式的方法中,可以使用修改后的临时表置换修改后的原表之前,对原表数据和临时表中的数据进行多次的一致性校验,以严格保证原表中数据与临时表中的数据一致,避免出现由于变更表格式后的新表数据与原表数据不一致而导致业务受损。本发明实施例又提供了一种变更表格式的方法。参见图3,图3为本发明实施例的变更表格式的方法的另一种流程图,包括如下步骤:步骤301,创建一张原表格式的修改记录表,以及一张对原表格式进行表格式变更后的临时表。在本步骤中,可以创建一张原表格式的修改记录表,和一张对原表进行表格式变更后的临时表;其中,临时表就是用户需要将原表的表格式变更后得到的新表;修改记录表用于记录在对原表进行表格式变更的过程中,原表中的数据修改信息,以使得能够根据修改记录表,对临时表中的数据进行修改。需要说明的是,本步骤的详细过程和技术效果可以参考图1所示的变更表格式的方法中的步骤101,在此不再赘述。步骤302,在插入有修改触发器对应的原表中的数据被修改,并触发修改触发器后,在修改记录表中记录原表的修改信息。在本步骤中,可以在原表中插入修改触发器,当用户对原表中的数据进行修改时,可以触发修改触发器,进而修改触发器在修改记录表中记录相关的修改信息。需要说明的是,本步骤的详细过程和技术效果可以参考图1所示的变更表格式的方法中的步骤102,在此不再赘述。步骤303,将修改后的原表中的所有数据写入临时表。在本步骤中,可以将用户修改后的原表中的所有数据写入到临时表中。需要说明的是,本步骤的详细过程和技术效果可以参考图1所示的变更表格式的方法中的步骤103,在此不再赘述。步骤304,根据修改记录表中记录的修改信息,对临时表中的数据进行第一修改操作。在本步骤中,由于在将原表中的数据写入临时表的过程中,原表可能会产生新的修改,而正在写入临时表中的原表数据不包括这些新的修改,这样,可以根据修改记录表中的修改信息,对临时表中的数据进行修改操作,以保证临时表中的数据与原表中的数据一致。需要说明的是,本步骤的详细过程和技术效果可以参考图1所示的变更表格式的方法中的步骤104,在此不再赘述。步骤305,使用预设的校验函数,通过计算修改后的原表中每个数据行对应的第一校验值,以及修改后的临时表中的每个数据行对应的第二校验值,对修改后的原表中每个数据行以及修改后的临时表中的每个数据行进行一致性校验;当修改后的原表中的数据与修改后的临时表中的数据不一致时,执行步骤306;当修改后的原表中的数据与修改后的临时表中的数据一致时,执行步骤309。在本步骤中,可以使用预设的校验函数,对修改后的原表中的所有数据行,以及修改后的临时表中的所有数据行进行第一次一致性校验,如果修改后的原表与修改后的临时表中的数据不一致,则通过执行步骤306,再次根据修改记录表中的修改信息对临时表中的出数据进行修改操作,如果修改后的原表与修改后的临时表中的数据一致,则通过执行步骤309,使用临时表置换原表。步骤306,根据修改记录表中记录的修改信息,对临时表中的数据进行第二修改操作,执行步骤307。本步骤的详细过程和技术效果可以参考图2所示的变更表格式的方法中的步骤206,在此不再赘述。步骤307,根据修改后的原表中每个数据行对应的第一校验值,以及修改后的临时表中的每个数据行对应的第二校验值,确定错误行,执行步骤308。其中,当修改后的原表中第一数据行对应的第一校验值,与变更后的临时表中、与第一数据行处于同一行的第二数据行对应的第二校验值不一致时,第一数据行和第二数据行均为错误行。在本步骤中,可以根据步骤305计算出的第一校验值和第二校验值,确定出修改后的原表与修改后的临时表中不一致的数据行,也即错误行。为了提高校验效率,后续只需要对这些错误行进行一致性校验即可。步骤308,使用校验函数,对错误行进行一致性校验;获取对错误行进行一致性校验的处理过程所耗费的时长;当错误行中的数据一致,且使用时长小于预设时长阈值时,执行步骤309,当错误行中的数据不一致,或者,时长大于或等于预设时长阈值时,返回执行步骤306。在本步骤中,可以使用预设的校验函数,对修改后的原表以及修改后的临时表中的错误行进行一致性校验,并且,获取对错误行进行一致性校验的处理过程所耗费的时长。如果错误行中的数据不一致,或者,时长大于或等于预设时长阈值,则通过执行步骤206,再次根据修改记录表中的修改信息对临时表中的出数据进行修改操作,如果错误行中的数据一致,且使用时长小于预设时长阈值,则通过执行步骤209,使用临时表置换原表。其中,预设的时长阈值可以设置为1秒。步骤309,使用修改后的临时表置换修改后的原表,并删除修改后的原表。在本步骤中,可以使用修改后的临时表置换修改后的原表;具体的,可以先将原表的表名修改为区分于原表名,且与原表名不同的随机名,同时,将临时表的表名改为原表的表名,再提交事务,使得临时表置换原表;最后,删除原表和修改记录表,完成对原表进行表格式变更的处理流程。需要说明的是,本步骤的详细过程和技术效果可以参考图1所示的变更表格式的方法中的步骤105,在此不再赘述。可见,在本发明实施例提供的变更表格式的方法中,可以使用修改后的临时表置换修改后的原表之前,对原表数据和临时表中的数据进行多次的一致性校验,只有当数据一致且一致性校验所耗费的时长小于预设时长阈值时,才会使用临时表替换原表,以严格保证原表中数据与临时表中的数据一致,避免出现由于变更表格式后的新表数据与原表数据不一致而导致业务受损。本发明实施例还提供了一种电子设备,参考图4,图4为本发明实施例的变更表格式的装置的结构图,装置包括:创建单元401,用于创建一张原表格式的修改记录表,以及一张对原表进行表格式变更后的临时表;记录单元402,用于在插入有修改触发器对应的原表中的数据被修改,并触发修改触发器后,在修改记录表中记录原表的修改信息;写入单元403,用于将修改后的原表中的所有数据写入临时表;第一修改单元404,用于根据修改记录表中记录的修改信息,对临时表中的数据进行第一修改操作;置换单元405,用于使用修改后的临时表置换修改后的原表,并删除修改后的原表。可选的,所述修改记录表包括用于记录插入信息、更改信息和删除信息的字段;所述记录单元402,具体用于修改触发器在修改记录表中对应的字段中,插入原表中修改后的数据和修改后的数据对应的修改类型,修改类型包括插入、更改和删除;第一修改单元404,具体用于根据修改记录表中记录的修改后的数据和修改后的数据对应的修改类型,对临时表中的数据进行相应的修改操作。可选的,装置还包括:第一校验单元,用于使用预设的校验函数,对修改后的原表中的数据以及修改后的临时表中的数据进行一致性校验;第一执行单元,用于当校验单元的校验结果为修改后的原表中的数据与修改后的临时表中的数据不一致时,返回执行根据修改记录表中记录的修改信息,对临时表中的数据进行第一修改操作的步骤;第二执行单元,用于当校验单元的校验结果为修改后的原表中的数据与修改后的临时表中的数据一致时,执行使用修改后的临时表置换修改后的原表的步骤。可选的,第一校验单元,具体用于使用预设的校验函数,通过计算修改后的原表中每个数据行对应的第一校验值,以及修改后的临时表中的每个数据行对应的第二校验值,对修改后的原表中每个数据行以及修改后的临时表中的每个数据行进行一致性校验;第一执行单元,包括:修改子单元、确定子单元、校验子单元和执行子单元;修改子单元,用于当修改后的原表中的数据与修改后的临时表中的数据不一致时,根据修改记录表中记录的修改信息,对临时表中的数据进行第二修改操作;确定子单元,用于根据修改后的原表中每个数据行对应的第一校验值,以及修改后的临时表中的每个数据行对应的第二校验值,确定错误行,其中,当修改后的原表中第一数据行对应的第一校验值,与变更后的临时表中、与第一数据行处于同一行的第二数据行对应的第二校验值不一致时,第一数据行和第二数据行均为错误行;校验子单元,用于使用校验函数,对错误行进行一致性校验;执行子单元,用于当错误行中的数据不一致时,返回执行根据修改记录表中记录的修改信息,对临时表中的数据进行第二修改操作的步骤。可选的,装置还包括:获取单元,用于获取对错误行进行一致性校验的处理过程所耗费的时长;第二执行单元,具体用于当错误行中的数据一致,且使用时长小于预设时长阈值时,执行使用修改后的临时表置换修改后的原表的步骤。可选的,执行子单元,具体用于当错误行中的数据不一致,或者,时长大于或等于预设时长阈值时,返回执行根据修改记录表中记录的修改信息,对临时表中的数据进行第二修改操作的步骤。可选的,装置还包括:第二修改单元,用于根据变化记录表中记录的修改信息,对修改后的临时表中的数据进行修改操作;第二校验单元,用于使用预设的校验函数,对修改后的原表中的数据以及修改后的临时表中的数据进行一致性校验;第三执行单元,用于当修改后的原表中的数据与修改后的临时表中的数据一致时,执行使用修改后的临时表置换修改后的原表的步骤。可见,在本发明实施例提供的变更表格式的装置中,可以先创建一张原表格式的修改记录表,以及一张对原表格式进行表格式变更后的临时表;然后,向原表中插入修改触发器;在由于原表中的数据发生变更而触发修改触发器后,在修改记录表中记录原表的修改信息;接下来,将修改后的原表中的所有数据写入临时表;随后,根据修改记录表中记录的修改信息,对临时表中的数据进行修改操作;最后,使用修改后的临时表置换修改后的原表,并删除修改后的原表;至此,完成原表的表格式变更操作。这样,在用户对原表的表格式进行更改的过程中,当用户需要修改原表数据时,由于修改数据所触发的修改触发器不会直接对临时表进行修改操作,使得原表不会被锁表,从而避免影响其他业务程序对原表进行操作,保证在对原表的表格式进行更改的过程中不会其他业务的正常运行。本发明实施例还提供了一种电子设备,参考图5,图5为本发明实施例的电子设备的示意图,如图5所示,包括处理器501和存储器502;存储器502,用于存放计算机程序;处理器501,用于执行存储器502上所存放的程序时,实现如下步骤:创建一张原表格式的修改记录表,以及一张对原表进行表格式变更后的临时表;在插入有修改触发器对应的原表中的数据被修改,并触发修改触发器后,在修改记录表中记录原表的修改信息;将修改后的原表中的所有数据写入临时表;根据修改记录表中记录的修改信息,对临时表中的数据进行第一修改操作;使用修改后的临时表置换修改后的原表,并删除修改后的原表。在一些示例中,上述电子设备还可以包括用于处理器501和存储器503之间进行通信的通信总线,提到的通信总线可以是外设部件互连标准(peripheralcomponentinterconnect,pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,eisa)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。在一些示例中,上述电子设备还可以包括用于上述电子设备与其他设备之间的通信的通信接口。存储器可以包括随机存取存储器(randomaccessmemory,ram),也可以包括非易失性存储器(non-volatilememory,nvm),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。上述的处理器可以是通用处理器,包括中央处理器(centralprocessingunit,cpu)、网络处理器(networkprocessor,np)等;还可以是数字信号处理器(digitalsignalprocessing,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现场可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可见,本发明实施例提供的电子设备,可以先创建一张原表格式的修改记录表,以及一张对原表格式进行表格式变更后的临时表;然后,向原表中插入修改触发器;在由于原表中的数据发生变更而触发修改触发器后,在修改记录表中记录原表的修改信息;接下来,将修改后的原表中的所有数据写入临时表;随后,根据修改记录表中记录的修改信息,对临时表中的数据进行修改操作;最后,使用修改后的临时表置换修改后的原表,并删除修改后的原表;至此,完成原表的表格式变更操作。这样,在用户对原表的表格式进行更改的过程中,当用户需要修改原表数据时,由于修改数据所触发的修改触发器不会直接对临时表进行修改操作,使得原表不会被锁表,从而避免影响其他业务程序对原表进行操作,保证在对原表的表格式进行更改的过程中不会其他业务的正常运行。本发明实施例再提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行如下步骤:创建一张原表格式的修改记录表,以及一张对原表进行表格式变更后的临时表;在插入有修改触发器对应的原表中的数据被修改,并触发修改触发器后,在修改记录表中记录原表的修改信息;将修改后的原表中的所有数据写入临时表;根据修改记录表中记录的修改信息,对临时表中的数据进行第一修改操作;使用修改后的临时表置换修改后的原表,并删除修改后的原表。可见,本发明实施例提供的计算机可读存储介质,可以先创建一张原表格式的修改记录表,以及一张对原表格式进行表格式变更后的临时表;然后,向原表中插入修改触发器;在由于原表中的数据发生变更而触发修改触发器后,在修改记录表中记录原表的修改信息;接下来,将修改后的原表中的所有数据写入临时表;随后,根据修改记录表中记录的修改信息,对临时表中的数据进行修改操作;最后,使用修改后的临时表置换修改后的原表,并删除修改后的原表;至此,完成原表的表格式变更操作。这样,在用户对原表的表格式进行更改的过程中,当用户需要修改原表数据时,由于修改数据所触发的修改触发器不会直接对临时表进行修改操作,使得原表不会被锁表,从而避免影响其他业务程序对原表进行操作,保证在对原表的表格式进行更改的过程中不会其他业务的正常运行。需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1