CN109086382A - 一种数据同步方法、装置、设备及存储介质 - Google Patents
一种数据同步方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN109086382A CN109086382A CN201810827900.1A CN201810827900A CN109086382A CN 109086382 A CN109086382 A CN 109086382A CN 201810827900 A CN201810827900 A CN 201810827900A CN 109086382 A CN109086382 A CN 109086382A
- Authority
- CN
- China
- Prior art keywords
- autoincrementing
- record
- target data
- row
- supplementary table
- 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.)
- Granted
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开了一种数据同步方法、装置、设备及存储介质,其中,该方法包括:获取对行表的增量操作;通过辅助表记录所述增量操作的信息;其中,所述增量操作的信息包括所述增量操作的类型以及所述增量操作对应的行表的行号,或者包括所述增量操作的类型以及所述增量操作对应的行表的行号和列号;根据所述增量操作信息确定所述行表中的增量数据,并将所述增量数据同步到列表中。本发明实施例可以提高数据同步的效率。
Description
技术领域
本发明实施例涉及数据同步技术领域,尤其涉及一种数据同步方法、装置、设备及存储介质。
背景技术
行存储表(简称行表)和列存储表(简称列表)由于其数据存储方式和管理方式的差异,导致了它们在做不同操作时性能各有优劣。其中,行表的增删改操作(INSERT\DELETE\UPDATE)性能较好,列表的查询操作(SELECT)性能较好。
在实际的应用中,可以使用一个行表来管理数据,并且同时使用一个列表来分析数据。具体做法是先创建一个行表,可以直接对行表进行增删改操作;然后再创建一个列表,每次分析数据时,需要把行表中的数据全部查询出来,再将查询出来的数据同步到列表中。但是由于每次分析数据时,均需要将行表中的数据全部查询出来,再同步到列表中,数据同步的效率较低。
发明内容
本发明提供一种数据同步方法、装置、设备及存储介质,可以提高数据同步的效率。
第一方面,本发明实施例提供了一种数据同步方法,包括:
获取对行表的增量操作;
通过辅助表记录所述增量操作的信息;其中,所述增量操作的信息包括所述增量操作的类型以及所述增量操作对应的行表的行号,或者包括所述增量操作的类型以及所述增量操作对应的行表的行号和列号;
根据所述增量操作信息确定所述行表中的增量数据,并将所述增量数据同步到列表中。
第二方面,本发明实施例还提供了一种数据同步装置,包括:
获取模块,用于获取对行表的增量操作;
信息记录模块,用于通过辅助表记录所述增量操作的信息;其中,所述增量操作的信息包括所述增量操作的类型以及所述增量操作对应的行表的行号,或者包括所述增量操作的类型以及所述增量操作对应的行表的行号和列号;
同步模块,用于根据所述增量操作信息确定所述行表中的增量数据,并将所述增量数据同步到列表中。
第三方面,本发明实施例还提供了一种设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明实施例提供的数据同步方法。
第四方面,本发明实施例提供的一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本发明实施例提供的数据同步方法。
本发明实施例提供的技术方案,通过辅助表记录增量操作的信息,通过记录的增量操作的信息将行表中的增量数据同步到列表中,当数据同步时,避免了将行表中的数据全部查询的情况,可以提高数据同步的效率。
附图说明
图1是本发明实施例提供的一种数据同步方法流程图;
图2是本发明实施例提供的一种数据同步装置结构框图;
图3是本发明实施例提供的一种设备结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
图1是本发明实施例提供的一种数据同步方法流程图,所述方法由数据同步装置来执行,所述装置由软件和/或硬件来执行,所述装置可以配置在终端、服务器等设备中,所述方法可以应用于将行表中的数据同步到列表中的场景中,如图1所示,本发明实施例提供的技术方案包括:
S110:获取对行表的增量操作。
在本发明实施例中,增量操作可以是上一次数据同步之后,对行表的增、删、改和TRUNCATE操作。其中,当用户对行表进行增量操作时,设备获取用户对行表的增量操作。
S120:通过辅助表记录所述增量操作的信息;其中,所述增量操作的信息包括所述增量操作的类型以及所述增量操作对应的行表的行号,或者包括所述增量操作的类型以及所述增量操作对应的行表的行号和列号。
在本发明实施例中,辅助表可以包括增量操作的类型以及增量操作对应的行表的行号,或者包括增量操作的类型以及增量操作对应的行表的行号和列号中,还可以包括其他信息。其中,表1是辅助表的结构,如图表1所示,表1中可以记录增量操作的类型,可以记录增量操作对应的行表的行号,当增量操作的类型为更新时,辅助表还可以记录增量操作对应的行表的列号。
表1
其中,辅助表中记录的不是行表按照时间流水线式的操作历史记录,而是一段时间内有效的增量操作。
在本发明一个实施方式中,若所述增量操作为非批量插入操作,可选的,所述通过辅助表记录所述增量操作的信息,包括:在辅助表中添加一条非批量插入记录;所述非批量插入记录,用于记录本次增量操作类型为非批量插入操作,以及所述非批量插入操作对应的行表的行号。其中,非批量插入操作对应的行表的行号是指对行表进行非批量插入的行号。例如,若非批量插入操作对应的行表的行号为4,则表明在行表中插入第4行。
表2是辅助表中的非批量插入记录,如表2所示,其中“1”表示行插入,也就是非批量插入操作。其中,非批量插入操作是指向行表中每次插入一行数据。
表2
字段 | 数据 |
ORG_ROWID | 行表插入记录的ROWID |
OP_TYPE | 1(表示行插入) |
COLMAP | NULL |
在本发明实施例的一个实施方式中,若所述增量操作为批量插入操作;可选的,所述通过辅助表记录所述增量操作的信息,包括:在辅助表中添加批量插入记录;其中,所述批量插入记录,用于记录本次增量操作的类型为批量插入操作,以及批量插入操作对应的行表的起始行号和结束行号。
其中,批量插入操作对应的行表的起始行号是指对行表批量插入的起始行号,批量插入操作对应的行表的结束行号是指批量插入的结束行号。表3是批量插入记录,如表3所示,批量插入记录中,记录了本次增量操作的类型为批量插入操作,以及批量插入的起始行号和结束行号,其中,批量插入的结束行号记录在COLMAP字段中。
表3
字段 | 数据 |
ORG_ROWID | 批量插入起始ROWID |
OP_TYPE | 3(表示批量插入操作) |
COLMAP | 批量插入结束ROWID |
在本发明实施例的一个具体实施方式中,若所述增量操作为更新操作;可选的,所述通过辅助表记录所述增量操作的信息,包括:若辅助表中包含目标数据行的插入记录,且所述插入记录对当前事务可见,在所述辅助表中不再添加所述更新操作的记录,并将所述插入记录的事务号为当前事务号;其中,所述插入记录包括所述目标数据行的非批量插入记录或所述目标数据行处于批量插入区间的批量插入记录,所述目标数据行是:所述行表中进行更新操作的数据行;若在辅助表中,所述目标数据行的操作记录中包含的增量操作类型不是更新操作,且所述目标数据行的操作记录对当前事务不可见,或者,所述辅助表中不包含目标数据行的操作记录,向所述辅助表中添加一条更新记录;其中,所述更新记录,用于记录本次增量操作类型为更新操作,以及所述更新操作对应的行表的行号以及列号;若在辅助表中,所述目标数据行的操作记录中包含的增量操作类型是更新操作,且所述目标数据行的操作记录对当前事务可见,将所述更新操作对应的列号更新到所述目标数据行的操作记录中;若所述目标数据行的操作记录对当前事务不可见,当确定其他事务提交时,判断所述目标数据行的操作记录是否存在;若否,在所述辅助表中插入一条更新记录;若是,重复在辅助表中不再添加更新操作的记录的操作,或者重复向辅助表中添加一条更新记录的操作,或者重复将更新操作对应的列号更新的操作。具体的,当获取到对行表的目标数据行进行更新操作时,若辅助表中包含了目标数据行的插入记录,且目标数据行的插入记录对当前事务可见,在辅助表中不再添加目标数据行的更新记录。其中,目标数据行的插入记录对当前事务可见,即是对目标数据行进行插入操作的事务已经提交且不存在其他操作或者本事务包含对目标数据行的插入操作。举例说明,当获取到行表中的第4行数据进行更新操作时,若辅助表中已经包含了第4行数据的插入记录,相对当前的更新操作,不存在对第4行数据的其他操作,则在辅助表中不再添加更新记录。
具体的,当获取到对行表的目标数据行进行更新操作时,若在辅助表中,目标数据行的操作记录中包含的增量操作类型不是更新操作,且目标数据行的操作记录对当前事务不可见,向辅助表中添加一条记录。其中,目标数据行的操作记录对当前事务不可见说明其他事务对该操作记录执行了FOR UPDATE的查询操作或者执行了上述几种修改事务号的操作,可以理解为另一个事务正在准备对目标数据行做数据同步操作或者其他操作,无论该事务对这目标数据行的操作记录的处理结果如何,为了兼顾未处理或处理之后删除两种情况,避免出错的现象,当前事务向辅助表中插入一条更新记录。其中,当更新事务号后,如果该事务不提交,那么该操作记录对于其他事务而言都是不可见的。其他事务可以查询到该条操作记录,FOR UPDATE的查询也是相同的作用。其中,事务号是表的伪列,在创建表的时候自动创建,不由用户指定,其列名是TRXID。用户可以通过SELECT TRXID FROM TABLE来查询记录的事务,这里指的就是更新该列的值。当获取到对行表的目标数据行进行更新操作时,若辅助表中不包含目标数据行的操作记录,向辅助表中添加一个更新记录。
具体的,当获取到对行表的目标数据行进行更新操作时,在辅助表中,目标数据行的操作记录中包含的增量操作的类型是更新操作,并且目标数据行的操作记录对当前事务可见,将更新操作的列号更新到目标数据行的操作记录中。例如,当获取到对行表的第4行数据进行更新操作时,若在辅助表中记录了第4数据行的操作类型是更新操作,且第4数据行的操作记录对当前事务可见,将第4数据行需要更新的列号更新到该数据行的更新记录中。
具体的,当获取到对行表中的目标数据行进行更新操作时,若辅助表中目标数据行的操作记录中包含的增量操作的类型是更新操作,且目标数据行的操作记录对当前事务不可见,需要等待其他事务提交后重新获取目标数据行的操作记录,根据目标数据行的操作记录中包含的增量操作类型以及操作记录的可见性,对辅助表执行相应的操作。其中,目标数据行的操作记录是更新记录,并且对当前事务不可见,则表明其他事务修改了该条记录的事务号,例如FOR UPDATE的查询。由于ORG_ROWID字段和OP_TYPE字段是主键,不能向辅助表直接插入更新记录,会导致违反主键约束。
表4是辅助表中的更新记录,如表4所示,更新记录中记录了增量操作的类型为更新操作,以及更新操作对应的行号以及列号,其中,更新操作对应的列号记录在COLMAP字段中,COLMAP字段中记录的信息可以用16进制数表示,如0x23,表示更新了第1、2、6列,可以理解为转化为二进制为100011,按位记录,遇到1的就是更新的列号。
字段 | 数据 |
ORG_ROWID | 行表更新行的ROWID |
OP_TYPE | 4(表示更新) |
COLMAP | 按位记录更新的列号 |
在本发明实施例的一个具体实施方式中,若所述增量操作为删除操作;可选的,所述通过辅助表记录所述增量操作的信息,可以包括:若辅助表中包含所述行表中目标数据行的操作记录,且所述目标数据行的操作记录对当前事务不可见,或者,所述辅助表中不包含所述目标数据行的操作记录,在所述辅助表中添加一条删除记录;其中,所述删除记录,用于记录本次增量操作的类型为删除操作,以及删除操作对应的目标数据行的行号;所述目标数据行是:所述行表中进行删除操作的数据行;若在所述辅助表中,所述目标数据行的操作记录中包含的增量操作的类型是非批量插入操作,且所述目标数据行的操作记录对当前事务可见,将所述目标数据行的操作记录进行删除;若在所述辅助表中,所述目标数据行的操作记录中包含的增量操作的类型是更新操作,且所述目标数据行的操作记录对当前事务可见,将目标数据行的记录中包含的增量操作类型更改为删除操作;若在所述辅助表中,所述目标数据行处于批量插入记录的批量插入区间,且该批量插入记录对当前事务可见,不再添加操作记录,并更新批量插入记录的事务号为当前事务号。
具体的,当获取到对行表中目标数据行进行删除操作时,若辅助表中包含目标数据行的操作记录,且该操作记录对当前事务不可见,在辅助表中添加一条删除记录。当获取到对行表中目标数据行进行删除操作时,若辅助表中不包含目标数据行的操作记录,在辅助表中添加一条删除记录。其中,目标数据行的操作记录可以是目标数据行的更新记录或插入记录等。例如,当获取到对行表中的第1数据行进行删除操作时,若辅助表中已经包含第1数据行的更新记录,且该更新记录对当前事务不可见,在辅助表中添加一条第1数据行的删除记录。或者若辅助表不包含第1数据行的操作记录,在辅助表中添加一条第1数据行的删除记录。
具体的,当获取到对行表中目标数据行进行删除操作时,若目标数据行的操作记录包含的增量操作的类型是非批量插入操作,并且该操作记录对当前事务可见,将该目标数据行的操作记录进行删除。
具体的,当获取到对行表中目标数据行进行删除操作时,若在辅助表中,目标数据行的操作记录中包含的增量操作的类型是更新操作,且目标数据行的操作记录对当前事务可见,将目标数据行的操作记录中包含的增量操作类型由更新操作修改为删除操作。
具体的,当获取到对行表中目标数据行进行删除操作时,若目标数据行处于批量插入记录的批量插入区间,不添加新的操作记录,并修改相应的批量插入记录的事务号为当前事务号。例如,当获取到对行表中第50数据行进行删除操作时,若辅助表中的批量插入记录中记录的插入的起始行号和结束行号分别是1和100,则批量插入记录的批量插入区间是[1,100],则删除的第50数据行的行号处于1-100之间,不对辅助表进行操作,即辅助表保持不变。当对行表的目标数据行进行删除操作时,若目标数据行处于批量插入记录的批量插入区间,则只需要将行表中目标数据行删除。当根据批量插入记录同步行表的数据时,根据批量插入记录中包含的行号进行查询,从而确定需要同步的数据。在根据插入记录同步数据时,由于已经删除了目标数据行,不存在目标数据行的行号,所以数据同步时,查询不到目标数据行中的数据,所以不需要再添加目标数据行的删除记录。修改事务号是为了让该条批量插入记录对其他事务不可见,如此一来,其他事务如果也删除了批量区间的行,则需要插入一条删除记录。
表5是辅助表中的删除记录,如表5所示,删除记录中记录了增量操作的类型为删除操作,以及删除操作对应的行号。
表5
字段 | 数据 |
ORG_ROWID | 行表删除行的ROWID |
OP_TYPE | 5(表示删除操作) |
COLMAP | NULL |
在本发明实施例的一个具体实施方式中,若所述增量操作为TRUNCATE操作;可选的,所述通过辅助表记录所述增量操作的信息,包括:对辅助表执行TRUNCATE操作,在所述辅助表中添加一条TRUNCATE记录,其中,所述TRUNCATE记录,用于记录本次增量操作的类型为TRUNCATE操作,以及TRUNCATE操作对应的行表的行号信息;其中,当增量操作为TRUNCATE操作时,是指对所述行表的所有数据进行清除。当对辅助表执行TRUNCATE操作时,是将辅助表中的所有记录进行清除。
表6是辅助表中的TRUNCATE记录,如表6所示,ORG_ROWID字段中的“0”表示所有行,OP_TYPE字段的“0”表示增量操作的类型为TRUNCATE操作。
表6
字段 | 数据 |
ORG_ROWID | 0 |
OP_TYPE | 0(表示TRUNCATE操作) |
COLMAP | NULL |
S130:根据所述增量操作信息确定所述行表中的增量数据,并将所述增量数据同步到列表中。
在本发明实施例中,增量数据是指行表中进行增量操作的数据。根据增量操作信息可以确定行表中的增量数据,并将增量数据同步到列表中。例如,在时刻A,行表有一个快照1,时刻B,行表有一个快照2。当用户在时刻A时把行表数据同步到列表后,此时辅助表中记录为空。在时刻B,辅助表中记录了行表从快照1变化为快照2的增量操作信息,根据增量操作信息确定行表中的增量变化相关的数据都在快照2中,并将快照2中该部分增量变化数据同步到列表中。
本发明实施例提供的技术方案,通过辅助表记录增量操作的信息,通过记录的增量操作的信息将行表中的增量数据同步到列表中,可以提高数据同步的效率。
本发明提供操作记录以及操作记录的规则,执行增量更新可以由用户根据辅助表自行操作,也可以由系统自动操作。真正执行增量更新是由用户根据操作记录自行操作。辅助表记录的信息,为某一时间点后源表(行表)数据的增量变化信息。其中,源表数据每次增删改之后,系统调用相应的处理辅助表的接口,按照设定规则对辅助表进行操作,记录增量操作的信息。
本发明实施例中,源表(就是行表)和目标表(就是列表)的数据并不是实时一致的,并且相对于基于逻辑日志同步表数据的方法,如数据复制(DATA REPLICATION)来说,本发明实施例提供的辅助表记录的信息并不需要记录完整的操作记录,通过制定规则是舍弃某些冗余操作的记录,简化辅助表记录的信息。例如:当更新一行数据时,如果发现该行数据在辅助表中已经有一条插入或更新记录,那么该更新记录不需要记录。如,第一步,在第5行INSERT(插入)或UPDATE(更新)一条数据(1,1,1);第二步,再UPDATE(更新)该行数据为(2,1,1)。这两步操作的结果就是在第5行插入或更新了一行数据(2,1,1),因此,在辅助表中,只要记录在第5行插入或更新了一行数据即可,第二步的更新操作就不用记录了。
当数据同步时,只需要从辅助表中获取待同步的数据行的行号,或者行号和列号,然后从源表中获取数据。一般情况下,在一次的同步过程中每行数据只有一次操作,提高了数据同步的效率。
现有技术中,通过触发器记录增量操作的信息,在源表上创建INSERT(插入)、UPDATE(更新)和DELETE(删除)触发器,当对行表进行增量操作时,触发对应触发器对辅助表进行操作。但是本发明实施例提供的辅助表比使用触发器简单实现记录操作信息有以下优点:
(1)、效率更高。若触发器来实现记录增量操作的信息,服务器频繁调用触发器,会消耗服务器的资源。
(2)、更简洁。当对源表进行批量插入操作时,本发明实施例提供的方法可以通过记录两条数据来表示此次批量插入的区间,相对比非批量插入压缩了操作记录的数量。若使用触发器实现记录增量操作的信息,每次对源表插入一条数据后要调用触发器,无法实现批量插入操作的方式,并且会产生非批量插入操作的记录,影响性能。
(3)、使用触发器无法解决并发问题。当对行表中的目标数据行进行同步时,会修改操作记录的事务号,同步结束后会删除该行数据的操作记录。如果数据同步和对源表进行增删改并发进行,由于无法判断通过可见性执行对应的操作,会造成等待较长时间,影响使用。本发明处理上述并发问题时,仅仅在“如果辅助表中目标数据行的操作记录包含的增量操作类型是更新操作,且该操作记录对当前事务不可见”的情况时,才会等待其他事务处理结束,对辅助表进行相应的操作,其他情况均不需要等待其他的事务提交。
(4)、使用触发器无法记录采用导入工具导入到行表中的数据。而本发明提供的辅助表可以记录采用导入工具导入到行表中的数据,根据不同的情况记录是批量插入操作或者非批量插入操作。
需要说明的是,本发明是实施例提及的源表是指行表。
在上述实施例的基础上,上述方法可键以通过编写结构化查询语言SQL同步脚本来执行,在编写脚本时,可以遵守如下原则:如果源表(行表)有主键,如果没有特殊的限制或要求,列表也设置同样的主键;如果源表没有主键,为了准确同步,最好在列表上添加一个辅助同步的主键列,同步时将源表的rowid列的值插入该列中;因为在数据同步时源表可能仍有并发的DML,即对源表有并发的操作,脚本中查询日志时建议使用for update子句。
对具体的脚本,进行举例说明:
建表:列表多建一辅助列ROW_ID,为了保持同步过程中定位记录。
CREATE TABLE T1(C1 INT,C2 VARCHAR)WITH ADVANCED LOG;
CREATE HUGE TABLE T2(ROW_ID BIGINT,C1 INT,C2 VARCHAR);
向源表中插入数据,脚本如下:
INSERT INTO T1VALUES(1,'a');
INSERT INTO T1 SELECT 1,'a'FROM DUAL CONNECT BY LEVEL<=100;
其中,此时辅助表T1$ALOG中有3条记录,如下:
SELECT*FROM T1$ALOG;
根据设定规则制定脚本,运行脚本,同步数据,并删除已同步的记录,该过程的脚本可以是:
当更新源表的数据时,脚本可以是:
DELETE FROM T1 WHERE ROWID=1;
UPDATE T1 SET C1=2 WHERE ROWID=2;
此时,辅助表中有2条记录
SELECT*FROM T1$ALOG;
根据设定规则制定脚本,运行脚本,同步数据并删除已同步的记录,脚本可以是:
此时,源表(行表)数据量(行数)如下:
SQL>SELECT count(*)FROM T1;
此时,列表中的数据量(行数)是:
SQL>SELECT count(*)FROM T2;
此时,辅助表中的数据量(行数)是:
SQL>SELECT count(*)FROM T1$alog;
图2是本发明实施例提供的一种数据同步装置,如图2所示,所述数据同步装置包括:获取模块210、信息记录模块220和同步模块230。
获取模块210,用于获取对行表的增量操作;
信息记录模块220,用于通过辅助表记录所述增量操作的信息;其中,所述增量操作的信息包括所述增量操作的类型以及所述增量操作对应的行表的行号,或者包括所述增量操作的类型以及所述增量操作对应的行表的行号和列号;
同步模块230,用于根据所述增量操作信息确定所述行表中的增量数据,并将所述增量数据同步到列表中。
可选的,若所述增量操作为非批量插入操作;所述信息记录模块220,用于在辅助表中添加一条非批量插入记录;所述非批量插入记录,用于记录本次增量操作类型为非批量插入操作,以及所述非批量插入操作对应的行表的行号。
可选的,若所述增量操作为批量插入操作;所述信息记录模块220,用于在辅助表中添加批量插入记录;其中,
所述批量插入记录,用于记录本次增量操作的类型为批量插入操作,以及批量插入操作对应的行表的起始行号和结束行号。
可选的,若所述增量操作为更新操作;所述信息记录模块220,用于若辅助表中包含目标数据行的插入记录,且所述插入记录对当前事务可见,在所述辅助表中不再添加所述更新操作的记录,并将插入记录的事务号更新为当前事务号;其中,所述插入记录包括所述目标数据行的非批量插入记录或所述目标数据行处于批量插入区间的批量插入记录;所述目标数据行是:所述行表中进行更新操作的数据行;
若在辅助表中,所述目标数据行的操作记录中包含的增量操作类型不是更新操作,且所述目标数据行的操作记录对当前事务不可见,或者,所述辅助表中不包含目标数据行的操作记录,向所述辅助表中添加一条更新记录;其中,所述更新记录,用于记录本次增量操作类型为更新操作,以及所述更新操作对应的行表的行号以及列号;
若在辅助表中,所述目标数据行的操作记录中包含的增量操作类型是更新操作,且所述目标数据行的操作记录对当前事务可见,将所述更新操作对应的列号更新到所述目标数据行的操作记录中;
若所述目标数据行的操作记录对当前事务不可见,当确定其他事务提交时,判断所述目标数据行的操作记录是否存在;
若否,在所述辅助表中插入一条更新记录;
若是,重复在辅助表中不再添加更新操作的记录的操作,或者重复向辅助表中添加一条更新记录的操作,或者重复将更新操作对应的列号更新的操作。
可选的,所述增量操作为删除操作;所述信息记录模块220,用于若辅助表中包含所述行表中目标数据行的操作记录,且所述目标数据行的操作记录对当前事务不可见,或者,所述辅助表中不包含所述目标数据行的操作记录,在所述辅助表中添加一条删除记录;
其中,所述删除记录,用于记录本次增量操作的类型为删除操作,以及删除操作对应的目标数据行的行号;所述目标数据行是:所述行表中进行删除操作的数据行;
若在所述辅助表中,所述目标数据行的操作记录中包含的增量操作的类型是非批量插入操作,且所述目标数据行的操作记录对当前事务可见,将所述目标数据行的操作记录进行删除;
若在所述辅助表中,所述目标数据行的操作记录中包含的增量操作的类型是更新操作,且所述目标数据行的操作记录对当前事务可见,将目标数据行的记录中包含的增量操作类型更改为删除操作;
若在所述辅助表中,所述目标数据行处于批量插入记录的批量插入区间,且该批量插入记录对当前事务可见,不再添加操作记录,并更新批量插入记录的事务号为当前事务号。
可选的,若所述增量操作为TRUNCATE操作;所述信息记录模块220,用于对辅助表执行TRUNCATE操作;在所述辅助表中添加一条TRUNCATE记录,其中,所述TRUNCATE记录,用于记录本次增量操作的类型为TRUNCATE操作,以及TRUNCATE操作对应的行表的行号信息;其中,所述TRUNCATE操作是指对所述行表的所有数据进行清除。
上述产品可执行本发明任意实施例所提供的方法,具备执行方法相应的功能模块和有益效果。
图3是本发明实施例提供的一种设备结构示意图,如图3所示,该设备包括:
一个或多个处理器310,图3中以一个处理器310为例;
存储器320;
所述设备还可以包括:输入装置330和输出装置340。
所述设备中的处理器310、存储器320、输入装置330和输出装置340可以通过总线或者其他方式连接,图3中以通过总线连接为例。
存储器320作为一种非暂态计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的一种数据同步方法对应的程序指令/模块(例如,附图2所示的获取模块210、信息记录模块220和同步模块230)。处理器310通过运行存储在存储器320中的软件程序、指令以及模块,从而执行计算机设备的各种功能应用以及数据处理,即实现上述方法实施例的一种数据同步方法,即:
获取对行表的增量操作;
通过辅助表记录所述增量操作的信息;其中,所述增量操作的信息包括所述增量操作的类型以及所述增量操作对应的行表的行号,或者包括所述增量操作的类型以及所述增量操作对应的行表的行号和列号;
根据所述增量操作信息确定所述行表中的增量数据,并将所述增量数据同步到列表中。
存储器320可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据计算机设备的使用所创建的数据等。此外,存储器320可以包括高速随机存取存储器,还可以包括非暂态性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态性固态存储器件。在一些实施例中,存储器320可选包括相对于处理器310远程设置的存储器,这些远程存储器可以通过网络连接至终端设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置330可用于接收输入的数字或字符信息,以及产生与计算机设备的用户设置以及功能控制有关的键信号输入。输出装置340可包括显示屏等显示设备。
本发明实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明实施例提供的一种数据同步方法:
获取对行表的增量操作;
通过辅助表记录所述增量操作的信息;其中,所述增量操作的信息包括所述增量操作的类型以及所述增量操作对应的行表的行号,或者包括所述增量操作的类型以及所述增量操作对应的行表的行号和列号;
根据所述增量操作信息确定所述行表中的增量数据,并将所述增量数据同步到列表中。
可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如”C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (10)
1.一种数据同步方法,其特征在于,包括:
获取对行表的增量操作;
通过辅助表记录所述增量操作的信息;其中,所述增量操作的信息包括所述增量操作的类型以及所述增量操作对应的行表的行号,或者包括所述增量操作的类型以及所述增量操作对应的行表的行号和列号;
根据所述增量操作信息确定所述行表中的增量数据,并将所述增量数据同步到列表中。
2.根据权利要求1所述的方法,其特征在于,若所述增量操作为非批量插入操作;
所述通过辅助表记录所述增量操作的信息,包括:
在辅助表中添加一条非批量插入记录;所述非批量插入记录,用于记录本次增量操作类型为非批量插入操作,以及所述非批量插入操作对应的行表的行号。
3.根据权利要求1所述的方法,其特征在于,若所述增量操作为批量插入操作;
所述通过辅助表记录所述增量操作的信息,包括:
在辅助表中添加批量插入记录;其中,
所述批量插入记录,用于记录本次增量操作的类型为批量插入操作,以及批量插入操作对应的行表的起始行号和结束行号。
4.根据权利要求1所述的方法,其特征在于,若所述增量操作为更新操作;
所述通过辅助表记录所述增量操作的信息,包括:
若所述辅助表中包含目标数据行的插入记录,且所述插入记录对当前事务可见,在所述辅助表中不再添加所述更新操作的记录,并将所述插入记录的事务号更新为当前事务号;其中,所述插入记录包括所述目标数据行的非批量插入记录或所述目标数据行处于批量插入区间的批量插入记录,所述目标数据行是:所述行表中进行更新操作的数据行;
若在所述辅助表中,所述目标数据行的操作记录中包含的增量操作类型不是更新操作,且所述目标数据行的操作记录对当前事务不可见,或者,所述辅助表中不包含目标数据行的操作记录,向所述辅助表中添加一条更新记录;其中,所述更新记录,用于记录本次增量操作类型为更新操作,以及所述更新操作对应的行表的行号以及列号;
若在所述辅助表中,所述目标数据行的操作记录中包含的增量操作类型是更新操作,且所述目标数据行的操作记录对当前事务可见,将所述更新操作对应的列号更新到所述目标数据行的操作记录中;
若所述目标数据行的操作记录对当前事务不可见,当确定其他事务提交时,判断所述目标数据行的操作记录是否存在;
若否,在所述辅助表中插入一条更新记录;
若是,重复在辅助表中不再添加更新操作的记录的操作,或者重复向辅助表中添加一条更新记录的操作,或者重复将更新操作对应的列号更新的操作。
5.根据权利要求1所述的方法,其特征在于,所述增量操作为删除操作;
所述通过辅助表记录所述增量操作的信息,包括:
若所述辅助表中包含所述行表中目标数据行的操作记录,且所述目标数据行的操作记录对当前事务不可见,或者,所述辅助表中不包含所述目标数据行的操作记录,在所述辅助表中添加一条删除记录;
其中,所述删除记录,用于记录本次增量操作的类型为删除操作,以及删除操作对应的目标数据行的行号;所述目标数据行是:所述行表中进行删除操作的数据行;
若在所述辅助表中,所述目标数据行的操作记录中包含的增量操作的类型是非批量插入操作,且所述目标数据行的操作记录对当前事务可见,将所述目标数据行的操作记录进行删除;
若在所述辅助表中,所述目标数据行的操作记录中包含的增量操作的类型是更新操作,且所述目标数据行的操作记录对当前事务可见,将目标数据行的操作记录中包含的增量操作类型更改为删除操作;
若在所述辅助表中,所述目标数据行处于批量插入记录的批量插入区间,且该批量插入记录对当前事务可见,不再添加操作记录,并更新批量插入记录的事务号为当前事务号。
6.根据权利要求1所述的方法,其特征在于,若所述增量操作为TRUNCATE操作;
所述通过辅助表记录所述增量操作的信息,包括:
对辅助表执行TRUNCATE操作,并在所述辅助表中添加一条TRUNCATE记录,其中,所述TRUNCATE记录,用于记录本次增量操作的类型为TRUNCATE操作,以及TRUNCATE操作对应的行表的行号信息;其中,所述TRUNCATE操作是指对所述行表的所有数据进行清除。
7.一种数据同步装置,其特征在于,包括:
获取模块,用于获取对行表的增量操作;
信息记录模块,用于通过辅助表记录所述增量操作的信息;其中,所述增量操作的信息包括所述增量操作的类型以及所述增量操作对应的行表的行号,或者包括所述增量操作的类型以及所述增量操作对应的行表的行号和列号;
同步模块,用于根据所述增量操作信息确定所述行表中的增量数据,并将所述增量数据同步到列表中。
8.根据权利要求7所述的装置,其特征在于,若所述增量操作为非批量插入操作;
所述记录模块,用于在辅助表中添加一条非批量插入记录;所述非批量插入记录,用于记录本次增量操作类型为非批量插入操作,以及所述非批量插入操作对应的行表的行号。
9.一种设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-6任一所述的数据同步方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-6任一所述的数据同步方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810827900.1A CN109086382B (zh) | 2018-07-25 | 2018-07-25 | 一种数据同步方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810827900.1A CN109086382B (zh) | 2018-07-25 | 2018-07-25 | 一种数据同步方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109086382A true CN109086382A (zh) | 2018-12-25 |
CN109086382B CN109086382B (zh) | 2021-10-15 |
Family
ID=64838636
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810827900.1A Active CN109086382B (zh) | 2018-07-25 | 2018-07-25 | 一种数据同步方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109086382B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109828977A (zh) * | 2018-12-27 | 2019-05-31 | 东软集团股份有限公司 | 同步表单数据的方法、装置和存储介质及客户端、服务端 |
CN109933606A (zh) * | 2019-03-19 | 2019-06-25 | 上海达梦数据库有限公司 | 一种数据库修改方法、装置、设备及存储介质 |
CN110765204A (zh) * | 2019-09-30 | 2020-02-07 | 武汉达梦数据库有限公司 | 一种对增量同步异常中断情况的处理方法和装置 |
CN111159208A (zh) * | 2019-12-19 | 2020-05-15 | 武汉达梦数据库有限公司 | 一种源端并发导致触发器增量同步异常的处理方法 |
CN112835905A (zh) * | 2021-02-05 | 2021-05-25 | 上海达梦数据库有限公司 | 一种数组类型列的索引方法、装置、设备以及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101094051A (zh) * | 2007-06-27 | 2007-12-26 | 中国移动通信集团四川有限公司 | 数据一致性比对同步的系统和方法 |
CN101102577A (zh) * | 2006-07-07 | 2008-01-09 | 中兴通讯股份有限公司 | 无线通信基站系统前后台数据库表数据增量同步方法 |
CN102193938A (zh) * | 2010-03-01 | 2011-09-21 | 深圳市金蝶中间件有限公司 | 增量数据采集的方法和装置 |
CN103605809A (zh) * | 2013-12-10 | 2014-02-26 | 厦门诚创网络有限公司 | 一种数据同步的方法 |
CN106156302A (zh) * | 2016-06-30 | 2016-11-23 | 上海达梦数据库有限公司 | 一种大字段数据的处理方法及装置 |
US20170168903A1 (en) * | 2015-12-09 | 2017-06-15 | Commvault Systems, Inc. | Live synchronization and management of virtual machines across computing and virtualization platforms and using live synchronization to support disaster recovery |
-
2018
- 2018-07-25 CN CN201810827900.1A patent/CN109086382B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101102577A (zh) * | 2006-07-07 | 2008-01-09 | 中兴通讯股份有限公司 | 无线通信基站系统前后台数据库表数据增量同步方法 |
CN101094051A (zh) * | 2007-06-27 | 2007-12-26 | 中国移动通信集团四川有限公司 | 数据一致性比对同步的系统和方法 |
CN102193938A (zh) * | 2010-03-01 | 2011-09-21 | 深圳市金蝶中间件有限公司 | 增量数据采集的方法和装置 |
CN103605809A (zh) * | 2013-12-10 | 2014-02-26 | 厦门诚创网络有限公司 | 一种数据同步的方法 |
US20170168903A1 (en) * | 2015-12-09 | 2017-06-15 | Commvault Systems, Inc. | Live synchronization and management of virtual machines across computing and virtualization platforms and using live synchronization to support disaster recovery |
CN106156302A (zh) * | 2016-06-30 | 2016-11-23 | 上海达梦数据库有限公司 | 一种大字段数据的处理方法及装置 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109828977A (zh) * | 2018-12-27 | 2019-05-31 | 东软集团股份有限公司 | 同步表单数据的方法、装置和存储介质及客户端、服务端 |
CN109933606A (zh) * | 2019-03-19 | 2019-06-25 | 上海达梦数据库有限公司 | 一种数据库修改方法、装置、设备及存储介质 |
CN110765204A (zh) * | 2019-09-30 | 2020-02-07 | 武汉达梦数据库有限公司 | 一种对增量同步异常中断情况的处理方法和装置 |
CN110765204B (zh) * | 2019-09-30 | 2022-02-01 | 武汉达梦数据库股份有限公司 | 一种对增量同步异常中断情况的处理方法和装置 |
CN111159208A (zh) * | 2019-12-19 | 2020-05-15 | 武汉达梦数据库有限公司 | 一种源端并发导致触发器增量同步异常的处理方法 |
CN111159208B (zh) * | 2019-12-19 | 2022-03-25 | 武汉达梦数据库股份有限公司 | 一种源端并发导致触发器增量同步异常的处理方法 |
CN112835905A (zh) * | 2021-02-05 | 2021-05-25 | 上海达梦数据库有限公司 | 一种数组类型列的索引方法、装置、设备以及存储介质 |
CN112835905B (zh) * | 2021-02-05 | 2023-08-01 | 上海达梦数据库有限公司 | 一种数组类型列的索引方法、装置、设备以及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN109086382B (zh) | 2021-10-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109086382A (zh) | 一种数据同步方法、装置、设备及存储介质 | |
CN110908997B (zh) | 数据血缘构建方法、装置、服务器及可读存储介质 | |
US8892504B2 (en) | Method and system for reconciling meta-data in a data warehouse | |
US11113282B2 (en) | Online optimizer statistics maintenance during load | |
CN111737227B (zh) | 数据修改方法及系统 | |
CN109144785A (zh) | 用于备份数据的方法和装置 | |
CN104881454A (zh) | 参数的更新方法及系统 | |
CN113886485A (zh) | 数据处理方法、装置、电子设备、系统和存储介质 | |
CN110688305B (zh) | 测试环境同步方法、装置、介质、电子设备 | |
CN108920566A (zh) | 一种对SQLite数据库的操作方法、装置及设备 | |
CN112395307A (zh) | 执行语句的方法、装置、服务器及存储介质 | |
CN110502317A (zh) | 一种事务管理的方法和装置 | |
CN111159142B (zh) | 一种数据处理方法及装置 | |
CN104598661A (zh) | 用于涉及it系统的项目的变更请求分析的方法和装置 | |
CN108536447B (zh) | 运维管理方法 | |
CN116010461A (zh) | 数据血缘关系解析方法及装置、存储介质及电子设备 | |
CN114489772A (zh) | 工作流执行方法及装置、存储介质、设备 | |
CN114020789A (zh) | 账单数据查询方法、系统、设备及存储介质 | |
CN114238390A (zh) | 数据仓库优化方法、装置、设备及存储介质 | |
CN112965993B (zh) | 一种数据处理系统、方法、装置及存储介质 | |
CN116226066B (zh) | 低代码平台代码同步方法和装置、电子设备、存储介质 | |
CN108874625A (zh) | 信息处理方法及装置、电子设备、存储介质 | |
CN114723072B (zh) | Exporter组合方法、系统、设备及存储介质 | |
CN111399841B (zh) | 基于区块链的代码处理方法、装置、存储介质与电子设备 | |
US11855851B2 (en) | Lazy graph construction with compression and a hybrid graph-relational model for representing a network topology |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |