一种数据同步方法、装置、系统、介质及电子设备
技术领域
本发明涉及计算机技术领域,具体而言,涉及一种数据同步方法、装置、系统、介质及电子设备。
背景技术
随着互联网和大数据技术的推广和普及,基于Hadoop和Hive分布式集群的数据仓库已逐步成为主流。目前数据仓库的数据来源主要包括存放于关系型数据库的会员、订单等结构化数据,以及用户行为、应用日志、图像视频等以文件形式存储的非结构化数据,其中存放于关系型数据库的会员、订单等结构化数据是数据仓库数据来源中最重要的部分,也是数据分析和挖掘最有价值的部分。
当前从关系型数据库将数据T+1同步至Hive数据仓库的方式主要为离线抽取,即在每天零点过后通过SQL语句将源端关系型数据库前一天新增或发生了变更的增量记录查询出来,写入到数据仓库的贴源层中,并加载到贴源层Hive表每天对应的分区中去。
通过离线抽取实现数据从源端关系型数据库T+1同步至Hive数据仓库的方式存在如下问题:
(1)数据的一致性难以得到保证。由于离线抽取的方式是以记录的更新时间字段为查询条件对数据进行增量抽取,源端关系型数据库可能出现记录在被修改时未同步修改更新时间字段,或者记录发生了删除,导致该部分变化的数据无法被抽取到。另外,离线抽取的定时任务并不一定在每天零点准时启动,往往在零点过后根据优先级分批启动,故在零点和离线抽取任务启动的时间间隔区间内,前一天发生了变更的记录可能被再次更新,更新时间字段被同步修改为当天的时间,从而导致这些数据同样无法被抽取到。
(2)数据表结构的一致性难以得到保证。由于业务的变化非常频繁,源端关系型数据库的表结构随时可能发生变化,新增了字段且该字段有新数据写入,数据仓库端无法感知源端关系型数据库的表结构变化,不会自动同步进行Hive表结构的变更和新字段数据的抽取。
由于以上的缺点,离线抽取的方式无法很好地满足财务报表等对数据高一致性要求而对数据的时效性要求相对较低的数据分析场景,会导致财务报表的数据不正确进而影响到企业的正常生产经营活动。
需要说明的是,在上述背景技术部分公开的信息仅用于加强对本发明的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
本发明实施例的目的在于提供一种数据同步方法、装置、系统、介质及电子设备,进而至少在一定程度上克服相关技术中数据的一致性和数据表结构的一致性难以得到保证的一个或多个问题。
本发明的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本发明的实践而习得。
根据本发明实施例的第一方面,提供了一种数据同步方法,包括:
对数据库中日志的记录和表结构进行变更检测,获取所述数据库日志的记录变更数据和表结构变更数据;
将所述记录变更数据向HBase数据控制写入模块发送;
将所述表结构变更数据向Hive表结构同步模块发送。
在本发明的一个实施例中,上述获取所述数据库的记录变更数据和表结构变更数据之后,所述方法还包括:
将所获取的记录变更数据和表结构变更数据按照检测时的先后顺序输入至消息队列中,以按照所述消息队列依次向所述HBase数据控制写入模块和所述Hive表结构同步模块发送。
在本发明的一个实施例中,上述对数据库中日志的记录和表结构进行变更检测,获取所述数据库日志的记录变更数据和表结构变更数据,所述方法还包括:
当检测到所述数据库的日志时间戳从当日切换至次日后,判断所述数据库日志当日的记录和表结构的变更检测是否完成;
当确定变更检测完成后,向所述HBase数据控制写入模块发送当日记录变更数据和表结构变更数据的写入指令;
当接收到所述HBase数据控制写入模块发送的当日记录变更数据和表结构变更数据写入完成的信息后,向数据加载模块发送向所述Hive表结构同步模块同步当日记录变更数据的控制信息。
在本发明的一个实施例中,上述对数据库中日志的记录和表结构进行变更检测,获取所述数据库日志的记录变更数据和表结构变更数据,包括:
所述数据库日志的记录变更数据至少包括:DML操作类型、变更前记录数据、变更后记录数据以及事务提交时间戳,其中,
当所述DML操作类型为Insert时,所述变更前记录数据为空,所述变更后记录数据为新增的完整记录;
当所述DML操作类型为Update时,所述变更前记录数据为Update前的完整记录,所述变更后记录数据为Update后的完整数据;
当所述DML操作类型为Delete时,所述变更前记录数据为Delete前的完整数据,所述变更后记录数据为空。
在本发明的一个实施例中,上述对数据库中日志的记录和表结构进行变更检测,获取所述数据库日志的记录变更数据和表结构变更数据,包括:
所述数据库日志的表结构变更数据至少包括:DDL操作记录、表结构变更数据以及事务提交时间戳,其中,
所述DDL操作类型至少包括:Add Column字段变更和Alter Column字段变更;
所述表结构变更数据至少包括:变更的字段名和字段数据类型;
所述事务提交时间戳为所述DDL操作所属数据库隐式事务的提交时间戳。
根据本发明实施例的第二方面,提供了一种数据同步方法,包括:
接收从日志变更检测模块发送的记录变更数据;
基于所述记录变更数据生成HBase主键值;
生成包含有所述HBase主键值和所述记录变更数据的HBase记录,将所述HBase记录写入HBase数据库;
将所述HBase数据库中当日的HBase记录向数据同步模块发送。
在本发明的一个实施例中,上述生成包含有所述HBase主键值和所述记录变更数据的HBase记录,将所述HBase记录写入HBase数据库,包括:
从所述记录变更数据中提取出变更后的记录数据、事务提交时间戳、DML操作类型;
生成对应于所述变更后的记录数据的记录主键值,并根据事务提交时间戳确定出事务提交日期;
基于所述记录主键值和事务提交日期生成HBase主键值;
将所述HBase主键值、变更后的记录数据、事务提交时间戳以及DML操作类型生成HBase记录,并写入HBase数据库。
在本发明的一个实施例中,上述将所述HBase记录写入HBase数据库,包括:通过Put指令将所述HBase记录写入至所述HBase数据库,其中,所述HBase数据库中一行的HBase记录以事务提交时间戳的大小表示HBase记录的新旧。
根据本发明实施例的第三方面,提供了一种数据同步方法,包括:
接收从日志变更检测模块发送的表结构变更数据;
从所述表结构变更数据提取Add Column字段变更和Alter Column字段;
将所述表结构变更数据中的Add Column字段变更和Alter Column字段变更同步至数据仓库贴源层对应的Hive表上。
根据本发明实施例的第四方面,提供了一种数据同步方法,其特征在于,包括:
接收日志变更检测模块发送的向Hive表结构同步模块同步当日记录变更数据的控制信息;
从HBase数据控制写入模块获取当日的HBase记录,并将所述HBase记录同步至数据仓库贴源层对应的Hive表上。
根据本发明实施例的第五方面,提供了一种日志变更检测模块,包括:
获取模块,用于对数据库中日志的记录和表结构进行变更检测,获取所述数据库日志的记录变更数据和表结构变更数据;
第一发送模块,用于将所述记录变更数据向HBase数据控制写入模块发送;
第二发送模块,用于将所述表结构变更数据向Hive表结构同步模块发送。
根据本发明实施例的第六方面,提供了一种HBase数据控制写入模块,包括:
接收模块,用于接收从日志变更检测模块发送的记录变更数据;
生成模块,用于基于所述记录变更数据生成HBase主键值;;
写入模块,用于生成包含有所述HBase主键值和所述记录变更数据的HBase记录,将所述HBase记录写入HBase数据库;
发送模块,用于将所述HBase数据库中当日的HBase记录向数据同步模块发送。
根据本发明实施例的第七方面,提供了一种Hive表结构同步模块,包括:
接收模块,用于接收从日志变更检测模块发送的表结构变更数据;
提取模块,用于从所述表结构变更数据提取Add Column字段变更和Alter Column字段;
同步模块,用于将所述表结构变更数据中的Add Column字段变更和Alter Column字段变更同步至数据仓库贴源层对应的Hive表上。
根据本发明实施例的第八方面,提供了一种数据加载模块,包括:
接收模块,用于接收日志变更检测模块发送的向Hive表结构同步模块同步当日记录变更数据的控制信息;
同步模块,用于从HBase数据控制写入模块获取当日的HBase记录,并将所述HBase记录同步至数据仓库贴源层对应的Hive表上。
根据本发明实施例的第九方面,提供了一种数据同步系统,其特征在于,包括:日志变更检测模块、HBase数据控制写入模块、Hive表结构同步模块、数据加载模块;其中,
日志变更检测模块,用于对数据库中日志的记录和表结构进行变更检测,获取所述数据库日志的记录变更数据和表结构变更数据;将所述记录变更数据向HBase数据控制写入模块发送;将所述表结构变更数据向Hive表结构同步模块发送;
HBase数据控制写入模块,用于接收从日志变更检测模块发送的记录变更数据;基于所述记录变更数据生成HBase主键值;生成包含有所述HBase主键值和所述记录变更数据的HBase记录,将所述HBase记录写入HBase数据库;将所述HBase数据库中当日的HBase记录向数据同步模块发送;
Hive表结构同步模块,用于接收从日志变更检测模块发送的表结构变更数据;从所述表结构变更数据提取Add Column字段变更和Alter Column字段;将所述表结构变更数据中的Add Column字段变更和Alter Column字段变更同步至数据仓库贴源层对应的Hive表上;
数据加载模块,用于接收日志变更检测模块发送的向Hive表结构同步模块同步当日记录变更数据的控制信息;从HBase数据控制写入模块获取当日的HBase记录,并将所述HBase记录同步至数据仓库贴源层对应的Hive表上。
根据本发明实施例的第十方面,提供了一种计算机可读介质,其上存储有计算机程序,上述程序被处理器执行时实现如上述实施例中第一方面的数据同步方法,或实现如上述实施例中第二方面的数据同步方法,如上述实施例中第三方面的数据同步方法,如上述实施例中第四方面的数据同步方法。
根据本发明实施例的第十一方面,提供了一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当一个或多个程序被所述一个或多个处理器执行时,使得一个或多个处理器实现如上述实施例中第一方面的数据同步方法,或实现如上述实施例中第二方面的数据同步方法,如上述实施例中第三方面的数据同步方法,如上述实施例中第四方面的数据同步方法。
本发明实施例提供的技术方案可以包括以下有益效果:
本发明实施例提供了一种数据同步方法、装置、系统、介质及电子设备,该数据同步方法包括:对数据库中日志的记录和表结构进行变更检测,获取所述数据库日志的记录变更数据和表结构变更数据;将所述记录变更数据向HBase数据控制写入模块发送;将所述表结构变更数据向Hive表结构同步模块发送。本发明实施例的技术方案基于日志解析的实时复制技术,再加上数据版本控制和延时控制,解决数据不准和数据结构不一致问题,实现了Hive数据仓库当日数据和源数据库变更数据完全一致,满足了Hive数据仓库T+1高精度数据分析和报表需求。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1示意性示出了根据本发明的一个实施例的日志变更检测模块实现数据同步方法的流程图
图2示意性示出了根据本发明的一个实施例的日期切换后数据加载模块实现数据同步方法的流程图;
图3示意性示出了根据本发明的一个实施例的HBase数据控制写入模块实现数据同步方法的流程图;
图4示意性示出了根据本发明的一个实施例的HBase数据控制写入模块写入HBase记录的流程图;
图5示意性示出了根据本发明的一个实施例的Hive表结构同步模块实现数据同步方法的流程图;
图6示意性示出了根据本发明的一个实施例的数据加载模块实现数据同步方法的流程图;
图7示意性示出了根据本发明的一个实施例的数据同步系统的框图以及流程图;
图8示意性示出了根据本发明的一个实施例的日志变更检测模块的框图;
图9示意性示出了根据本发明的一个实施例的HBase数据控制写入模块的框图;
图10示意性示出了根据本发明的一个实施例的Hive表结构同步模块的框图;
图11示意性示出了根据本发明的一个实施例的数据加载模块的框图;
图12示出了适于用来实现本发明实施例的电子设备的计算机系统的结构示意图。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本发明将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。
此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本发明的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本发明的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本发明的各方面。
附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
图1示意性示出了根据本发明的一个实施例的日志变更检测模块实现数据同步方法的流程图。
参照图1所示,根据本发明的一个实施例的日志变更检测模块实现数据同步方法,包括如下步骤:
在步骤S110中,对数据库中日志的记录和表结构进行变更检测,获取数据库日志的记录变更数据和表结构变更数据;
在本发明的一个实施例中,日志变更检测模块实时检测源端的关系型数据库所保存的日志的记录变更和表结构变更。
在本发明的一个实施例中,数据库的日志保存有数据库模式定义语言(DDL,DataDefinition Language)事务操作的文件和数据操纵语言(DML,Data ManipulationLanguage)事务操作的文件,主要用于数据库主从复制和备份恢复。
在本发明的一个实施例中,基于前述方案,数据库日志的记录变更数据至少包括:DML操作类型(主要用于描述数据库记录的Select查询、Insert新增、Update修改和Delete删除操作)、变更前记录数据、变更后记录数据以及事务提交时间戳,其中,当DML操作类型为Insert时,变更前记录数据为空,变更后记录数据为新增的完整记录;当DML操作类型为Update时,变更前记录数据为Update前的完整记录,变更后记录数据为Update后的完整数据;当DML操作类型为Delete时,变更前记录数据为Delete前的完整数据,变更后记录数据为空。
在本发明的一个实施例中,基于前述方案,数据库日志的表结构变更数据至少包括:数据库模式定义语言(DDL,Data Definition Language)操作记录(主要用于描述数据库对象(如库、表)的新增和结构变更)、表结构变更数据以及事务提交时间戳,其中,DDL操作类型至少包括:Add Column字段变更和Alter Column字段变更;表结构变更数据至少包括:变更的字段名和字段数据类型;事务提交时间戳为DDL操作所属数据库隐式事务的提交时间戳。
在本发明的一个实施例中,基于前述方案,将变更检测的结果按照检测时的先后顺序输入至消息队列中,以按照消息队列依次向HBase数据控制写入模块和Hive表结构同步模块发送。
在本发明的一个实施例中,由于从关系型数据库日志解析,将解析结果放入消息队列,到HBase写入模块把数据写入的整个过程是一个异步过程,故会存在一定的数据延时。正常情况下整个过程的延时为秒级,在系统或者集群出现性能波动的时候,可能产生更大的延时。当在自然日期切换的临界时间点即每天的0点时,可能出现前一天23点59分左右的数据,延时到第二天0点后才写入到HBase中,这就需要基于通知触发的数据加载模块来保证延时到第二天0点后写入HBase的数据,也能被完整准确地加载到Hive表中前一天的日期分区中,具体的,当检测到数据库的日志时间戳从当日切换至次日后,判断数据库日志当日的记录和表结构的变更检测是否完成;当确定变更检测完成后,向HBase数据控制写入模块发送当日记录变更数据和表结构变更数据的写入指令;当接收到HBase数据控制写入模块发送的当日记录变更数据和表结构变更数据写入完成的信息后,向数据加载模块发送向Hive表结构同步模块同步当日记录变更数据的控制信息。
图2示意性示出了根据本发明的一个实施例的日期切换后数据加载模块实现数据同步方法的流程图。
参照图2所示,根据本发明的一个实施例的日期切换后数据加载模块实现数据同步方法,包括如下步骤:
步骤S210,日志变更检测模块对数据库中日志的记录和表结构进行变更检测;
步骤S220,通过检测判断日志的日期是否从当日切换至次日,如果切换至次日,执行步骤S203;如果没有切换至次日,则返回步骤S202;
步骤S230,向HBase数据控制写入模块发送当日记录数据写入的控制信息;
步骤S240,HBase数据控制写入模块判断当日记录数据是否都已写入HBase,如果是,HBase数据控制写入模块向日志变更检测模块返回当日记录数据已全部写入HBase的信息,并执行步骤S205;如果否,则返回步骤S204;
步骤S250,日志变更检测模块向数据加载模块发送同步控制信息;
步骤S260,数据加载模块将当日的记录数据加载到Hive表对应的日期分期中。
在本发明的一个实施例中,上述图2所示的本发明的一个实施例的日期切换后数据加载模块实现数据同步方法在流程中需要同时满足一下两个检查点:(1)源端数据库日志解析是否已经日切,即解析到第二天0点后,以保证源端前一天的记录变更被完整地捕捉到;(2)HBase数据写入模块是否已将前一天的记录变更都写入HBase,以保证前一天的记录变更被完整地写入目标端。只有上述(1)和(2)的两个关键检查点都通过后,数据加载模块才会将前一天的变更记录都加载到Hive表对应的日期分区中。
步骤S120,将记录变更数据向HBase数据控制写入模块发送;
在本发明的一个实施例中,日志变更检测模块将检测到的记录变更数据按照检测顺序添加至自身的队列中,向HBase控制写入模块发送。
步骤S130,将表结构变更数据向Hive表结构同步模块发送。
在本发明的一个实施例中,日志变更检测模块将检测到的表结构变更数据按照检测顺序添加至自身的队列中,向Hive表结构同步模块发送。
图3示意性示出了根据本发明的一个实施例的HBase数据控制写入模块实现数据同步方法的流程图。
参照图3所示,根据本发明的一个实施例的HBase数据控制写入模块实现数据同步方法,包括如下步骤:
在步骤S310中,接收从日志变更检测模块发送的记录变更数据;
在步骤S320中,基于记录变更数据生成HBase主键值;
在本发明的一个实施例中,从记录变更数据中提取出变更后的记录数据、事务提交时间戳、DML操作类型;生成对应于变更后的记录数据的记录主键值,并根据事务提交时间戳确定出事务提交日期;基于记录主键值和事务提交日期生成HBase主键值;将HBase主键值、变更后的记录数据、事务提交时间戳以及DML操作类型生成HBase记录,并写入HBase数据库。
在本发明的一个实施例中,HBase是Hadoop体系中的一种列式存储非关系型数据库,能够支持海量数据的高并发写入,本发明实施例所提出的HBase数据版本控制写入模块利用了HBase的如下特性:HBase以Put的方式进行新增或修改记录的写入,同一行记录可以有多个版本,通过记录时间戳的大小表示版本的新旧,默认情况下只会查询出最新版本(时间戳最大)的记录。HBase数据版本控制写入模块从日志变更检测模块的消息队列中持续获取源端关系型数据库记录变更,并从中解析出记录的主键值和记录的事务提交时间戳,将二者拼接作为HBase记录的RowKey(主键),事务提交时间戳作为HBase记录的版本时间戳,通过这种设计,可以保证源端关系型数据库同一行记录同一天的多次变更写入HBase时,新的变更一定会覆盖旧版本的变更,最终只会在HBase中保留当天最后一次变更的数据,从而实现了按天保留记录最后一个版本快照的功能。
在本发明的一个实施例中,当源端关系型数据库的记录被删除时,该记录仍会在HBase中保留,但是其操作类型被标识为Delete。
在步骤S330中,生成包含有HBase主键值和记录变更数据的HBase记录,将HBase记录写入HBase数据库;
在本发明的一个实施例中,通过Put指令将HBase记录写入至HBase数据库,其中,HBase数据库中一行的HBase记录以事务提交时间戳的大小表示HBase记录的新旧。
在本发明的一个实施例中,向HBase中写入HBase记录需要HTable,HTable负责向一张HBase表中读或者写数据,HTable对象是非线程安全的,在多线程使用时,创建HTable对象时需要指定表名参数,HTable内部有一个LinkedList<Row>的队列writeAsyncBuffer,负责对写入到HBase的数据在客户端缓存,开启缓存使用参数table.setAutoFlushTo(false);默认情况不开启,每次put一条HBase记录时,htable对象就会调用flushCommits方法向regserver中提交,开启缓存则会比较队列的大小,如果大于某个值则调用flushCommits,这个值默认是2m,可以通过在HBase-site.xml中设置参数"HBase.client.write.buffer"来调整,默认是2097152,在关闭htable连接时,会隐式的调用flushCommits方法,保证数据完全提交,提交时会根据rowkey定位该put应该提交到哪个reginserver,然后每个regionserver一组action发送出去。
在本发明的一个实施例中,由于HBase是模式自由的,即可以在数据写入时自由新增列而无需HBase表结构变更,故在源端关系型数据库新增字段时,新字段中的数据可以无缝的写入HBase,从而进一步保证了数据的一致性。
在步骤S340中,将HBase数据库中当日的HBase记录向数据同步模块发送。
图4示意性示出了根据本发明的一个实施例的HBase数据控制写入模块写入HBase记录的流程图。
参照图4所示,根据本发明的一个实施例的HBase数据控制写入模块写入HBase记录,包括如下步骤:
步骤S410,从日志变更检测模块的队列中获取记录变更;
在本发明的一个实施例中,日志变更检测模块的队列中包含有源端关系型数据库日志的记录变更数据以及表结构变更数据,这里,HBase数据控制写入模块从志变更检测模块的队列中只获取变更记录数据,其中,变更记录数据至少包括:DML操作类型、变更前记录数据、变更后记录数据以及事物提交时间戳。
步骤S420,生成HBase RowKey;
在本发明的一个实施例中,提取所获取变更记录数据中的变更前记录数据、变更后记录数据以及事物提交时间戳,生成HBase RowKey(主键值)。
步骤S430,生成HBase记录并写入HBase。
在本发明的一个实施例中,将所生成的HBase RowKey(主键值)、记录数据(包括有记录数据详情)、事物提交时间戳(用于标识记录的版本时间戳)以及DML操作类型(标识源端关系型数据库中该记录的操作类型)生成HBase记录,写入至HBase数据库中。
图5示意性示出了根据本发明的一个实施例的Hive表结构同步模块实现数据同步方法的流程图。
参照图5所示,根据本发明的一个实施例的Hive表结构同步模块实现数据同步方法,包括如下步骤:
步骤S510,接收从日志变更检测模块发送的表结构变更数据;
步骤S520,从表结构变更数据提取Add Column字段变更和Alter Column字段;
步骤S530,将表结构变更数据中的Add Column字段变更和Alter Column字段变更同步至数据仓库贴源层对应的Hive表上。
在本发明的一个实施例中,该模块从消息队列中持续获取源端关系型数据库表结构变更,并将Add_Column和Alter_Column两种字段变更同步至数据仓库贴源层对应的Hive表上,实现Hive表结构和源端关系型数据库表结构的一致。
图6示意性示出了根据本发明的一个实施例的数据加载模块实现数据同步方法的流程图。
参照图6所示,根据本发明的一个实施例的数据加载模块实现数据同步方法,包括如下步骤:
步骤S610,接收日志变更检测模块发送的向Hive表结构同步模块同步当日记录变更数据的控制信息;
步骤S620,从HBase数据控制写入模块获取当日的HBase记录,并将HBase记录同步至数据仓库贴源层对应的Hive表上。
在本发明的一个实施例中,由于从关系型数据库日志解析,将解析结果放入消息队列,到HBase写入模块把数据写入的整个过程是一个异步过程,故会存在一定的数据延时。正常情况下整个过程的延时为秒级,在系统或者集群出现性能波动的时候,可能产生更大的延时。当在自然日期切换的临界时间点即每天的0点时,可能出现前一天23点59分左右的数据,延时到第二天0点后才写入到HBase中,这就需要基于通知触发的数据加载模块来保证延时到第二天0点后写入HBase的数据,也能被完整准确地加载到Hive表中前一天的日期分区中,具体可参照上述图2所示出的根据本发明的一个实施例的日期切换后数据加载模块实现数据同步方法的流程图,这里不再赘述。
本发明实施例提供了一种数据同步方法、装置、系统、介质及电子设备,该数据同步方法包括:通过解析源端关系型数据库的日志实时获取数据库的记录变更和表结构变更,对于记录变更,解析出其中包含的源端记录主键和事务提交时间信息,并将这二者组合成8位事务提交日期+源端记录主键作为HBase中相应记录的主键,以实现在源端某条记录某天发生多次DML变更时在HBase中自动实现只保留记录的当天最后一个数据版本;对于表结构变更,将表结构的新增字段和字段变更同步至数据仓库贴源层相应的Hive表上;当源端关系型数据库日志解析模块探测到日志中的事务提交时间已经切换到新的一天时,会通知数据加载模块,数据加载模块检查当前记录变更的消费进度,直至前一天的记录变更已全部被消费完则进行加载操作,将前一天的增量记录加载到贴源层Hive表对应的日期分区中,通过各模块的功能协作,最终实现了Hive数据仓库的某日数据和源端数据库某日变更数据的完全一致,故在T+1财务报表等高精度场景中,可直接信赖使用Hive表对应的日期分区数据,大大降低了报表开发的复杂度,并提升了报表结果的质量。
下面以通过本发明的一个实施例所提出的数据同步系统对本发明的一个实施例所提出的数据同步方法进行详细阐述。
图7示意性示出了根据本发明的一个实施例的数据同步系统的框图以及流程图,其中,源端关系型数据库日志的记录变更通过MySQL的Binlog文件中保存,表结构变更通过Oracle的Redolog文件保存。
参照图7所示,根据本发明的一个实施例的数据同步系统的框图以及流程图,包括:日志变更检测模块701、HBase数据控制写入模块702、Hive表结构同步模块703、数据加载模块704、源端关系型数据库705,并包括如下步骤:
步骤S701,日志变更检测模块701对源端关系型数据库705的MySQL的Binlog文件和Oracle的Redolog文件进行变更检测;
在本发明的一个实施例中,关系型数据库会将DML和DDL操作记录到数据库的日志(如MySQL的Binlog和Oracle的Redolog)中,以实现数据库自身的灾备机制。
在本发明的一个实施例中,日志变更检测模块701捕捉数据库的记录变更和表结构变更,检测出来的数据库记录变更主要包含以下信息:
DML操作类型 |
变更前记录数据 |
变更后记录数据 |
事务提交时间戳 |
其中,操作类型包括Insert、Update和Delete三种类型,记录数据以数据表列名-列值的键值对方式保存,事务提交时间戳为每次DML操作所属数据库事务的提交时间戳;Insert操作变更前记录数据为空,变更后记录数据为新增的完整记录;Update操作变更前记录数据为Update前的完整记录,变更后记录数据为Update后的完整记录;Delete操作变更前记录数据为Delete前的完整记录,变更后记录数据为空;检测出来的数据库表结构变更主要包含以下信息:
其中,DDL操作类型主要包括Add_Column和Alter_Column两种字段变更,这两种表结构变更类型也是Hive表结构同步所关心的类型,表结构变更数据包括变更的字段名和字段数据类型,事务提交时间戳为每次DDL操作所属数据库隐式事务的提交时间戳。
步骤S702,将所检测到的记录变更数据和表结构变更数据根据检测顺序加入队列中,并检测源端关系型数据库705的日志时间戳是否从当日切换至次日,如切换,则执行步骤S703;
在本发明的一个实施例中,日志变更检测模块701将从关系型数据库中检测出的记录变更和表结构变更按照检测的先后顺序放入消息队列中,供后续的HBase数据控制模块702和Hive表结构同步模块703使用。
步骤S703,当检测到源端关系型数据库705日志的日期从当日切换至次日后,向数据加载模块704发送通知信息;
在本发明的一个实施例中,可以通过下述步骤检测源端关系型数据库705日志的日期从当日切换至次日:日志变更检测模块对数据库中日志的记录和表结构进行变更检测;通过检测判断日志的日期是否从当日切换至次日,如果切换至次日,执行步骤S203;如果没有切换至次日,则返回步骤S202;向HBase数据控制写入模块发送当日记录数据写入的控制信息;HBase数据控制写入模块判断当日记录数据是否都已写入HBase,如果是,HBase数据控制写入模块向日志变更检测模块返回当日记录数据已全部写入HBase的信息,并执行步骤S205;如果否,则返回步骤S204;日志变更检测模块向数据加载模块发送同步控制信息;数据加载模块将当日的记录数据加载到Hive表对应的日期分期中,日期切换后数据加载模块实现数据同步方法在流程中需要同时满足一下两个检查点:(1)源端数据库日志解析是否已经日切,即解析到第二天0点后,以保证源端前一天的记录变更被完整地捕捉到;(2)HBase数据写入模块是否已将前一天的记录变更都写入HBase,以保证前一天的记录变更被完整地写入目标端。只有上述(1)和(2)的两个关键检查点都通过后,数据加载模块才会将前一天的变更记录都加载到Hive表对应的日期分区中。
步骤S704,日志变更检测模块701将队列中的记录变更数据和表结构变更数据分别向HBase数据控制写入模块702和Hive表结构同步模块703发送;
步骤S705,HBase数据控制写入模块702根据记录变更数据创建对应的主键值,生成HBase记录,并写入HBase数据库中;
在本发明的一个实施例中,从记录变更数据中提取出变更后的记录数据、事务提交时间戳、DML操作类型;生成对应于变更后的记录数据的记录主键值,并根据事务提交时间戳确定出事务提交日期;基于记录主键值和事务提交日期生成HBase主键值;将HBase主键值、变更后的记录数据、事务提交时间戳以及DML操作类型生成HBase记录,并写入HBase数据库。
在本发明的一个实施例中,HBase是Hadoop体系中的一种列式存储非关系型数据库,能够支持海量数据的高并发写入,本发明实施例所提出的HBase数据版本控制写入模块702利用了HBase的如下特性:HBase以Put的方式进行新增或修改记录的写入,同一行记录可以有多个版本,通过记录时间戳的大小表示版本的新旧,默认情况下只会查询出最新版本(时间戳最大)的记录。HBase数据控制写入模块702从日志变更检测模块701的消息队列中持续获取源端关系型数据库记录变更,并从中解析出记录的主键值和记录的事务提交时间戳,将二者拼接作为HBase记录的RowKey(主键),事务提交时间戳作为HBase记录的版本时间戳,通过这种设计,可以保证源端关系型数据库同一行记录同一天的多次变更写入HBase时,新的变更一定会覆盖旧版本的变更,最终只会在HBase中保留当天最后一次变更的数据,从而实现了按天保留记录最后一个版本快照的功能,当源端关系型数据库705的记录被删除时,该记录仍会在HBase中保留,但是其操作类型被标识为Delete,另外,由于HBase是模式自由的,即可以在数据写入时自由新增列而无需HBase表结构变更,故在源端关系型数据库新增字段时,新字段中的数据可以无缝的写入HBase,从而进一步保证了数据的一致性,
需要说明的是,HBase数据控制写入模块702根据记录变更数据创建对应的主键值,生成HBase记录,并写入HBase数据库中具体操作可参照上述图3示出的根据本发明的一个实施例的HBase数据控制写入模块实现数据同步方法的流程图,这里不再赘述。
步骤S706,Hive表结构同步模块703从消息队列中持续获取源端关系型数据库表结构变更,并将Add_Column和Alter_Column两种字段变更同步至数据仓库贴源层对应的Hive表上;
步骤S707,数据加载模块704接收到日志变更检测模块701发送的通知信息后,从HBase数据控制写入模块702获取当日的记录变更数据;
在本发明的一个实施例中,由于从关系型数据库日志解析,将解析结果放入消息队列到HBase写入模块把数据写入的整个过程是一个异步过程,故会存在一定的数据延时。正常情况下整个过程的延时为秒级,在系统或者集群出现性能波动的时候,可能产生更大的延时。当在自然日期切换的临界时间点即每天的0点时,可能出现前一天23点59分左右的数据,延时到第二天0点后才写入到HBase中,这就需要基于通知触发的数据加载模块来保证延时到第二天0点后写入HBase的数据,也能被完整准确地加载到Hive表中前一天的日期分区中,具体可参照上述图2所示出的根据本发明的一个实施例的日期切换后数据加载模块实现数据同步方法的流程图,这里不再赘述。
步骤S708,将该当日变更数据加载到数据仓库贴源层对应的Hive表上。
本发明实施例提供了一种数据同步方法、装置、系统、介质及电子设备,该数据同步方法包括:通过解析源端关系型数据库的日志实时获取数据库的记录变更和表结构变更,对于记录变更,解析出其中包含的源端记录主键和事务提交时间信息,并将这二者组合成8位事务提交日期+源端记录主键作为HBase中相应记录的主键,以实现在源端某条记录某天发生多次DML变更时在HBase中自动实现只保留记录的当天最后一个数据版本;对于表结构变更,将表结构的新增字段和字段变更同步至数据仓库贴源层相应的Hive表上;当源端关系型数据库日志解析模块探测到日志中的事务提交时间已经切换到新的一天时,会通知数据加载模块,数据加载模块检查当前记录变更的消费进度,直至前一天的记录变更已全部被消费完则进行加载操作,将前一天的增量记录加载到贴源层Hive表对应的日期分区中,通过各模块的功能协作,最终实现了Hive数据仓库的某日数据和源端数据库某日变更数据的完全一致,故在T+1财务报表等高精度场景中,可直接信赖使用Hive表对应的日期分区数据,大大降低了报表开发的复杂度,并提升了报表结果的质量。
以下介绍本发明的装置实施例,可以用于执行本发明上述的数据同步方法。
图8示意性示出了根据本发明的一个实施例的日志变更检测模块的框图。
参照图8所示,根据本发明的一个实施例的日志变更检测模块800,包括:
获取模块801,用于对数据库中日志的记录和表结构进行变更检测,获取数据库日志的记录变更数据和表结构变更数据;
第一发送模块802,用于将记录变更数据向HBase数据控制写入模块发送;
第二发送模块803,用于将表结构变更数据向Hive表结构同步模块发送。
由于本发明的示例实施例的日志变更检测模块的各个功能模块与上述第一方面的数据同步方法的示例实施例的步骤对应,因此对于本发明装置实施例中未披露的细节,请参照本发明上述的第一方面的数据同步方法。
图9示意性示出了根据本发明的一个实施例的HBase数据控制写入模块的框图。
参照图9所示,根据本发明的一个实施例的HBase数据控制写入模块900,包括:
接收模块901,用于接收从日志变更检测模块发送的记录变更数据;
生成模块902,用于基于记录变更数据生成HBase主键值;;
写入模块903,用于生成包含有HBase主键值和记录变更数据的HBase记录,将HBase记录写入HBase数据库;
发送模块904,用于将HBase数据库中当日的HBase记录向数据同步模块发送。
由于本发明的示例实施例的HBase数据控制写入模块的各个功能模块与上述第二方面的数据同步方法的示例实施例的步骤对应,因此对于本发明装置实施例中未披露的细节,请参照本发明上述的第二方面的数据同步方法。
图10示意性示出了根据本发明的一个实施例的Hive表结构同步模块的框图。
参照图10所示,根据本发明的一个实施例的Hive表结构同步模块1000,包括:
接收模块1001,用于接收从日志变更检测模块发送的表结构变更数据;
提取模块1002,用于从表结构变更数据提取Add Column字段变更和Alter Column字段;
同步模块1003,用于将表结构变更数据中的Add Column字段变更和Alter Column字段变更同步至数据仓库贴源层对应的Hive表上。
由于本发明的示例实施例的Hive表结构同步模块的各个功能模块与上述第三方面的数据同步方法的示例实施例的步骤对应,因此对于本发明装置实施例中未披露的细节,请参照本发明上述的第三方面的数据同步方法。
图11示意性示出了根据本发明的一个实施例的数据加载模块的框图。
参照图11所示,根据本发明的一个实施例的数据加载模块1100,包括:
接收模块1101,用于接收日志变更检测模块发送的向Hive表结构同步模块同步当日记录变更数据的控制信息;
同步模块1102,用于从HBase数据控制写入模块获取当日的HBase记录,并将HBase记录同步至数据仓库贴源层对应的Hive表上。
由于本发明的示例实施例的数据加载模块的各个功能模块与上述第四方面的数据同步方法的示例实施例的步骤对应,因此对于本发明装置实施例中未披露的细节,请参照本发明上述的第四方面的数据同步方法。
下面参考图12,其示出了适于用来实现本发明实施例的电子设备的计算机系统1200的结构示意图。图12示出的电子设备的计算机系统1200仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图12所示,计算机系统1200包括中央处理单元(CPU)1201,其可以根据存储在只读存储器(ROM)1202中的程序或者从存储部分1208加载到随机访问存储器(RAM)1203中的程序而执行各种适当的动作和处理。在RAM 1203中,还存储有系统操作所需的各种程序和数据。CPU 1201、ROM 1202以及RAM 1203通过总线1204彼此相连。输入/输出(I/O)接口1205也连接至总线1204。
以下部件连接至I/O接口1205:包括键盘、鼠标等的输入部分1206;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分1207;包括硬盘等的存储部分1208;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分1209。通信部分1209经由诸如因特网的网络执行通信处理。驱动器1210也根据需要连接至I/O接口1205。可拆卸介质1211,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1210上,以便于从其上读出的计算机程序根据需要被安装入存储部分1208。
特别地,根据本发明的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分1209从网络上被下载和安装,和/或从可拆卸介质1211被安装。在该计算机程序被中央处理单元(CPU)1201执行时,执行本申请的系统中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现,所描述的单元也可以设置在处理器中。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定。
作为另一方面,本申请还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该电子设备执行时,使得该电子设备实现如上述实施例中的数据同步方法。
例如,上述的电子设备可以实现如图1中所示的:步骤S110,对数据库中日志的记录和表结构进行变更检测,获取数据库日志的记录变更数据和表结构变更数据;步骤S120,将记录变更数据向HBase数据控制写入模块发送;步骤130,基将表结构变更数据向Hive表结构同步模块发送。
又如,上述的电子设备可以实现如图2所示的各个步骤。
又如,上述的电子设备可以实现如图3所示的各个步骤。
又如,上述的电子设备可以实现如图4所示的各个步骤。
又如,上述的电子设备可以实现如图5所示的各个步骤。
又如,上述的电子设备可以实现如图6所示的各个步骤。
又如,上述的电子设备可以实现如图7所示的各个步骤。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本发明实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、触控终端、或者网络设备等)执行根据本发明实施方式的方法。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。