CN113094442A - 全量数据同步方法、装置、设备和介质 - Google Patents
全量数据同步方法、装置、设备和介质 Download PDFInfo
- Publication number
- CN113094442A CN113094442A CN202110482727.8A CN202110482727A CN113094442A CN 113094442 A CN113094442 A CN 113094442A CN 202110482727 A CN202110482727 A CN 202110482727A CN 113094442 A CN113094442 A CN 113094442A
- Authority
- CN
- China
- Prior art keywords
- data
- full
- time period
- incremental
- log
- 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
- 238000000034 method Methods 0.000 title claims abstract description 54
- 238000012216 screening Methods 0.000 claims abstract description 33
- 230000001360 synchronised effect Effects 0.000 claims description 22
- 238000003780 insertion Methods 0.000 claims description 18
- 230000037431 insertion Effects 0.000 claims description 18
- 238000004590 computer program Methods 0.000 claims description 7
- 238000012217 deletion Methods 0.000 claims description 5
- 230000037430 deletion Effects 0.000 claims description 5
- 230000008569 process Effects 0.000 description 14
- 230000006870 function Effects 0.000 description 6
- 230000008859 change Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000005192 partition Methods 0.000 description 4
- 238000012545 processing Methods 0.000 description 3
- 238000011084 recovery Methods 0.000 description 2
- 238000012163 sequencing technique Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000013523 data management Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- 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/2358—Change logging, detection, and notification
-
- 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/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/283—Multi-dimensional databases or data warehouses, e.g. MOLAP or ROLAP
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开了一种全量数据同步方法、装置、设备和介质。该方法包括:获取导入数据仓库中的源数据库在当前同步时间段内的增量日志数据;在所述数据仓库中,根据所述增量日志数据以及与相邻前一同步时间段对应的全量数据生成与所述当前同步时间段对应的待定全量数据;对所述待定全量数据进行筛选,确定并存储与所述当前同步时间段对应的目标全量数据。上述技术方案基于源数据库的日志数据在数据仓库中完成源数据库全量数据的同步,不会影响源数据库中数据表的读写操作,提高了数据全量同步的效率,而且全量数据同步的频率也可以提高。
Description
技术领域
本发明实施例涉及计算机技术领域,尤其涉及一种全量数据同步方法、装置、设备和介质。
背景技术
随着互联网和大数据技术的推广和普及,数据仓库逐步成为主流。由于数据仓库具有较大的存储量,且可处理结构化数据,可将数据库中的数据同步至数据仓库中进行处理。
在将数据库中数据同步到数据仓库的应用场景中,通常是将数据表的数据全量同步到数据仓库中。如果数据表的数据量较大,全量数据同步的耗时会很长,而且还会影响数据表的读写,全量数据同步的周期也不能过于频繁。
发明内容
本发明实施例提供一种全量数据同步方法、装置、设备和介质,以解决现有技术中将数据库中数据全量同步到数据仓库时影响数据表读写的问题,同时提高全量数据同步的效率。
第一方面,本发明实施例提供了一种全量数据同步方法,包括:
获取导入数据仓库中的源数据库在当前同步时间段内的增量日志数据;
在所述数据仓库中,根据所述增量日志数据以及与相邻前一同步时间段对应的全量数据生成与所述当前同步时间段对应的待定全量数据;
对所述待定全量数据进行筛选,确定并存储与所述当前同步时间段对应的目标全量数据。
第二方面,本发明实施例还提供了一种全量数据同步装置,包括:
日志获取模块,用于获取导入数据仓库中的源数据库在当前同步时间段内的增量日志数据;
数据合并模块,用于在所述数据仓库中,根据所述增量日志数据以及与相邻前一同步时间段对应的全量数据生成与所述当前同步时间段对应的待定全量数据;
数据筛选存储模块,用于对所述待定全量数据进行筛选,确定并存储与所述当前同步时间段对应的目标全量数据。
第三方面,本发明实施例还提供了一种计算机设备,所述计算机设备包括:
一个或多个处理器;
存储器,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现任意实施例所述的全量数据同步方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现任意实施例所述的全量数据同步方法。
本发明实施例提供的技术方案,首先将待全量数据同步的源数据库在当前同步时间段内的增量日志数据导入数据仓库中,然后在数据仓库中根据所述增量日志数据以及与相邻前一同步时间段对应的全量数据生成与当前同步时间段对应的待定全量数据,对所述待定全量数据进行筛选即可得到与所述当前同步时间段对应的目标全量数据,存储所述目标全量数据实现由源数据库至数据仓库的全量数据同步。上述技术方案基于源数据库的日志数据在数据仓库中完成源数据库全量数据的同步,不会影响源数据库中数据表的读写操作,提高了数据全量同步的效率,而且全量数据同步的频率也可以提高,支持每若干小时进行一次全量数据同步。
附图说明
图1是本发明实施例一提供的一种全量数据同步方法的流程图;
图2是本发明实施例二提供的一种全量数据同步方法的流程图;
图3是本发明实施例三提供的一种全量数据同步装置的模块结构示意图;
图4是本发明实施例四提供的一种计算机设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于述,附图中仅示出了与本发明相关的部分而非全部结构。
在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作(或步骤)描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
实施例一
图1是本发明实施例一提供的一种全量数据同步方法的流程图,本实施例可适用于将数据库中数据向数据仓库进行全量同步的情况,例如可以是将MySQL数据库中数据向HIVE数据仓库进行全量同步的情况,该方法可以由本发明任意实施例提供的全量数据同步装置来执行,该装置可由硬件和/或软件组成,并一般可集成在计算机设备。
如图1所示,本实施例提供的全量数据同步方法,包括以下步骤:
S110、获取导入数据仓库中的源数据库在当前同步时间段内的增量日志数据。
源数据库,指的是需要进行全量数据同步的数据库,具体可以是关系型数据库,例如MySQL等。数据仓库,是决策支持系统和联机分析应用数据源的结构化数据环境,在本实施例中,全量数据同步是指将源数据库中的数据全量同步至数据仓库中。其中,数据仓库例如可以是HIVE数据仓库。
同步时间段,指的是进行全量数据同步的时间周期,例如可以是若干个小时,也可以是一天等,具体可以根据实际应用场景确定。当前同步时间段,指的是当前需要进行全量数据同步的一个时间周期。
增量日志数据,指的是源数据库在当前同步时间段内新增的日志数据。
实时获取源数据库在当前同步时间段内的增量日志数据,并将其导入数据仓库中。如果增量日志数据库为二进制数据,可以使用数据库工具将其转换为文本形式后再导入数据仓库中。
其中,获取源数据库在当前同步时间段内的增量日志数据并导入数据仓库中的操作可以是持续进行的,只要源数据库在当前同步时间段内有新的增量日志数据,就将该增量日志数据导入数据仓库中。
可选的,将增量日志数据导入数据仓库中专门用于存储文本形式日志的数据表中。其中,不同同步时间段内的增量日志数据可以存储在同一个数据表中,也可以存储在不同的数据库表中。当不同同步时间段内的增量日志数据可以存储在同一个数据表时,可以在数据表中设置时间区分字段,以区别增量日志数据所属的同步时间段。
S120、在所述数据仓库中,根据所述增量日志数据以及与相邻前一同步时间段对应的全量数据生成与所述当前同步时间段对应的待定全量数据。
相邻前一同步时间段,指的是在当前同步时间段之前且与当前同步时间段相邻的一个同步时间段。在同步时间段为一天的情况下,若当前同步时间段为2020年02月21日,则相邻前一同步时间段为2020年02月20日;在同步时间段为4个小时的情况下,若当前同步时间段为2020年02月21日8:00-12:00,则相邻前一同步时间段为2020年02月21日4:00-8:00。
与相邻前一同步时间段对应的全量数据,指的是截止至相邻前一同步时间段的源数据库全量数据,已完成由源数据库至所述数据仓库的全量数据同步。
其中,若相邻前一同步时间段为非首个同步时间段,且在相邻前一同步时间段内待同步的数据表结构未发生变更,则与相邻前一同步时间段对应的全量数据的同步过程和与当前同步时间段对应的全量数据的同步过程是一致的;若相邻前一同步时间段为首个同步时间段,或者,在相邻前一同步时间段内待同步的数据表结构发生变更,则需要以初始化的形式完成与相邻前一同步时间段对应的全量数据由源数据库至数据库仓库的全量数据同步。
与当前同步时间段对应的待定全量数据,在全量数据同步过程中得到的未最终确定仍需筛选处理的与当前同步时间段对应的全量数据。在待定全量数据中,可能既包括与当前同步时间段对应的全量数据,也包括与相邻前一同步时间段对应的全量数据。
例如,若在当前同步时间段内对源数据库中某些数据记录进行了更新操作,则与当前同步时间段对应的待定全量数据既包括更新后的数据记录,也包括更新前的数据记录。也即,与当前同步时间段对应的待定全量数据并非是与当前同步时间段对应的最新全量数据。
在所述数据仓库中,根据所述增量日志数据以及与相邻前一同步时间段对应的全量数据生成与当前同步时间段对应的待定全量数据时,可以根据所述增量日志数据确定数据变更记录,合并所述数据变更记录以及与相邻前一同步时间段对应的全量数据,得到与当前同步时间段对应的待定全量数据。
S130、对所述待定全量数据进行筛选,确定并存储与所述当前同步时间段对应的目标全量数据。
目标全量数据,指的是截止到当前同步时间段的源数据库全量数据,已完成由源数据库至数据库仓库的全量数据同步,也即是最终确定的全量数据。
根据所述增量日志数据的数据操作类型对所述待定全量数据进行筛选,例如,如果根据所述增量日志数据确定在当前同步时间段内对源数据库中某些数据记录进行删除,则在所述待定全量数据中将相应的数据记录剔除;如果根据所述增量日志数据确定在当前同步时间段内对源数据库中某些数据记录进行跟新,则在所述待定全量数据中将更新前的数据记录删除,保留更新后的数据记录,以此得到与当前同步时间段对应的目标全量数据,存储至所述数据仓库中,完成针对当前同步时间段的全量数据同步。
需要指出的是,在进行全量数据同步时,可以是针对源数据库中每个数据表分别进行,进而,在当前同步时间段内的增量日志数据可以是在当前同步时间段内的与某个数据表对应的增量日志数据,与相邻前一同步时间段对应的全量数据可以是与相邻前一同步时间段对应的某个数据表的全量数据,相应的,与当前同步时间段对应的待定全量数据为与当前同步时间段对应的某个数据表的待定全量数据,与当前同步时间段对应的目标全量数据为与当前同步时间段对应的某个数据表的目标全量数据。
在上述技术方案的基础上,作为一种可选的实施方式,所述数据仓库可以是HIVE数据仓库;所述增量日志数据可以是为ROW格式的binlog日志。
Hadoop是一个由Apache基金会所开发的分布式系统基础架构,Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,可以将SQL语句转换为任务在Hadoop上运行。
binlog日志是二进制日志,记录了数据库(如MySQL)所有的DDL(Data DefinitionLanguage,数据定义语言)和DML(Data Manipulation Language,数据操纵语言)语句(除了数据查询语句select、show等),以事件形式进行记录,还包含语句执行所消耗的时间,MySQL的binlog日志是事务安全型的,后续可以基于binlog日志恢复出数据。
binlog日志有ROW,Statement,MiXED三种格式,在本实施例中基于ROW格式的binlog日志进行数据恢复。ROW格式的binlog日志,能非常清晰地记录下每行数据的修改细节,不需要记录上下文相关信息,因此不会发生某些特定情况下的procedure(程序)、function(函数)、及trigger(触发器)的调用触发无法被正确复制的问题,任何情况都可以被复制。
由于数据库所有执行的语句在ROW格式的binlog日志中都将以每行记录的修改细节来记录,因此,可能会产生大量的日志内容,比如一条update(更新)语句,如修改多条记录,则ROW格式的binlog日志中每一条修改都会有记录,这样使binlog日志量会很大,特别是当执行alter table(修改数据表)之类的语句的时候,由于表结构修改,每条记录都发生改变,那么该表每一条记录都会记录到日志中,相当于重建了数据表。在新版本中binlog日志默认为ROW格式,在MySQL5.6中新增了一个参数“binlog_row_image”,把该参数的参数值设置为minimal以后,binlog日志记录的就只是影响的列,大大减少了binlog日志内容。
作为一种可选的实施方式,根据所述增量日志数据以及与相邻前一同步时间段对应的全量数据生成与所述当前同步时间段对应的待定全量数据,可以具体为:
根据与相邻前一同步时间段对应的全量数据确定初始数据行记录;根据所述增量日志数据确定增量数据行记录;在所述初始数据行记录的基础上合并所述增量数据行记录,得到所述待定全量数据。
初始数据行记录,指的是数据仓库在进行与当前同步时间段对应的全量数据同步之前的数据记录;增量数据行记录,指的是数据仓库在进行与当前同步时间段对应全量数据同步时新增的数据记录。
数据行记录,可以是使用select语句在相应的数据表中得到的。例如,初始数据行记录可以是使用select语句在包括与相邻前一同步时间段对应的全量数据的数据表中得到的,增量数据行记录可以是使用select语句在包括增量日志数据的数据表中得到的。其中,初始数据行记录和增量行记录中包括相应数据表中的所有字段,包括主键、操作时间、操作类型,以及其他字段(数据表不同,其他字段就不同)等。
在分别得到初始行记录和增量行记录之后,将二者合并后即可作为与当前同步时间段对应的待定全量数据。
进而,可以根据与当前同步时间段对应的待定全量数据中各数据行记录中的操作类型、操作时间以及主键对所述待定全量数据进行筛选,得到与当前同步时间段对应的目标全量数据。
例如,在对所述待定全量数据进行筛选时,针对数据行记录中的每个主键值,保留操作时间最新且操作类型为插入、更新的数据行记录。
进一步的,作为一种可选的实施方式,对所述待定全量数据进行筛选,确定并存储与所述当前同步时间段对应的目标全量数据,可以具体为:
将所述待定全量数据中的数据行记录按照主键值和操作时间值排序;根据排序结果以及数据行记录的操作类型对所述待定全量数据进行筛选,确定并存储与所述当前同步时间段对应的目标全量数据。
将所述待定全量数据中的数据行记录按照主键值进行排序,便于对数据行记录进行去重处理。针对相同的主键值的数据行记录,按照操作时间值进行排序,例如按照操作时间值降序排列。然后,根据排序结果以及数据行记录的操作类型对待定全量数据中的各数据行记录进行筛选,如针对与每个主键值对应的各个数据行记录,筛选出操作时间最新且操作类型符合预设类型的数据行记录,构成与当前同步时间段对应的目标全量数据。其中,预设类型指的是与目标全量数据匹配的操作类型,如插入、更新等。
可选的,针对与每个主键值对应的各个数据行记录添加行编号(rid),如与每个主键值对应的各个数据行记录中操作时间值最大的一个数据行记录的rid设置为1。进而,在根据排序结果以及数据行记录的操作类型对待定全量数据中的各数据行记录进行筛选时,可以根据行编号字段以及数据行记录的操作类型对待定全量数据中的各数据行记录进行筛选,如筛选出“rid=1”以及操作类型符合预设类型(如插入、更新)的数据行记录,构成与当前同步时间段对应的目标全量数据。
本发明实施例提供的技术方案,首先将待全量数据同步的源数据库在当前同步时间段内的增量日志数据导入数据仓库中,然后在数据仓库中根据所述增量日志数据以及与相邻前一同步时间段对应的全量数据生成与当前同步时间段对应的待定全量数据,对所述待定全量数据进行筛选即可得到与所述当前同步时间段对应的目标全量数据,存储所述目标全量数据实现由源数据库至数据仓库的全量数据同步。上述技术方案基于源数据库的日志数据在数据仓库中完成源数据库全量数据的同步,不会影响源数据库中数据表的读写操作,提高了数据全量同步的效率,而且全量数据同步的频率也可以提高,支持每若干小时进行一次全量数据同步。
实施例二
图2是本发明实施例二提供的一种全量数据同步方法的流程图,本实施例在上述实施例的基础上进行具体化,其中,根据所述增量日志数据确定增量数据行记录,可以具体为:
针对所述增量日志数据中操作类型为插入或删除的第一类日志数据,将与所述第一类日志数据对应的数据行记录作为增量数据行记录;
针对所述增量日志数据中操作类型为更新且未变更主键值的第二类日志数据,将与所述第二类日志数据对应的更新后数据行记录作为增量数据行记录;
针对所述增量日志数据中操作类型为更新且变更主键值的第三类日志数据,则将与所述第三类日志数据对应的操作类型为删除的更新前数据行记录,以及与所述第三类日志数据对应的操作类型为插入的更新后数据行记录作为增量数据行记录。
如图2所示,本实施例提供的全量数据同步方法,包括以下步骤:
S210、获取导入HIVE数据仓库中的源数据库在当前同步时间段内的增量日志数据。
其中,增量日志数据是由数据库工具将ROW格式的增量binlog日志转换为文本形式后导入HIVE数据仓库中专门用于存储日志数据的HIVE表中的。
S220、根据与相邻前一同步时间段对应的全量数据确定初始数据行记录。
可选的,在获取源数据库在当前同步时间段内的增量日志数据之前,还包括:以操作类型为插入(insert)的方式存储与相邻前一同步时间段对应的全量数据;其中,所述初始数据行记录的操作时间值早于所述增量数据行记录的操作时间值。
在得到与相邻前一同步时间段对应的全量数据时,将所述与相邻前一同步时间段对应的全量数据以操作类型为插入的方式存储,以此使根据与相邻前一同步时间段对应的全量数据确定的各条数据行记录的操作类型为插入(insert)。
同时,在将与相邻前一同步时间段对应的全量数据以操作类型为插入的方式存储时,可以将与相邻前一同步时间段对应的全量数据中涉及的各条数据行记录的操作时间设置为目标值,比如设置为“1”。由于根据增量日志数据确定的增量数据行记录的操作时间是以时间戳的形式标识的,增量数据行记录的操作时间是大于目标值的。也即,根据与相邻前一同步时间段对应的全量数据确定初始数据行记录的操作时间值一定会小于(或称早于)增量数据行记录的操作时间值。
进而,在根据与相邻前一同步时间段对应的全量数据确定初始数据行记录时,可以使用select语句在包括与相邻前一同步时间段对应的全量数据的数据表中获取包括主键、操作时间为“目标值(如1)”、操作类型为“插入”以及其他字段的完整数据行记录作为初始数据行记录。
S230、根据所述增量日志数据确定增量数据行记录。
在基于增量日志数据(ROW格式的增量binlog日志)进行全量数据恢复时,影响数据内容的操作类型包括插入(insert)、删除(delete)和更新(update)。
其中,关于操作类型insert,binlog日志里会记录所有的字段信息,这些信息可以用来精确定位刚刚被插入的那一行数据,如果误执行了insert语句,只需将binlog日志里记录的相应insert语句转成delete语句,便可以删除掉被误插入的一行数据。关于操作类型update,binlog日志里会记录更新前的整行数据和更新后的整行数据;如果误执行了update语句,只需将把前后两行信息对调一下,再去数据库里面执行即可恢复误更新操作;关于操作类型delete,binlog日志里会把被删掉的行的整行信息保存起来,如果误执行了delete语句,只需将binlog日志里记录的相应delete语句转成insert语句,便可以恢复掉被误删除的一行数据。
在本实施例中,在根据所述增量日志数据确定增量数据行记录时,针对所述增量日志数据中操作类型为插入或删除的第一类日志数据,将与所述第一类日志数据对应的数据行记录作为增量数据行记录。
在增量日志数据中,insert操作与delete操作均只涉及一条记录,因此针对操作类型为插入或删除的第一类日志数据,可以直接将其涉及的数据行记录作为增量数据行记录即可。具体的,可以使用select语句在插入或删除的第一类日志数据中获取包括主键、操作时间、操作类型为“插入”或“删除”,以及其他字段的完整数据行记录作为根据第一类日志数据确定的增量数据行记录。
在本实施例中,在根据所述增量日志数据确定增量数据行记录时,针对所述增量日志数据中操作类型为更新且未变更主键值的第二类日志数据,将与所述第二类日志数据对应的更新后数据行记录作为增量数据行记录。针对所述增量日志数据中操作类型为更新且变更主键值的第三类日志数据,则将与所述第三类日志数据对应的操作类型为删除的更新前数据行记录,以及与所述第三类日志数据对应的操作类型为插入的更新后数据行记录作为增量数据行记录。
在增量日志数据中,update操作涉及更新前后的两条记录,而且可能存在变更主键的情况,如果没有变更主键,则可以只使用更新后的数据行记录,如果有变更主键,则在数据库操作中首先要删除更新前的数据行记录,然后再插入更新后的数据行记录。
因此,针对所述增量日志数据中操作类型为更新且未变更主键值的第二类日志数据,可以直接将其涉及的更新后的数据行记录(操作类型为update)作为增量数据行记录即可。具体的,可以使用select语句在操作类型为更新且未变更主键值的第二类日志数据中获取包括主键、操作时间、操作类型(此时操作类型为update)以及其他字段的完整数据行记录,作为根据第二类日志数据确定的增量数据行记录。
针对所述增量日志数据中操作类型为更新且变更主键值的第三类日志数据,需要将其涉及的更新前的数据行记录(操作类型为delete)以及更新后的数据行记录(操作类型为insert)作为增量数据行记录。具体的,可以使用select语句在操作类型为更新且变更主键值的第三类日志数据中获取包括主键、操作时间、操作类型为“删除”以及其他字段的更新前的完整数据行记录,和获取包括主键、操作时间、操作类型为“插入”以及其他字段的更新后的完整数据行记录,作为根据第三类日志数据确定的增量数据行记录。
S240、在所述初始数据行记录的基础上合并所述增量数据行记录,得到所述待定全量数据。
S250、将所述待定全量数据中的数据行记录按照主键值和操作时间值排序。
将所述待定全量数据中的数据行记录首先按照主键值进行排序,针对主键值相同的多个数据行记录按照操作时间值进行排序,例如可以按照操作时间值降序排序。
S260、根据排序结果以及数据行记录的操作类型对所述待定全量数据进行筛选,确定并存储与所述当前同步时间段对应的目标全量数据。
作为一种可选的实施方式,根据排序结果以及数据行记录的操作类型对所述待定全量数据进行筛选,确定并存储与所述当前同步时间段对应的目标全量数据,可以具体为:
根据排序结果确定出与各主键值分别对应的最新数据行记录;在所述最新数据行记录中筛选出操作类型为插入或更新的数据行记录,作为与所述当前同步时间段对应的目标全量数据,并存储所述目标全量数据。
根据与各主键值分别对应的多条数据行记录的排序结果,确定出与各主键值分别对应的最新数据行记录,然后再根据操作类型对这些最新数据行记录进行筛选,筛选出操作类型为插入或更新的最新数据行记录作为与所述当前同步时间段对应的目标全量数据。
可选的,在将所述待定全量数据中的数据行记录按照主键值和操作时间值排序进行排序后,可以使用字段“行编号(rid)”对各数据行记录的排序结果进行标记,如在针对主键值相同的多个数据行记录按照操作时间值降序排序时,排序在首位的数据行记录的rid值设置为“1”,依次递增。
进而,在根据排序结果以及数据行记录的操作类型对所述待定全量数据进行筛选时,可以将rid值为“1”且操作类型为插入或更新的数据行记录筛选出来构成与所述当前同步时间段对应的目标全量数据。
与前述“以操作类型为插入(insert)的方式存储与相邻前一同步时间段对应的全量数据”对应的,在将与所述当前同步时间段对应的目标全量数据进行存储时,也是以操作类型为插入(insert)的方式存储,以使针对相邻后一同步时间段进行全量数据同步时,根据与所述当前同步时间段对应的目标全量数据确定的初始数据行记录的操作类型也是插入,便于筛选出未被修改更新的数据行记录。类似的,在将与所述当前同步时间段对应的目标全量数据进行存储时,也可以将与所述当前同步时间段对应的目标全量数据涉及的数据行记录的操作时间设置为目标值,以使在针对相邻后一同步时间段进行全量数据同步时能根据相邻后一同步时间段的增量日志数据确定的增量数据行记录的操作时间更新,便于对最新数据行记录进行筛选。
在上述技术方案的基础上,本实施例还提供了一个具体示例,针对MySQL数据库中tableA表每天进行一次全量数据同步进行解释说明。其中,tableA表即为需要同步至HIVE数据仓库的MySQL数据表,假设tableA表有主键,若tableA表无主键,则可以增加自增长id作为主键。
为了叙述方便,在本示例中,使用HIVE表“ods_binlog_tableA表”存储tableA表的文本形式的binlog日志,使用HIVE表“dwd_binlog_tableA表”存储tableA表的全量数据。其中,ods_binlog_tableA表和dwd_binlog_tableA表可以设置日期分区字段,字段名称可以设置为“dt”,类型为字符串。
假设当前进行全量数据同步的日期为2021-02-21,此时截止至2021-02-20的tableA表全量数据已经被同步至dwd_binlog_tableA(dt="2021-02-20"),表示存放在dwd_binlog_tableA的分区dt="2021-02-20"中。其中,如果2021-02-20是tableA表首次全量同步的日期,则同步2021-02-20的tableA表全量数据的过程为初始化过程,如果2021-02-20不是tableA表首次全量同步的日期,则同步2021-02-20的tableA表全量数据的过程与同步2021-02-21的tableA表全量数据是类似的。关于初始化过程,只有在表结构主键变更或其他原因才需再次执行,本实施例对此不作具体限定,下述全量数据同步流程也是针对表结构主键没有变更的情况而言的。
根据dwd_binlog_tableA(dt="2021-02-20")确定初始数据行记录,根据ods_binlog_tableA表(dt="2021-02-21")确定增量数据行记录,合并初始数据行记录和增量数据行记录后进行筛选,即可生成dwd_binlog_tableA(dt="2021-02-21"),完成2021-02-21tableA表的全量数据的同步。
可选的,在根据dwd_binlog_tableA(dt="2021-02-20")确定初始数据行记录时,可以执行:
select主键,'1'操作时间,'insert'操作类型,整行完整记录中的其他字段
from dwd_binlog_tableA
where dt="2021-02-20"
其中,“整行完整记录”是由tableA表中主键、操作时间、操作类型,以及其他所有字段组成的;dwd_binlog_tableA(dt="2021-02-20")中数据行记录的操作时间置为1,使得在后续降序排列时能优先取ods_binlog_tableA的数据行记录。
需要指出的是,在生成dwd_binlog_tableA(dt="2021-02-20")时,数据行记录是以插入的形式存储的,如通过“insert overwrite table dwd_binlog_tableA partition(dt="2021-02-20")”实现,故在dwd_binlog_tableA(dt="2021-02-20")获取的操作类型为insert的数据行记录即为2021-02-20tableA的全量数据。
在根据ods_binlog_tableA表(dt="2021-02-21")确定增量数据行记录时,可以执行:
“select主键,操作时间,操作类型,整行完整记录中的其他字段
from ods_binlog_tableA
where dt="2021-02-21"and操作类型in('insert','delete')”,
“select主键,操作时间,操作类型,更新后的整行完整记录中的其他字段
from ods_binlog_tableA
where dt="2021-02-21"and操作类型='update'and update未变更主键值”,
“select主键,操作时间,'delete'操作类型,更新前的整行完整记录中的其他字段
from ods_binlog_tableA
where dt="2021-02-21"and操作类型='update'and update有变更主键值”,
以及“select主键,操作时间,'insert'操作类型,更新后的整行完整记录中的其他字段
from ods_binlog_tableA
where dt="2021-02-21"and操作类型='update'and update有变更主键值”。
其中,操作时间可以是时间戳,是binlog日志中的自带字段信息。
在初始数据行记录的基础上合并增量数据行记录后,得到待定全量数据,然后对待定全量数据中数据行记录进行筛选。其中,在对待定全量数据中数据行记录进行筛选,可以对待定全量数据中的数据行记录进行排序去重后再进行全量数据的筛选。
可选的,排序可以通过“row_number()over(partitoned by主键order by操作时间desc)rid”来实现。针对每行“整行完整记录”,可以使用其主键(类型为字符串)作为数据去重的依据,在数据行记录合并后有些主键值可能会有多条数据行记录,此时可以按照操作时间对数据行记录进行降序排序,并通过rid进行标识排序序号,的数据行记录即为该主键值当前的最新行数据记录。
在对行数据记录进行筛选时,可以限定“rid=1”以及“操作类型为insert或update”,即可排除被删除掉的数据行记录,得到2021-02-20tableA的全量数据,进而可以通过“insert overwrite table dwd_binlog_tableA partition(dt="2021-02-21")”操作完成对2021-02-20tableA的全量数据的存储操作。
在上述技术方案中,基于MySQL的binlog日志在HIVE中恢复出全量数据,为从MySQL接入数据到HIVE提供了一种更高效率的方法,不会影响MySQL数据表的读写,恢复全量数据的操作频率可以每若干小时一次,不会由于同步数据量较大而受影响。
实施例三
图3是本发明实施例三提供的一种全量数据同步装置的模块结构示意图,本实施例可适用于将数据库中数据向数据仓库进行全量同步的情况,例如可以是将MySQL数据库中数据向HIVE数据仓库进行全量同步的情况,该装置可以采用软件和/或硬件的方式实现,并一般可集成在计算机设备中。
如图3所示,本实施例提供的全量数据同步装置具体包括:日志获取模块310、数据合并模块320和数据筛选存储模块330。其中,
日志获取模块310,用于获取导入数据仓库中的源数据库在当前同步时间段内的增量日志数据;
数据合并模块320,用于在所述数据仓库中,根据所述增量日志数据以及与相邻前一同步时间段对应的全量数据生成与所述当前同步时间段对应的待定全量数据;
数据筛选存储模块330,用于对所述待定全量数据进行筛选,确定并存储与所述当前同步时间段对应的目标全量数据。
本发明实施例提供的技术方案,首先将待全量数据同步的源数据库在当前同步时间段内的增量日志数据导入数据仓库中,然后在数据仓库中根据所述增量日志数据以及与相邻前一同步时间段对应的全量数据生成与当前同步时间段对应的待定全量数据,对所述待定全量数据进行筛选即可得到与所述当前同步时间段对应的目标全量数据,存储所述目标全量数据实现由源数据库至数据仓库的全量数据同步。上述技术方案基于源数据库的日志数据在数据仓库中完成源数据库全量数据的同步,不会影响源数据库中数据表的读写操作,提高了数据全量同步的效率,而且全量数据同步的频率也可以提高,支持每若干小时进行一次全量数据同步。
可选的,所述数据仓库为HIVE数据仓库;所述增量日志数据为ROW格式的binlog日志。
进一步的,数据合并模块320,具体包括:初始数据行记录确定单元、增量数据行记录确定单元和数据行记录合并单元,其中,
初始数据行记录确定单元,用于根据与相邻前一同步时间段对应的全量数据确定初始数据行记录;
增量数据行记录确定单元,用于根据所述增量日志数据确定增量数据行记录;
数据行记录合并单元,用于在所述初始数据行记录的基础上合并所述增量数据行记录,得到所述待定全量数据。
进一步的,数据筛选存储模块330,具体用于将所述待定全量数据中的数据行记录按照主键值和操作时间值排序;根据排序结果以及数据行记录的操作类型对所述待定全量数据进行筛选,确定并存储与所述当前同步时间段对应的目标全量数据。
进一步的,增量数据行记录确定单元,具体用于:
针对所述增量日志数据中操作类型为插入或删除的第一类日志数据,将与所述第一类日志数据对应的数据行记录作为增量数据行记录;
针对所述增量日志数据中操作类型为更新且未变更主键值的第二类日志数据,将与所述第二类日志数据对应的更新后数据行记录作为增量数据行记录;
针对所述增量日志数据中操作类型为更新且变更主键值的第三类日志数据,则将与所述第三类日志数据对应的操作类型为删除的更新前数据行记录,以及与所述第三类日志数据对应的操作类型为插入的更新后数据行记录作为增量数据行记录。
进一步的,数据筛选存储模块330,还具体用于在获取源数据库在当前同步时间段内的增量日志数据之前,以操作类型为插入的方式存储与相邻前一同步时间段对应的全量数据;其中,所述初始数据行记录的操作时间值早于所述增量数据行记录的操作时间值。
进一步的,数据筛选存储模块330,具体用于根据排序结果确定出与各主键值分别对应的最新数据行记录;在所述最新数据行记录中筛选出操作类型为插入或更新的数据行记录,作为与所述当前同步时间段对应的目标全量数据,并存储所述目标全量数据。
本发明实施例所提供的全量数据同步装置可执行本发明任意实施例所提供的全量数据同步方法,具备执行方法相应的功能模块和有益效果。
实施例四
图4是本发明实施例四提供的一种计算机设备的结构示意图,如图4所示,该计算机设备包括处理器40、存储器41、输入装置42和输出装置43;计算机设备中处理器40的数量可以是一个或多个,图4中以一个处理器40为例;计算机设备中的处理器40、存储器41、输入装置42和输出装置43可以通过总线或其他方式连接,图4中以通过总线连接为例。
存储器41作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的全量数据同步方法对应的程序指令/模块(例如,图3中全量数据同步装置中的日志获取模块310、数据合并模块320和数据筛选存储模块330)。处理器40通过运行存储在存储器41中的软件程序、指令以及模块,从而执行计算机设备的各种功能应用以及数据处理,即实现上述的全量数据同步方法。
存储器41可主要包括存储程序区和存储数据表区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据表区可存储根据计算机设备的使用所创建的数据等。此外,存储器41可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器41可进一步包括相对于处理器40远程设置的存储器,这些远程存储器可以通过网络连接至计算机设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置42可用于接收输入的数字或字符信息,以及产生与计算机设备的用户设置以及功能控制有关的键信号输入。输出装置43可包括显示屏等显示设备。
实施例五
本发明实施例五还提供一种存储有计算机程序的计算机可读存储介质,计算机程序在由计算机处理器执行时用于执行一种全量数据同步方法,该方法包括:
获取导入数据仓库中的源数据库在当前同步时间段内的增量日志数据;
在所述数据仓库中,根据所述增量日志数据以及与相邻前一同步时间段对应的全量数据生成与所述当前同步时间段对应的待定全量数据;
对所述待定全量数据进行筛选,确定并存储与所述当前同步时间段对应的目标全量数据。
当然,本发明实施例所提供的存储有计算机程序的计算机可读存储介质,其计算机程序不限于如上的方法操作,还可以执行本发明任意实施例所提供的全量数据同步方法中的相关操作。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例的方法。
值得注意的是,上述全量数据同步装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (10)
1.一种全量数据同步方法,其特征在于,包括:
获取导入数据仓库中的源数据库在当前同步时间段内的增量日志数据;
在所述数据仓库中,根据所述增量日志数据以及与相邻前一同步时间段对应的全量数据生成与所述当前同步时间段对应的待定全量数据;
对所述待定全量数据进行筛选,确定并存储与所述当前同步时间段对应的目标全量数据。
2.根据权利要求1所述的方法,其特征在于,所述数据仓库为HIVE数据仓库;所述增量日志数据为ROW格式的binlog日志。
3.根据权利要求2所述的方法,其特征在于,根据所述增量日志数据以及与相邻前一同步时间段对应的全量数据生成与所述当前同步时间段对应的待定全量数据,包括:
根据与相邻前一同步时间段对应的全量数据确定初始数据行记录;
根据所述增量日志数据确定增量数据行记录;
在所述初始数据行记录的基础上合并所述增量数据行记录,得到所述待定全量数据。
4.根据权利要求3所述的方法,其特征在于,对所述待定全量数据进行筛选,确定并存储与所述当前同步时间段对应的目标全量数据,包括:
将所述待定全量数据中的数据行记录按照主键值和操作时间值排序;
根据排序结果以及数据行记录的操作类型对所述待定全量数据进行筛选,确定并存储与所述当前同步时间段对应的目标全量数据。
5.根据权利要求4所述的方法,其特征在于,根据所述增量日志数据确定增量数据行记录,包括:
针对所述增量日志数据中操作类型为插入或删除的第一类日志数据,将与所述第一类日志数据对应的数据行记录作为增量数据行记录;
针对所述增量日志数据中操作类型为更新且未变更主键值的第二类日志数据,将与所述第二类日志数据对应的更新后数据行记录作为增量数据行记录;
针对所述增量日志数据中操作类型为更新且变更主键值的第三类日志数据,则将与所述第三类日志数据对应的操作类型为删除的更新前数据行记录,以及与所述第三类日志数据对应的操作类型为插入的更新后数据行记录作为增量数据行记录。
6.根据权利要求5所述的方法,其特征在于,在获取源数据库在当前同步时间段内的增量日志数据之前,还包括:
以操作类型为插入的方式存储与相邻前一同步时间段对应的全量数据;
其中,所述初始数据行记录的操作时间值早于所述增量数据行记录的操作时间值。
7.根据权利要求6所述方法,其特征在于,根据排序结果以及数据行记录的操作类型对所述待定全量数据进行筛选,确定并存储与所述当前同步时间段对应的目标全量数据,包括:
根据排序结果确定出与各主键值分别对应的最新数据行记录;
在所述最新数据行记录中筛选出操作类型为插入或更新的数据行记录,作为与所述当前同步时间段对应的目标全量数据,并存储所述目标全量数据。
8.一种全量数据同步装置,其特征在于,包括:
日志获取模块,用于获取导入数据仓库中的源数据库在当前同步时间段内的增量日志数据;
数据合并模块,用于在所述数据仓库中,根据所述增量日志数据以及与相邻前一同步时间段对应的全量数据生成与所述当前同步时间段对应的待定全量数据;
数据筛选存储模块,用于对所述待定全量数据进行筛选,确定并存储与所述当前同步时间段对应的目标全量数据。
9.一种计算机设备,其特征在于,所述计算机设备包括:
一个或多个处理器;
存储器,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-7中任一所述的方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-7中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110482727.8A CN113094442B (zh) | 2021-04-30 | 2021-04-30 | 全量数据同步方法、装置、设备和介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110482727.8A CN113094442B (zh) | 2021-04-30 | 2021-04-30 | 全量数据同步方法、装置、设备和介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113094442A true CN113094442A (zh) | 2021-07-09 |
CN113094442B CN113094442B (zh) | 2024-04-19 |
Family
ID=76681065
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110482727.8A Active CN113094442B (zh) | 2021-04-30 | 2021-04-30 | 全量数据同步方法、装置、设备和介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113094442B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113449043A (zh) * | 2021-07-21 | 2021-09-28 | 中国人民解放军61932部队 | 数据同步方法、装置、计算机设备和存储介质 |
CN113535856A (zh) * | 2021-07-29 | 2021-10-22 | 上海哔哩哔哩科技有限公司 | 数据同步方法及系统 |
WO2024174516A1 (zh) * | 2023-02-24 | 2024-08-29 | 华为云计算技术有限公司 | 数据同步方法和装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107402981A (zh) * | 2017-07-07 | 2017-11-28 | 国网浙江省电力公司信息通信分公司 | 一种基于分布式离线数据库的数据增量处理方法及系统 |
CN111008241A (zh) * | 2019-11-14 | 2020-04-14 | 微民保险代理有限公司 | 数据同步方法、装置、存储介质和计算机设备 |
WO2020259149A1 (zh) * | 2019-06-26 | 2020-12-30 | 中兴通讯股份有限公司 | 一种实现增量数据比对的系统及方法 |
-
2021
- 2021-04-30 CN CN202110482727.8A patent/CN113094442B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107402981A (zh) * | 2017-07-07 | 2017-11-28 | 国网浙江省电力公司信息通信分公司 | 一种基于分布式离线数据库的数据增量处理方法及系统 |
WO2020259149A1 (zh) * | 2019-06-26 | 2020-12-30 | 中兴通讯股份有限公司 | 一种实现增量数据比对的系统及方法 |
CN111008241A (zh) * | 2019-11-14 | 2020-04-14 | 微民保险代理有限公司 | 数据同步方法、装置、存储介质和计算机设备 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113449043A (zh) * | 2021-07-21 | 2021-09-28 | 中国人民解放军61932部队 | 数据同步方法、装置、计算机设备和存储介质 |
CN113535856A (zh) * | 2021-07-29 | 2021-10-22 | 上海哔哩哔哩科技有限公司 | 数据同步方法及系统 |
CN113535856B (zh) * | 2021-07-29 | 2022-11-04 | 上海哔哩哔哩科技有限公司 | 数据同步方法及系统 |
WO2024174516A1 (zh) * | 2023-02-24 | 2024-08-29 | 华为云计算技术有限公司 | 数据同步方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN113094442B (zh) | 2024-04-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113094442B (zh) | 全量数据同步方法、装置、设备和介质 | |
CN107544984B (zh) | 一种数据处理的方法和装置 | |
CN101127034B (zh) | 数据组织、查询、呈现、存档、恢复、删除、提炼方法及装置和系统 | |
US9183268B2 (en) | Partition level backup and restore of a massively parallel processing database | |
US8626717B2 (en) | Database backup and restore with integrated index reorganization | |
CN102110121B (zh) | 一种数据处理方法及其系统 | |
CN109522290B (zh) | 一种HBase数据块恢复及数据记录提取方法 | |
CN111400408A (zh) | 数据同步方法、装置、设备及存储介质 | |
CN104133867A (zh) | 分布式顺序表片内二级索引方法及系统 | |
CN106874281B (zh) | 实现数据库读写分离的方法和装置 | |
CN107665219B (zh) | 一种日志管理方法及装置 | |
CN111651519B (zh) | 数据同步方法、数据同步装置、电子设备及存储介质 | |
CN106649412B (zh) | 一种数据处理方法和设备 | |
CN105900093A (zh) | 一种KeyValue数据库的数据表的更新方法与表数据更新装置 | |
CN113821573A (zh) | 海量数据快速检索服务构建方法、系统、终端及存储介质 | |
CN103838780A (zh) | 数据库的数据恢复方法及相关的设备 | |
CN112965939A (zh) | 一种文件合并方法、装置和设备 | |
CN111159020B (zh) | 一种应用于同步软件测试的方法和装置 | |
WO2016175880A1 (en) | Merging incoming data in a database | |
US9390131B1 (en) | Executing queries subject to different consistency requirements | |
CN110879812A (zh) | 一种电商平台中基于spark的数据同步方法 | |
CN111176901B (zh) | 一种hdfs删除文件恢复方法、终端设备及存储介质 | |
CN111125045B (zh) | 一种轻量级etl处理平台 | |
US10061654B1 (en) | Depth first search of summary change log records for backup | |
CN115858471A (zh) | 业务数据变更记录方法、装置、计算机设备及介质 |
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 |