数据库的同步方法、装置、设备及存储介质与流程

文档序号:17926191发布日期:2019-06-15 00:25阅读:223来源:国知局
本发明实施例涉及数据库
技术领域
:,尤其涉及一种数据库的同步方法、装置、设备及存储介质。
背景技术
::ods(operationaldatastore,操作数据存储)作为dw(datawarehouse,数据仓库)和业务系统的中间数据层,用于存放从业务系统中直接抽取出来的数据,且需要与业务数据源保持同步,具体是要与业务数据库的表结构同步以及数据同步。现有技术中,一般是通过设计外部程序来感知业务数据库的表结构变更和数据变更,然后通过解析变更信息生成sql(structuredquerylanguage,结构化查询语言)语句并使目标数据库执行sql语句,以达到数据库同步的效果,具体可以通过日志来记录对数据库的改动,例如mysql(关系型数据库管理系统)数据库中的binlog,但是当根据binlog同步失败时,需要人工介入在大量日志记录中找到出错时间点并手动执行时间区间内的binlog,如果在业务库已经运行的情况下,还需要手动执行业务库的全备和恢复,并确保binlog同步的时间点与全备一致;还可以是通过设计触发器程序和存储程序来实现表结构和数据变更同步,但是这样设计会加重业务数据库的负担,且容易出现由于触发器程序和存储程序设计有差别时而导致通用性差的问题。技术实现要素:本发明实施例提供一种数据库的同步方法、装置、设备及存储介质,以克服现有技术的方案缺陷,并解决因业务数据库字段属性特殊而导致数据同步失败的问题。第一方面,本发明实施例提供了一种数据库的同步方法,包括:获取源数据库和目标数据库的表结构信息;根据所述源数据库的表结构信息与所述目标数据库的表结构信息,以及预设的字段属性捕获规则,确定表结构变更信息;根据所述表结构变更信息生成变更语句,并控制所述目标数据库执行所述变更语句,以更新所述目标数据库的表结构信息;获取所述源数据库中与所述表结构变更信息匹配的更新数据同步至所述目标数据库中。第二方面,本发明实施例还提供了一种数据库的同步装置,包括:表结构信息获取模块,用于获取源数据库和目标数据库的表结构信息;表结构变更确定模块用于,根据所述源数据库的表结构信息与所述目标数据库的表结构信息,以及预设的字段属性捕获规则,确定表结构变更信息;表结构同步模块,用于根据所述表结构变更信息生成变更语句,并控制所述目标数据库执行所述变更语句,以更新所述目标数据库的表结构信息;数据同步模块,用于获取所述源数据库中与所述表结构变更信息匹配的更新数据同步至所述目标数据库中。第三方面,本发明实施例还提供了一种设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如本发明任意实施例所述的数据库的同步方法。第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明任意实施例所述的数据库的同步方法。本发明实施例提供的一种数据库的同步方法、装置、设备及存储介质,在对数据库进行同步时,根据源数据库和目标数据库的表结构信息区别以及预设的字段属性捕获规则,确定表结构变更信息并更新目标数据库的表结构信息,然后再获取与表结构变更信息匹配的更新数据对目标数据库进行数据同步。由此,本发明实施例的技术方案,不需要修改源数据库(例如业务数据库)的任何配置,不需要开启binlog,也不依赖于数据库工具(例如mysqldump),而且,通过预设字段属性捕获规则,实现了库表字段多属性可选、内容可过滤的同步功能,解决了因源数据库字段属性特殊(例如源数据库存在虚拟键、特定属性notnull)导致数据同步失败的问题。附图说明图1是本发明实施例一中的一种数据库的同步方法的流程图;图2是本发明实施例二中的一种数据库的同步方法的流程图;图3a是本发明实施例三中的一种数据库的同步方法中的表结构同步部分的流程图;图3b是本发明实施例三中的一种数据库的同步方法中的内容同步部分的流程图;图4是本发明实施例四中的一种数据库的同步装置的结构示意图;图5是本发明实施例五中的一种设备的硬件结构示意图。具体实施方式下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作(或步骤)描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。实施例一图1是本发明实施例一提供的一种数据库的同步方法的流程图,可适用于数据仓库ods层数据库同步的情况,尤其是业务数据库中存在特殊的字段属性(例如业务数据库存在虚拟键、特定属性notnull)容易导致数据同步失败的情况,该方法可以由本发明实施例提供的数据库的同步装置来执行,该装置可采用软件和/或硬件的方式实现,并一般可集成计算机的处理器中。如图1所示,本实施例的方法具体包括:s110、获取源数据库和目标数据库的表结构信息。在本实施例中,数据库的同步指的是将源数据库的数据变化同步至目标数据库,具体在数据仓库ods层的应用中,源数据库可以指的是业务数据库,目标数据库可以指的是ods数据库,同步过程主要分为两个部分,一个是源数据库与目标数据库的表结构同步,一个是源数据库和目标数据库的数据同步(也即内容同步)。在本步骤之前,首先需要建立与源数据库,以及与目标数据库的数据库连接,然后根据匹配的查询命令,查询源数据库和目标数据库的表结构信息。具体的,可以根据预先建立的数据库连接配置表中的连接关联信息分别创建与源数据库以及与目标数据库的数据库连接。数据库连接配置表中,记录数据库的唯一连接名、连接类型是否为ssh(secureshell)、连接地址、用户名、加密后的密码、端口号、是否需要ssh跳板、ssh连接id(identification)。典型的,可以使用python封装出数据库管理类,通过连接名判断是否需要ssh隧道连接且创建数据库连接,以此实现多数据库连接集中管理。以此,根据数据库连接配置表中源数据库的连接关联信息创建与源数据库的数据库连接,然后根据匹配的查询指令,查询到源数据库的表结构信息;根据数据库连接配置表中目标数据库的连接关联信息创建与目标数据库的数据库连接,然后根据匹配的查询指令,查询到目标数据库的表结构信息。值得指出的是,本发明实施例可以同时对多个数据库进行同步,首先需要根据数据库连接配置表分别创建与各个源数据库的数据库连接,以及与匹配的各个目标数据库的数据库连接,然后分别查询各个源数据库的表结构信息,以及匹配的各个目标数据库的表结构信息。在上述技术方案中,设计了数据库连接配置表,具有配置多个源数据库和目标数据库的ssh跳板连接信息的功能,解决了众多数据库连接配置繁杂易错的问题。典型的,在实施本实施例提供的数据库的同步方法时,可以对同步周期进行设置,进而可以将s110具体为在达到与预设的同步周期匹配的同步时间时,获取源数据库和目标数据库的表结构信息,例如可以将同步周期设置为一天,则可以在到达每天的零点时,获取源数据库和目标数据库的表结构信息。s120、根据源数据库的表结构信息与目标数据库的表结构信息,以及预设的字段属性捕获规则,确定表结构变更信息。在查询到源数据库和目标数据库的表结构信息之后,根据源数据库的表结构信息与目标数据库的表结构信息之间的区别信息以及预设的字段属性捕获规则,分析出源数据库和目标数据库之间的表结构变更信息。具体的,可以把源数据库的表结构信息和目标数据库的表结构信息存放到一个表格(例如为该表格取名为db_info)。其中,字段属性捕获规则仅对字段属性有效,因为源数据库(业务数据库)发生新增删除操作一般是不可能提前预测到的。当字段属性发生变化时,根据字段属性捕获规则对某些字段属性变化进行有选择地过滤。典型的,可以将s120具体为:根据源数据库的表结构信息与目标数据库的表结构信息确定与表结构关联的数据表或者字段的新增删除变更信息;根据源数据库的表结构信息与目标数据库的表结构信息以及预设的字段属性捕获规则,确定与表结构关联的字段属性变更信息。具体的,新增删除变更信息可以是新增表变更信息、删除表变更信息、新增字段变更信息和删除字段变更信息。在确定出表结构变更信息之后,还可以分别将新增删除变更信息和字段属性变更信息添加至匹配的变更记录表中,例如,将新增表变更信息添加至新增表变更记录表中,将删除表变更信息添加至删除表变更记录表中,将新增字段变更信息添加至新增字段变更记录表中,将删除字段变更信息添加至删除字段变更记录表中,将字段属性变更信息添加至字段属性变更记录表中。即,从db_info中分出基本的五类变更信息,新增表变更信息、删除表变更信息、新增字段变更信息、删除字段变更信息和字段属性变更信息,并将这五类变更信息分别记录在table_add、table_del、column_add、column_del、column_diff这五张变更记录表中。作为本实施例一种可选的实施方式,可以将字段属性捕获规则具体为:字段属性检测配置信息和字段属性内容过滤信息,根据字段属性检测配置信息确定哪些字段属性需要检测,根据字段属性内容过滤信息确定哪些字段属性内容应该记录在column_diff这张字段属性变更记录表中。其中,字段属性内容过滤信息可以是字段属性内容正则匹配过滤信息。典型的,可以将根据源数据库的表结构信息与目标数据库的表结构信息以及预设的字段属性捕获规则,确定与表结构关联的字段属性变更信息,具体为:根据源数据库的表结构信息与目标数据库的表结构信息确定至少一条待确认字段变更信息;如果待确认字段变更信息与字段属性捕获规则匹配,也即与字段属性检测配置信息和字段属性内容过滤信息匹配,则将该待确认字段变更信息确定为与表结构关联的字段属性变更信息。举例进行解释说明,例如:column_diff_check={'column_name':1,'column_default':1,'is_nullable':0,'column_type':1,'column_key':1,'extra':1,'column_comment':1}column_filter_pass={'extra':['^auto_increment$','^onupdate.*$',’^*’],'column_key':['^pri$',’^*’]}其中,column_diff_check为字段属性检测配置信息,配置哪些字段属性要检测,将需要检测的字段属性的有效值设置为1,将不需要检测的字段属性的有效值设置为0;column_filter_pass为字段属性内容过滤信息,用于对字段属性内容进行过滤,符合column_filter_pass即为捕获的字段属性变更信息。由上述代码可知,字段属性'extra'是需要检测的,当'extra'内容为空或者auto_increment或者onupdate.*时,都会发生字段属性变更捕获,当'extra'内容为其他任何值都不会触发字段属性变更捕获,触发捕获后,将捕获的db_info记录插入到column_diff表中。s130、根据表结构变更信息生成变更语句,并控制目标数据库执行变更语句,以更新目标数据库的表结构信息。在确定了源数据库和目标数据库的表结构变更信息之后,根据这些表结构变更信息生成变更语句,控制目标数据库执行生成的这些变更语句,以使目标数据库的表结构信息更新为与源数据库相同的表结构信息,至此,完成目标数据库与源数据库的表结构同步。针对分别记录在table_add、table_del、column_add、column_del、column_diff这五张变更记录表中的新增表变更信息、删除表变更信息、新增字段变更信息、删除字段变更信息和字段属性变更信息这五类变更信息,要生成五种大类的变更语句,其中,适用于column_diff中的字段属性变更信息的变更语句最复杂,因为变更的字段可能还有例如主键等特殊属性,此时,可以选用具有特殊性的sql语句,生成五种大类sql语句,其中,可以抽象出针对字段属性变更的sql语句。s140、获取源数据库中与表结构变更信息匹配的更新数据同步至目标数据库中。在将源数据库和目标数据库的表结构同步完成后,即可进行源数据库和目标数据库的内容同步(数据同步),读取与表结构变更信息匹配的更新数据,同步至目标数据库中,以使目标数据库的数据内容与源数据库中是相同的。具体的,可以使用etl(抽取extract、转换transform、加载load的简称)工具获取源数据库中与表结构变更信息匹配的更新数据同步至目标数据库中。其中,etl工程能够实现数据从多个异构源数据库加载到目标数据库或其他目标地址。在内容同步过程中,使用etl工具进行数据抽取,可以很好地适配多种异构数据库的同步,具有模块化适配的优点。当设置了同步周期时,可以将s140具体为获取源数据库中与表结构变更信息匹配的前一同步周期内的更新数据同步至目标数据库中。例如,同步周期为一天,在到达每天的零点时,获取源数据库和目标数据库的表结构信息,首先确定源数据库和目标数据库的表结构变更信息,完成源数据库和目标数据库的表结构信息同步,然后获取源数据库中与表结构变更信息匹配的前一同步周期内,也就是前一天内的更新数据同步至目标数据库中。本发明实施例的技术方案,可以快速配置多个源数据库(业务数据库)到数据仓库ods层的同步实例,灵活且实用,不需要修改源数据库的任何配置,不需要开启binlog,也不依赖于数据库工具(例如mysqldump),而且,通过预设字段属性捕获规则,实现了库表字段多属性可选、内容可过滤的同步功能,解决了因源数据库字段属性特殊(例如源数据库存在虚拟键、特定属性notnull)导致数据同步失败的问题。进一步的,本发明实施例提供的数据库的同步方法,支持源数据库和目标数据库为异构数据库的情况。在根据预先建立的数据库连接配置表中的连接关联信息分别创建与源数据库以及与目标数据库的数据库连接之后,如果确定源数据库和目标数据库为异构数据库,则将源数据库和目标数据库中的字段属性映射为同一类型的字段属性。对应的,将根据表结构变更信息生成变更语句具体为:根据表结构变更信息生成与目标数据库匹配的变更语句。如果源数据库为mysql数据库,目标数据库为sqlserver数据库,二者为异构数据库,在进行表结构同步之前,需要先将源数据库和目标数据库中的字段属性映射为同一类型的字段属性,例如,源数据库中某字段属性值的类型为int,目标数据库中对应字段属性值的类型为int64,那么需要先将源数据库和目标数据库中这一字段属性的类型映射为相同的属性,然后再将映射后的源数据库和目标数据库的表结构信息拉入db_info中,确定源数据库和目标数据库的表结构变更信息。实施例二图2是本发明实施例二提供的一种数据库的同步方法的流程图,本实施例以上述实施例为基础进行具体化,其中,在获取源数据库中与表结构变更信息匹配的更新数据同步至所述目标数据库中之前,还包括:根据新增删除变更信息的新增表表名更新数据表同步配置表。进一步的,将获取源数据库中与所述表结构变更信息匹配的更新数据同步至目标数据库中,具体为:如果根据新增删除变更信息确定不存在新增表和新增字段,则使用当前etl工程执行与数据表同步配置表中待同步数据表对应的增量数据同步;如果根据新增删除变更信息确定存在新增表和/或新增字段,则获取相应新增表和/或与新增字段匹配的新增字段相关表;根据相应新增表和/或新增字段相关表更新当前etl工程;使用更新后的etl工程执行与相应新增表和/或新增字段相关表对应的全量数据同步操作,以及执行与数据表同步配置表中待同步数据表对应的增量数据同步。进一步的,可以将执行与数据表同步配置表中待同步数据表对应的增量数据同步,具体为:获取与增量数据同步对应的同步时间区间;根据同步时间区间执行与数据表同步配置表中待同步数据表对应的增量数据同步。如图2所示,本实施例的方法具体包括:s210、在达到与预设的同步周期匹配的同步时间时,根据预先建立的数据库连接配置表中的连接关联信息分别创建与源数据库以及与目标数据库的数据库连接,获取源数据库和目标数据库的表结构信息。s220、根据源数据库的表结构信息与目标数据库的表结构信息确定与表结构关联的数据表或者字段的新增删除变更信息。新增删除变更信息可以是新增表变更信息、删除表变更信息、新增字段变更信息和删除字段变更信息。s230、根据源数据库的表结构信息与目标数据库的表结构信息以及预设的字段属性捕获规则,确定与表结构关联的字段属性变更信息。字段属性捕获规则具体为字段属性检测配置信息和字段属性内容过滤信息。具体的,根据源数据库的表结构信息与目标数据库的表结构信息确定至少一条待确认字段变更信息;如果待确认字段变更信息与字段属性捕获规则匹配,则将该待确认字段变更信息确定为与表结构关联的字段属性变更信息。如果源数据库和目标数据库为异构数据库,则需要先将源数据库和目标数据库中的字段属性映射为同一类型的字段属性,然后再确定新增删除变更信息和字段属性变更信息。s240、分别将新增删除变更信息和字段属性变更信息添加至匹配的变更记录表中。所述变更记录表具体包括:新增表变更记录表、删除表变更记录表、新增字段变更记录表、删除字段变更记录表和字段属性变更记录表。s250、根据变更记录表生成变更语句,并控制目标数据库执行所述变更语句,以更新目标数据库的表结构信息。s260、根据变更记录表确定本次同步是否存在新增表,若是,则执行s270,若否,则执行s280。新增表变更记录表中记录着本次从源数据库到目标数据库同步过程中确定的新增表,也即,源数据库中有这个表,而目标数据库中没有这个表。s270、根据新增删除变更信息的新增数据表表名更新数据表同步配置表,执行s2100。数据表同步配置表中存储的是,与源数据库表结构信息对应的每个表的表名,以及与每个表对应的有关是否要同步的待同步配置信息,例如,如果表a需要同步,则其待同步配置信息为有效,例如为1,如果表b不需要同步,则其待同步配置信息为无效,例如为0。因此,在根据新增表变更记录表确定本次同步存在新增表时,首先要把这个新增表的表名添加至数据表同步配置表中,并将其待同步配置信息设置为有效。s280、根据变更记录表确定本次同步是否存在新增字段,若否,则执行s290,若是,则执行s2100。新增字段变更记录表中记录着本次从源数据库到目标数据库同步过程中确定的新增字段,也即,源数据库中有这个字段,而目标数据库中没有这个字段。s290、使用当前etl工程执行与数据表同步配置表中待同步数据表对应的增量数据同步。如果本次同步过程中不存在新增表和新增字段,则无需对当前的etl工程进行更新,直接使用当前的etl工程执行与数据表同步配置表中待同步数据表对应的增量数据同步即可。其中,增量数据同步指的是对前一同步周期内的更新数据进行同步。具体的,执行与所述数据表同步配置表中待同步数据表对应的增量数据同步的操作,首先要获取与增量数据同步对应的同步时间区间;然后根据同步时间区间执行与数据表同步配置表中待同步数据表对应的增量数据同步。使用当前etl工程读取数据表同步配置表,然后从源数据库中拉取数据表同步配置表中待同步配置信息为有效的各个表中创建时间和修改时间在同步时间区间内的数据,也即在同步时间区间内发生变化的数据,同步至目标数据库中。具体的,可以使用etl工程完成上述的数据同步操作,一个etl工程任务中包括prepare,process,end三个子任务,针对ods层数据库的同步任务,prepare负责读取数据表同步配置表,然后从业务数据库拉取数据表同步配置表中待同步配置信息为有效的各个表中创建时间和修改时间在同步时间区间内的数据,即同步时间区间内发生变化的数据,插入到stg暂存库里;process负责把stg暂存库里的数据同步到ods数据库,end负责更新同步时间为当前时间。s2100、获取相应新增表和/或与新增字段匹配的新增字段相关表,根据相应新增表和/或新增字段相关表更新当前etl工程。如果本次同步过程中存在新增表和/或新增字段,则需要对当前的etl工程进行更新。也即,需要读取当前同步过程中的table_add和/或column_add是否有记录,进而判断是否需要重新自动生成etl工程,如果任意一个表中有记录,则需要重新自动生成etl工程。etl工程采用xml文件来描述模块属性、模块之间的关系,因此可以采用python程序来读取etl模板,然后根据业务库的结构信息可以类比生成n个转换模块,从而实现etl工程的自动生成功能,降低人工设计etl工程的错误率,更方便自动化集成。etl的转换单元之间可以使用并行连线来实现多线程并发执行的目的。通过读取配置好的线程数,自动生成并行连接线来控制prepare和process中的多线程数量,提高同步速度。在上述技术方案中,通过自动生成etl工程,解决了etl工程针对表结构变更后需要人工重新生成etl工程,通过配置etl工程同步线程数,解决了表数量较多时同步速度慢等问题。s2110、使用更新后的etl工程执行与相应新增表和/或新增字段相关表对应的全量数据同步操作,以及执行与数据表同步配置表中待同步数据表对应的增量数据同步。读取并更新数据表同步配置表,将数据表同步配置表中相应的新增表和/或新增字段相关表的待同步配置信息设置为有效,将数据表同步配置表中的其他表设置为无效,使用更新后的etl工程执行与相应的新增表和/或新增字段相关表对应的全量数据同步操作,也即将与相应的新增表和/或新增字段相关表对应的所有数据同步至目标数据库。然后,恢复数据表同步配置表中各个表的待同步配置信息,也即将在执行全量同步之前将待同步配置信息设置为无效的各个表的待同步配置信息恢复至有效,再使用更新后的etl工程执行与数据表同步配置表中待同步数据表对应的增量数据同步,此时,需要读取同步时间区间,执行的是与同步时间区间对应的增量数据同步,也即对在同步时间区间内发生变化的数据进行同步。具体的,如果根据新增删除变更信息确定存在删除字段,则首先获取与删除字段匹配的删除字段相关表;然后根据删除字段相关表更新当前etl工程;再使用更新后的etl工程执行与删除字段相关表对应的数据同步操作(数据删除操作)。也即,将目标数据库中与删除字段相关表中删除字段关联的数据删除。具体的,如果根据新增删除变更信息确定存在删除表,则可以首先获取删除表,然后根据删除表更新当前etl工程;再使用更新后的etl工程执行与删除表对应的数据同步操作(数据删除操作)。在实际应用中,即使确定源数据库存在删除表,也不会将目标数据库中相应的表删除,将其保留以防不备之需,仅删除表中的数据。值得指出的是,上述提到的同步时间区间是根据用户需求可自行配置的。如果同步周期为一天,当前同步时间区间为2019-02-280:00至2019-03-010:00,但是由于某种特殊原因同步中途中断了,例如同步中断时间为2019-02-2815:00,此时可以人工配置同步时间区间为2019-02-2815:00至2019-03-010:00,进而重新开始同步时仅同步此段时间内的数据。由此,解决了同步失败后重跑历史时间窗口数据的问题,具有恢复易操作的优点。而且,数据表同步配置表中待同步数据表也是根据用户需求可自行配置的。在部分表同步失败后,可以将数据表同步配置表中这些表作为待同步数据表,也即将这些表的待同步配置信息设置为有效,将数据表同步配置表中其他表的待同步配置信息设置为无效,进而重新开始同步时仅同步这些表。由此,实现了部分表同步失败后,可单独重跑该表的有益效果,具有恢复易操作的优点。本实施例未尽详细解释之处,请参见前述实施例,在此不再赘述。实施例三在上述实施例的基础上,本实施例针对ods数据库同步这一具体的应用场景,以同步一个业务数据库至ods层为例,提供了一种具体的实施方式,其中,如图3a所示,本实施例提供的数据库同步方法中表结构同步部分具体包括:s310、根据预先建立的数据库连接配置表中的连接关联信息分别创建与业务数据库以及与ods数据库的数据库连接,获取业务数据库和ods数据库的表结构信息。s320、根据业务数据库的表结构信息与ods数据库的表结构信息确定与表结构关联的数据表或者字段的新增删除变更信息。s330、根据业务数据库的表结构信息与ods数据库的表结构信息以及预设的字段属性捕获规则,确定与表结构关联的字段属性变更信息。字段属性捕获规则具体为字段属性检测配置信息和字段属性内容过滤信息。具体的,根据业务数据库的表结构信息与ods数据库的表结构信息确定至少一条待确认字段变更信息;如果待确认字段变更信息与字段属性捕获规则匹配,则将该待确认字段变更信息确定为与表结构关联的字段属性变更信息。s340、分别将新增删除变更信息和字段属性变更信息添加至匹配的变更记录表中。s350、根据变更记录表生成变更语句,并控制ods数据库执行所述变更语句,以更新ods数据库的表结构信息。s360、如果确定已同步完成业务数据库到ods数据库的表结构信息,则执行ods数据库到stg暂存库的表结构信息同步。其中,ods数据库到stg暂存库的表结构信息同步方法与业务数据库到ods数据库的表结构信息同步方法相同,在此不再赘述。至此,完成了业务库与数据仓库的表结构同步。如图3b所示,本实施例提供的数据库同步方法中内容同步部分,具体包括:s301、根据预先建立的数据库连接配置表中的连接关联信息分别创建与业务数据库以及与ods数据库的数据库连接。s302、根据变更记录表确定本次同步是否存在新增表,若是,则执行s303,若否,则执行s304。s303、根据新增删除变更信息的新增数据表表名更新数据表同步配置表,执行s306。s304、根据变更记录表确定本次同步是否存在新增字段,若否,则执行s305,若是,则执行s306。s305、使用当前etl工程执行与数据表同步配置表中待同步数据表对应的增量数据同步。s306、获取相应新增表和/或与新增字段匹配的新增字段相关表,根据相应新增表和/或新增字段相关表更新当前etl工程。s307、使用更新后的etl工程执行与相应新增表和/或新增字段相关表对应的全量数据同步操作,以及执行与数据表同步配置表中待同步数据表对应的增量数据同步。针对ods层数据库的内容同步任务,使用etl工程完成上述的数据同步操作,一个etl工程任务中包括prepare,process,end三个子任务,prepare负责读取数据表同步配置表,然后从业务数据库拉取数据表同步配置表中待同步配置信息为有效的各个表中创建时间和修改时间在同步时间区间内的数据,即同步时间区间内发生变化的数据,插入到stg暂存库里;process负责把stg暂存库里的数据同步到ods数据库,end负责更新同步时间为当前时间。其中,业务数据库到stg暂存库的内容同步,和stg暂存库到ods暂存库的内容同步,均可通过执行s302-s307来实现。至此,完成了业务库与ods数据库的内容同步。本实施例未尽详细解释之处,请参见前述实施例,在此不再赘述。其中,本发明实施例提供的内容同步部分值得指出的几点设计为:1、etl工程采用多线程抽取的设计具体的,etl工程利用pdi软件提供的同步执行hop连接,可以实现多线程功能,配合连接池可以显著提高etl抽取/插入/更新速度。2、同步时间区间可根据用户需求自行配置的设计具体的,同步时间区间可根据用户需求自行配置,解决了同步失败后重跑历史时间窗口数据的问题,具有恢复易操作的优点。3、数据表同步配置表可根据用户需求自行配置的设计具体的,数据表同步配置表可根据用户需求自行配置,实现了部分表同步失败后,可单独重跑该表的有益效果,具有恢复易操作的优点。4、目标表数据的插入/更新设计同一个连接下,存在local.ods_jff目标库和local.stg_ods_jff暂存库,在stg_ods_jff通过sql脚本,跨库联表筛选出插入/更新数据,最后执行插入/更新操作。5、etl工程可根据模板自动生成的设计通过python编写自动生成程序,具有参考模板生成etl项目的功能。其中需要根据表的属性,例如是否拥有主键、是否有创建时间、修改时间等属性,来判断是否需要分类生成,例如抽取的sql是全量还是增量语句。本发明实施例提供的技术方案,用户可以根据需求灵活地配置要同步的表、配置同步的时间窗口、配置字段结构变更捕获触发条件、配置内容同步任务线程数量;具有独立的数据库连接配置模块(数据库连接配置表),实现与源数据库以及目标数据库的数据库连接;表结构同步部分和内容同步部分高度解耦;etl工程可自动生成。通过配置n个任务实例,即可实现同步n个业务库到ods层,并且每次同步信息都能落库。实施例四图4是本发明实施例四提供的一种数据库的同步装置的结构示意图,可适用于数据仓库ods层数据库同步的情况,尤其是业务数据库中存在特殊的字段属性(例如业务数据库存在虚拟键、特定属性notnull)容易导致数据同步失败的情况,该装置可采用软件和/或硬件的方式实现,并一般可集成计算机的处理器中。如图4所示,该数据库的同步装置具体包括:表结构信息获取模块410、表结构变更确定模块420、表结构同步模块430和数据同步模块440,其中,表结构信息获取模块410,用于获取源数据库和目标数据库的表结构信息;表结构变更确定模块420,用于根据所述源数据库的表结构信息与所述目标数据库的表结构信息,以及预设的字段属性捕获规则,确定表结构变更信息;表结构同步模块430,用于根据所述表结构变更信息生成变更语句,并控制所述目标数据库执行所述变更语句,以更新所述目标数据库的表结构信息;数据同步模块440,用于获取所述源数据库中与所述表结构变更信息匹配的更新数据同步至所述目标数据库中。本发明实施例的技术方案,可以快速配置多个源数据库(业务数据库)到数据仓库ods层的同步实例,灵活且实用,不需要修改源数据库的任何配置,不需要开启binlog,也不依赖于数据库工具(例如mysqldump),而且,通过预设字段属性捕获规则,实现了库表字段多属性可选、内容可过滤的同步功能,解决了因源数据库字段属性特殊(例如源数据库存在虚拟键、特定属性notnull)导致数据同步失败的问题。其中,表结构信息获取模块410,具体用于在达到与预设的同步周期匹配的同步时间时,获取源数据库和目标数据库的表结构信息;数据同步模块440,具体用于获取所述源数据库中与所述表结构变更信息匹配的前一同步周期内的更新数据同步至所述目标数据库中。进一步的,表结构变更确定模块420具体包括:新增删除变更信息确定单元和字段属性变更信息确定单元,其中,新增删除变更信息确定单元,用于根据所述源数据库的表结构信息与所述目标数据库的表结构信息确定与表结构关联的数据表或者字段的新增删除变更信息;字段属性变更信息确定单元,用于根据所述源数据库的表结构信息与所述目标数据库的表结构信息以及预设的字段属性捕获规则,确定与表结构关联的字段属性变更信息。具体的,所述字段属性捕获规则包括:字段属性检测配置信息和字段属性内容过滤信息。进一步的,字段属性变更信息确定单元,具体用于根据所述源数据库的表结构信息与所述目标数据库的表结构信息确定至少一条待确认字段变更信息;如果所述待确认字段变更信息与所述字段属性捕获规则匹配,则将该所述待确认字段变更信息确定为与表结构关联的字段属性变更信息。进一步的,该数据库的同步装置还包括:数据表同步配置表更新模块,用于,在获取所述源数据库中与所述表结构变更信息匹配的更新数据同步至所述目标数据库中之前,根据所述新增删除变更信息的新增表表名更新数据表同步配置表。进一步的,数据同步模块440具体包括:第一数据同步单元和第二数据同步单元,其中,第一数据同步单元,用于如果根据所述新增删除变更信息确定不存在新增表和新增字段,则使用当前etl工程执行与所述数据表同步配置表中待同步数据表对应的增量数据同步;第二数据同步单元,用于如果根据所述新增删除变更信息确定存在新增表和/或新增字段,则获取相应所述新增表和/或与所述新增字段匹配的新增字段相关表;根据相应所述新增表和/或所述新增字段相关表更新当前etl工程;使用更新后的etl工程执行与相应所述新增表和/或所述新增字段相关表对应的全量数据同步操作,以及执行与所述数据表同步配置表中待同步数据表对应的增量数据同步。进一步的,第一数据同步单元和第二数据同步单元在用于执行与所述数据表同步配置表中待同步数据表对应的增量数据同步时,具体用于获取与增量数据同步对应的同步时间区间;根据所述同步时间区间执行与所述数据表同步配置表中待同步数据表对应的增量数据同步。进一步的,数据同步模块440还具体包括:第三数据同步单元,用于如果根据所述新增删除变更信息确定存在删除字段,则获取与所述删除字段匹配的删除字段相关表;根据所述删除字段相关表更新当前etl工程;使用更新后的etl工程执行与所述删除字段相关表对应的数据同步操作。进一步的,数据同步模块440还具体包括:第四数据同步单元,用于如果根据所述新增删除变更信息确定存在删除表,则获取所述删除表;根据所述删除表更新当前etl工程;使用更新后的etl工程执行与所述删除表对应的数据同步操作。具体的,所述同步时间区间根据用户需求可自行配置,和/或,所述数据表同步配置表中待同步数据表根据用户需求可自行配置。进一步的,该数据库的同步装置还包括:变更记录模块,用于分别将所述新增删除变更信息和字段属性变更信息添加至匹配的变更记录表中;其中,所述新增删除变更信息包括:新增表变更信息、删除表变更信息、新增字段变更信息和删除字段变更信息;所述变更记录表包括:新增表变更记录表、删除表变更记录表、新增字段变更记录表、删除字段变更记录表和字段属性变更记录表。进一步的,该数据库的同步装置还包括:数据库连接模块,用于在获取源数据库和目标数据库的表结构信息之前,根据预先建立的数据库连接配置表中的连接关联信息分别创建与所述源数据库以及与所述目标数据库的数据库连接。进一步的,该数据库的同步装置还包括:映射模块,用于如果确定所述源数据库和所述目标数据库为异构数据库,则将所述源数据库和所述目标数据库中的字段属性映射为同一类型的字段属性;对应的,表结构同步模块430具体用于根据所述表结构变更信息生成与所述目标数据库匹配的变更语句。上述数据库的同步装置可执行本发明任意实施例所提供的数据库的同步方法,具备执行数据库的同步方法相应的功能模块和有益效果。实施例五图5为本发明实施例五提供的一种设备的硬件结构示意图,如图5所示,该设备包括:一个或多个处理器510,图5中以一个处理器510为例;存储器520;所述设备还可以包括:输入装置530和输出装置540。所述设备中的处理器510、存储器520、输入装置530和输出装置540可以通过总线或者其他方式连接,图5中以通过总线连接为例。存储器520作为一种非暂态计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的一种数据库的同步方法对应的程序指令/模块(例如,附图4所示的表结构信息获取模块410、表结构变更确定模块420、表结构同步模块430和数据同步模块440)。处理器510通过运行存储在存储器520中的软件程序、指令以及模块,从而执行计算机设备的各种功能应用以及数据处理,即实现上述方法实施例的一种数据库的同步方法。存储器520可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据计算机设备的使用所创建的数据等。此外,存储器520可以包括高速随机存取存储器,还可以包括非暂态性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态性固态存储器件。在一些实施例中,存储器520可选包括相对于处理器510远程设置的存储器,这些远程存储器可以通过网络连接至终端设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。输入装置530可用于接收输入的数字或字符信息,以及产生与计算机设备的用户设置以及功能控制有关的键信号输入。输出装置540可包括显示屏等显示设备。实施例六本发明实施例六还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行一种数据库的同步方法,该方法包括:获取源数据库和目标数据库的表结构信息;根据所述源数据库的表结构信息与所述目标数据库的表结构信息,以及预设的字段属性捕获规则,确定表结构变更信息;根据所述表结构变更信息生成变更语句,并控制所述目标数据库执行所述变更语句,以更新所述目标数据库的表结构信息;获取所述源数据库中与所述表结构变更信息匹配的更新数据同步至所述目标数据库中。可选的,该计算机可执行指令在由计算机处理器执行时还可以用于执行本发明任意实施例所提供的一种数据库的同步方法的技术方案。通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、闪存(flash)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。值得注意的是,上述数据库的同步装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1