数据库到数据仓库的离线增量同步方法及系统与流程

文档序号:14256617阅读:1400来源:国知局

本发明涉及数据同步技术领域,特别涉及一种数据库到数据仓库的离线增量同步方法系统。



背景技术:

当我们需要对oltp数据库的某张业务大表进行统计报表分析,以提供一些所需的用于业务决策的数据依据,往往都是用etl导入工具把数据库表全量导入数据仓库的hive表,然后利用大数据的集群资源能力快速地对表加工得出我们需要的统计报表。每天数据库表都有更新(新增、更新或者删除),如果每天都需要看这样的报表的话,就需要每天调度导一次新的hive表覆盖之前的,然后在产出新的报表。

上述的做法存在以下缺陷:一方面,oltp数据库是比较宝贵的资源,导入工具在导的过程势必需要限制速率,防止速率太快对造成资源压力,从而导致使用该数据库的上层核心业务应用受到影响,造成用户的不好体验。但是如果数据库表很大,而限速就会导致导入过程变的很长,最终报表产出就会很延迟,这份迟到的数据依据可能就变的毫无意义;另一方面,大部分业务表每天更新数据相对于全表是很少的,可能只占了1%,如果将数据库表全量导入数据仓库表中时,就需要每天把99%重复数据从一个地方搬到另一个地方,本身就白白浪费了很多资源。



技术实现要素:

本发明的目的是提供一种数据库到数据仓库的离线增量同步方法和系统,解决现有上述的问题。

为解决上述问题,本发明实施例提供一种数据库到数据仓库的离线增量同步方法,包括以下步骤:

监听数据库表的变更事件;

将变更事件回流到分布式文件系统的目录中,同时将变更事件的增量数据按预设时间周期进行归档;

将数据库表全量导入数据仓库表中;

响应调度指令后,将时间周期内累加的增量数据与数据仓库表数据合成新的全量表,并用新的全量表覆盖之前表数据。

作为一种实施方式,所述将变更事件回流到分布式文件系统的目录中,包括以下步骤:

对数据库表订阅数据变更事件,实时写入消息队列;

实时地消费变更事件,并批量写入分布式文件系统的目录中。

作为一种实施方式,所述订阅数据变更事件消息体内容包括:记录的事件类型、记录所有字段名和对应的值、以及能用于识别单个记录事件时序的字段名和值。

作为一种实施方式,所述监听数据库表的变更事件,包括以下步骤:

通过事件时序标记数据库表每个记录的多个变更事件。

作为一种实施方式,所述将增量数据与数据仓库表数据合成新的全量表,包括以下步骤:

筛选每个记录中最新的变更事件作为增量数据;

通过全局唯一键来关联增量数据与数据仓库表的相同记录;

将增量数据与数据仓库表数据进行合并。

作为一种实施方式,若表为物理单表,则通过表的自增主键id来作为表唯一键;

若表为多个物理库表,则通过表的自增主键id+分库字段来作为全局唯一键。

本发明还提供一种数据库到数据仓库的离线增量同步系统,包括:

监听单元,监听数据库表的变更事件;

回流单元,将变更事件回流到分布式文件系统的目录中,同时将变更事件的增量数据按预设时间周期进行归档;

导入单元,将数据库表全量导入数据仓库表中;

合并单元,响应调度指令后,将时间周期内累加的增量数据与数据仓库表数据合成新的全量表,并用新的全量表覆盖之前表数据。

作为一种实施方式,所述回流单元包括:

订阅模块,对数据库表订阅数据变更事件,实时写入消息队列;

消费模块,实时地消费变更事件,并批量写入分布式文件系统的目录中。

作为一种实施方式,所述监听单元包括:

标记模块,通过事件时序标记数据库表每个记录的多个变更事件。

作为一种实施方式,所述合并单元包括:

筛选模块,筛选每个记录中最新的变更事件作为增量数据;

关联模块,通过全局唯一键来关联增量数据与数据仓库表的相同记录。

本发明相比于现有技术的有益效果在于:表数据全量只同步一次,第二次将表更新的数据和上一次的全量数据进行合并,合并出新的全量表。后续就一直使用增量合并的方式,因此,从数据库表同步变更的增量数据比同步全量表成本就变的很低了,在数据库资源受限的情况下,能完成数据库表到数据仓库的快速同步。

附图说明

图1为本发明的数据库到数据仓库的离线增量同步方法的流程图;

图2为本发明的数据库到数据仓库的离线增量同步系统的模块连接图。

附图标注:1、监听单元;11、标记模块;2、回流单元;21、订阅模块;22、消费模块;3、导入单元;4、合并单元;41、筛选模块;42、关联模块。

具体实施方式

以下结合附图,对本发明上述的和另外的技术特征和优点进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明的部分实施例,而不是全部实施例。

如图1所示,一种数据库到数据仓库的离线增量同步方法,包括以下步骤:

s100:监听数据库表的变更事件;

s200:将变更事件回流到分布式文件系统的目录中,同时将变更事件的增量数据按预设时间周期进行归档;

s300:将数据库表全量导入数据仓库表中;

s400:响应调度指令后,将时间周期内累加的增量数据与数据仓库表数据合成新的全量表,并用新的全量表覆盖之前表数据。

步骤s200具体包括以下内容:

对数据库表订阅数据变更事件,实时写入消息队列,在本实施例中,消息队列可以采用比如nsq、kafka等开源产品,订阅数据变更事件消息体内容包括:记录的事件类型、记录所有字段名和对应的值、以及能用于识别单个记录事件时序的字段名和值;实时地消费变更事件,并批量写入分布式文件系统的目录中,在本实施例中,通过部署flumeagent作为数据搬运工来消费变更事件。

其中,步骤s100还包括通过事件时序标记数据库表每个记录的多个变更事件。

步骤s500具体包括以下内容:

筛选每个记录中最新的变更事件作为增量数据;

通过全局唯一键来关联增量数据与数据仓库表的相同记录,若表为物理单表,则通过表的自增主键id来作为表唯一键,若表为多个物理库表,则通过表的自增主键id+分库字段来作为全局唯一键;

将增量数据与数据仓库表数据进行合并。

如图2所示,一种数据库到数据仓库的离线增量同步系统,包括监听单元1,监听数据库表的变更事件;回流单元2,将变更事件回流到分布式文件系统的目录中,同时将变更事件的增量数据按预设时间周期进行归档;导入单元3,将数据库表全量导入数据仓库表中;合并单元4,响应调度指令后,将时间周期内累加的增量数据与数据仓库表数据合成新的全量表,并用新的全量表覆盖之前表数据。

其中,回流单元2包括订阅模块21,对数据库表订阅数据变更事件,实时写入消息队列;消费模块22,实时地消费变更事件,并批量写入分布式文件系统的目录中。监听单元1包括标记模块11,通过事件时序标记数据库表每个记录的多个变更事件。合并单元4包括筛选模块41,筛选每个记录中最新的变更事件作为增量数据;关联模块42,通过全局唯一键来关联增量数据与数据仓库表的相同记录。

在本实施例中,数据库为mysql,数据仓库为hive,分布式文件系统为hdfs,其变更事件为binlog数据,订阅数据变更事件采用cannal组件(阿里巴巴开源项目,基于mysql数据库binlog的增量订阅&消费),数据库表导入数据仓库表采用datax组件(阿里巴巴开源项目,离线数据同步工具),增量合并采用mapreduc来实现。

本发明通过表数据全量只同步一次,第二次将表更新的数据和上一次的全量数据进行合并,合并出新的全量表。后续就一直使用增量合并的方式,因此,从数据库表同步变更的增量数据比同步全量表成本就变的很低了,在数据库资源受限的情况下,能完成数据库表到数据仓库的快速同步。

以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步的详细说明,应当理解,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围。特别指出,对于本领域技术人员来说,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1