数据同步方法、系统、存储器及数据同步设备与流程

文档序号:12887206阅读:256来源:国知局
本发明涉及互联网领域,特别是涉及互联网的数据库领域,具体为一种数据同步方法、系统、存储器及数据同步设备。版权申明本专利文件披露的内容包含受版权保护的材料。该版权为版权所有人所有。版权所有人不反对任何人复制专利与商标局的官方记录和档案中所存在的该专利文件或者该专利披露。
背景技术
::随着互联网的发展,现代社会已经进入信息社会,人与人之间在互联网上的交互越来越多,每家互联网公司的数据都出现了爆炸性的增长,而不管是过去、现在还是未来,数据的处理和统计分析都是一直存在的。企业的业务系统,为了能够承载这些数据,不可避免的采用了一定的策略,使得数据分布在不同的机器,不同的数据库和表中。在以一定周期对企业的数据进行分析时,传统的方案是用诸如sqoop、kettle等etl工具将关系型数据库中的数据加载到hadoop平台再进行分析,这些数据有增量加载的,也有全量加载的,其中全量加载的数据往往都是频繁发生更新的数据,为了加载这些数据,每天都需要花费大量的时间和资源来进行此项工作,而在加载这些数据的同时,数据依然在不断的发生变化,最终加载到hadoop的数据依然不确定是哪一个时刻的数据状态。技术实现要素:为了解决上述的以及其他潜在的技术问题,本发明的实施例提供了一种数据同步方法,所述数据同步方法包括:将源库中当前时刻的数据传输到目标库,所述目标库与所述源库异构;对所述源库的增量数据操作进行同步处理并在进行所述同步处理时检测所述增量数据操作的操作时刻;检测所述操作时刻是否为预设时刻;响应于检测到所述操作时刻为所述预设时刻,建立所述目标库中的目标表的快照。于本发明的一实施例中,所述对源库的增量数据操作进行同步处理包括:根据所述源库的日志的属性确定所述源库的增量数据操作类型;根据所述源库的增量数据操作类型将所述源库的增量数据操作转化为所述目标库中对应类型的同等操作;将所述同等操作在所述目标库中的所述目标表中执行。于本发明的一实施例中,所述数据同步方法还包括:建立与所述目标表的结构相同的第一数据处理表,所述第一数据处理表从用于记录所述目标表中预设时刻的每条记录的额外表中读取数据。于本发明的一实施例中,在依次对源库的增量数据操作进行同步处理之前,还包括:对所述源库的日志进行解析,以确定对所述源库的增量数据操作。于本发明的一实施例中,所述数据同步方法还包括:建立与所述源库中源表结构相同的第二数据处理表,所述第二数据处理表从所述目标库的目标表中读取数据。本发明的实施例提供了一种数据同步系统,所述数据同步系统包括:目标库初始化模块,用于将源库中当前时刻的数据传输到目标库,所述目标库与所述源库异构;同步模块,依次对源库的增量数据操作进行同步处理;检测模块,用于在所述同步模块进行同步处理时检测所述增量数据操作的操作时刻并检测所述操作时刻是否为预设时刻;快照模块,用于响应于检测到所述操作时刻为所述预设时刻,建立所述目标库中的目标表的快照。于本发明的一实施例中,所述同步模块包括:获取单元,用于根据所述源库的日志的属性确定所述源库的增量数据操作类型;转化单元,用于根据所述源库的增量数据操作类型将所述源库的增量数据操作转化为所述目标库中对应类型的同等操作;同步执行单元,用于将所述同等操作在所述目标库中的所述目标表中执行。于本发明的一实施例中,所述同步模块还包括:第一处理表单元,用于建立与所述目标表的结构相同的第一数据处理表,所述第一数据处理表从用于记录所述目标表中预设时刻的每条记录的额外表中读取数据。于本发明的一实施例中,所述数据同步系统还包括:增量获取模块,用于对所述源库的日志进行解析,以确定对所述源库的增量数据操作。于本发明的一实施例中,所述目标库初始化模块还包括第二处理表单元,用于建立与所述源库中源表结构相同的第二数据处理表,所述第二数据处理表从所述目标库的目标表中读取数据。本发明的实施例提供了一种数据同步设备,包括处理器和存储器,所述存储器存储有程序指令,所述处理器运行所述程序指令以实现如上所述方法中的步骤。本发明的实施例提供了一种存储器,其上存储有机器可读程序指令,该所述机器可读程序指令运行时执行如上所述的方法。如上所述,本发明的数据同步方法、系统、存储器及数据同步设备具有以下有益效果:本发明实施例可以实时或最大限度的保证目标库中目标表的数据与源库中源表的数据一致性,而且可以保存目标库中目标表每条记录在预设时刻的状态。附图说明为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1显示为本发明的数据同步方法的流程示意图。图2显示为本发明的数据同步方法的流程架构示意图。图3显示为本发明的数据同步方法中同步过程的流程示意图。图4显示为本发明的数据同步方法的流程实例示意图。图5显示为本发明的数据同步系统的原理框图。图6显示为本发明的数据同步系统中同步模块的原理框图。图7~图26显示为本发明的数据同步方法和系统的同步效果检测对比图。元件标号说明100数据同步系统110目标库初始化模块120同步模块121获取单元122转化单元123同步执行单元130检测模块140快照模块s110~s140步骤s121~s123步骤具体实施方式以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。请参阅图1至图26。须知,本说明书所附图式所绘示的结构、比例、大小等,均仅用以配合说明书所揭示的内容,以供熟悉此技术的人士了解与阅读,并非用以限定本发明可实施的限定条件,故不具技术上的实质意义,任何结构的修饰、比例关系的改变或大小的调整,在不影响本发明所能产生的功效及所能达成的目的下,均应仍落在本发明所揭示的技术内容得能涵盖的范围内。同时,本说明书中所引用的如“上”、“下”、“左”、“右”、“中间”及“一”等的用语,亦仅为便于叙述的明了,而非用以限定本发明可实施的范围,其相对关系的改变或调整,在无实质变更技术内容下,当亦视为本发明可实施的范畴。本实施例的目的在于提供一种数据同步方法、系统、存储器及数据同步设备,用于解决现有技术中在大数据领域做数据分析时,对频繁发生变动的数据进行全量抽取时的长耗时问题,以及数据状态无法精确到00:00:00的问题,或需要进行高频率短周期的报表输出无法实现的问题。以下将详细阐述本发明的数据同步方法、系统、存储器及数据同步设备的原理及实施方式,使本领域技术人员不需要创造性劳动即可理解本发明的数据同步方法、系统、存储器及数据同步设备。本实施例所提供的数据同步方法、系统、存储器及数据同步设备应用于异构数据的两个分布式数据库的数据从源库加载到目标库的传输过程中。本实施例中,所述源库为但不限于mysql数据库(database),其中所述源库可以为分布式的多个mysql数据库(database),所述目标库为但不限于hbase。于本实施例中,例如利用canal对源库(mysql数据库)的二进制日志(binlog)进行解析,利用himma将源库中当前时刻的数据传输到目标库并依次对源库的增量数据操作进行处理。canal可以布置于一个或多个分布式服务器(canal服务器)上,canal通过canalinstance(进程实例)对源库的日志进行解析,获取对源库的增量数据操作。其中,canal是mysql数据库binlog(二进制日志)的日志增量订阅和消费组件,canal基于数据库增量日志解析,提供增量数据订阅和消费。binlog(二进制日志)记录对数据发生或潜在发生更改的sql语句,并以二进制的形式保存在磁盘中。canal模拟mysql从机的交互协议,伪装自己为mysql从机,向mysql主机发送请求,mysql主机收到请求,开始推送binlog给从机(也就是canal),canal解析binlog,获取对源库的增量数据操作。具体地,如图1所示,本发明的实施例提供了一种数据同步方法,所述数据同步方法包括以下步骤:s110,将源库中当前时刻的数据传输到目标库,所述目标库与所述源库异构。s120,对所述源库的增量数据操作进行同步处理并在进行所述同步处理时检测所述增量数据操作的操作时刻。s130,检测所述操作时刻是否为预设时刻,若是则执行s140,响应于检测到所述操作时刻为所述预设时刻,建立所述目标库中的目标表的快照,若否,则返回继续执行s120。以下以源库为mysql,目标库为hbase为例对所述数据同步方法中的步骤s110至步骤s140进行详细说明。s110,如图2所示,将源库中当前时刻的数据传输到目标库,所述目标库与所述源库异构。其中,源库(mysql)中可以有分布式的多个数据库,himma通过为每一个源库的数据库建立进程,将源库中当前时刻的数据传输到目标库(hbase)中,完成目标库(hbase)的初始化。于本实施例中,如图2所示,在对源库的增量数据操作进行同步处理之前,还包括:对所述源库的日志进行解析,以确定对所述源库的增量数据操作。具体地,canal服务器通过多个canal实例(instance)对所述源库的日志进行解析,以确定对所述源库的增量数据操作。多个canal实例建立对mysql的日志订阅与消费。mysql的日志订阅与消费同步到目标库(hbase)中。其中,采用对源库的日志进行解析,获取对源库的增量数据操作之前,需要检查配置与环境是否合法,是否会因为某个条件的缺失导致程序崩溃或无法正常行使功能。于本实施例中,具体地,所述将源库中当前时刻的数据传输到目标库是将源库(mysql数据库)中当前时刻的数据通过sparksql的方式进行读取并初始化到目标库(hbase)中,使用sparksql的并行读取功能进行源库中源表的源数据到目标表的初始化。其中,sparksql是spark(基于内存的迭代计算框架)的一个组件,用于结构化数据的计算。sparksql提供了一个称为dataframes的编程抽象,dataframes可以充当分布式sql查询引擎。使用spark的分布式计算,随机决定实施同步过程的数据同步设备。于本实施例中,在将源库中当前时刻的数据传输到目标库时或之后,所述数据同步方法还包括:建立与所述源库中源表结构相同的第二数据处理表,所述第二数据处理表从所述目标库的目标表中读取数据,进行预设处理和输出。例如:为hbase建立与mysql数据库中源表的schema相同的hive表,所述hive表从hbase的hbase表中读取数据,进行预设处理和输出。schema为数据库对象的集合,一个用户一般对应一个schema。对于新建的一张表,通过刷新映射关系的方式来获得新建的表与目标表的映射关系。s120,对所述源库的增量数据操作进行同步处理并在进行所述同步处理时检测所述增量数据操作的操作时刻。所述步骤s120是通过设定的筛选器对canal解析到的日志进行订阅和消费,对mysql数据库表或表中的记录进行的操作同步到hbase的过程。于本实施例中,如图3所示,具体地,所述对源库的增量数据操作进行同步处理包括以下步骤:s121,根据所述源库的日志的属性确定所述源库的增量数据操作类型。s122,根据所述源库的增量数据操作类型将所述源库的增量数据操作转化为所述目标库中对应类型的同等操作。s123,将所述同等操作在所述目标库中的所述目标表中执行,以实现增量数据同步。于本实施例中,将所述同等操作在所述目标库中的所述目标表中执行具体包括:重命名表名操作处理、重命名字段操作处理、删除字段操作处理、添加字段操作处理、删除主键处理、添加主键处理以及修改字段属性操作处理。其中,所述重命名表名操作处理时,将所述目标表中来自源库中源表的所有数据缓存在内存中,删除目标库中的目标表中来自源库中源表的所有数据,重命名内存中缓存的数据的主键并将内存中缓存的所述目标表的所有数据写入所述目标库中的目标表。具体地,例如使用表达式altertable(?<before>.+?)rename(?<after>.+)可以匹配出一个alter事件的ddl是否是重命名表名操作,对于该事件的同步,是读出目标表中来自源表的所有数据,缓存在内存中,然后删除目标表中的数据,最后将内存中的数据修改rowkey(主键)后写回目标表。其中,删除主键必须与添加主键成对出现,可视为修改主键,仅删除主键的情况下,将停止对操作表进行同步。例如,使用正则表达式dropprimarykey匹配出是否与删除主键的操作成对出现,若是,则使用正则表达式add(?<irrelevant>.+?)primarykey((?<key>.+?))匹配出添加主键的操作。于本实施例中,所述数据同步方法还包括:建立与所述目标表的结构相同的第一数据处理表,所述第一数据处理表从用于记录所述目标表中预设时刻的每条记录的额外表中读取数据。具体地,例如:建立用于记录目标表中每天最后一秒状态的每条记录的额外表,建立与所述目标表的schema相同的hive表,所述hive表从用于记录所述目标表中预设时刻的每条记录的额外表中读取数据,进行预设处理和输出。其中,对于新建的一张表,通过刷新映射关系的方式来获得新建的表与目标表的映射关系。s130,检测所述操作时刻是否为预设时刻,若是则执行s140,响应于检测到所述操作时刻为所述预设时刻,建立所述目标库中的目标表的快照,若否,则返回继续执行s120。其中,所述预设时刻为以天、星期、月或年为周期的预设时刻。例如,检测所述操作时刻是否为每天的零点时刻(00:00:00),并在检测到所述操作时刻为零点时刻时建立所述目标库中的目标表的快照。所述步骤s140中,响应于检测到所述操作时刻为所述预设时刻,建立所述目标库中的目标表的快照例如为:在消费每一条日志时,例如在00:00:00后第一时间建立hbase主表的快照,精确的保存每一个hbase主表新一天尚未发生任何变更时的状态(在00:00:00时暂停同步的步骤,先快照,所以可以精确到具体的时刻)。所以本实施例的数据同步方法可以实时或最大限度的保证目标表的数据与源表的数据一致性,而且可以保存目标表每条记录在每天最后时刻的状态。如图4所示,举例说明所述数据同步方法的具体执行过程如下:首先进行配置检查,读取canal实例(instance)配置,检查配置与环境是否合法,是否完善,是否会因为某个条件的缺失导致程序崩溃或无法正常行使功能,若配置有问题,则打印缺失配置后退出当前操作。然后进行初始化,以一个mysql服务器为单位进行初始化,可以同时并行执行多个初始化进程,图中executor...表示省略的并行进行的初始化进程,仅以一个初始化进程为例进行说明。读取mysql实例配置,以数据库为单位并行初始化,读取mysql数据库配置,以目标表为单位进行初始化。检查目标表是否存在,不存在即创建hbase表,读取数据写入hbase表,保存映射关系。若目标表存在,则检查映射关系是否存在,若存在,判断重新初始化映射关系是否存在,若是,则删除已有数据,读取数据写入hbase表,保存映射关系,若否,则返回创建hbase表的步骤。在读取数据写入hbase表,保存映射关系之后,创建快照,创建增量表。完成数据的初始化。最后进行数据同步的过程:himma连接canal,读取日志,然后根据日志的增量操作类型同步目标库的目标表。然后跨天判断,即检测操作时刻为零点时刻的源库的增量数据操作时,下一刻即为下一天,此时,即创建快照,创建增量表。为实现上述数据同步方法,本实施例还对应提供了一种数据同步系统100,如图5所示,所述数据同步系统100包括:目标库初始化模块110,同步模块120,检测模块130以及快照模块140。以下以源库为mysql,目标库为hbase为例对所述数据同步系统100进行详细说明。如图2所示,所述目标库初始化模块110用于将源库中当前时刻的数据传输到目标库,所述目标库与所述源库异构。其中,源库(mysql)中可以有分布式的多个数据库,himma通过为每一个源库的数据库建立进程,将源库中当前时刻的数据传输到目标库(hbase)中,完成目标库(hbase)的初始化。于本实施例中,所述数据同步系统还包括:增量获取模块,用于在对源库的增量数据操作进行同步处理之前,对所述源库的日志进行解析,以确定对所述源库的增量数据操作。于本实施例中,还可以包括配置检查模块,在对源库的日志进行解析,获取对源库的增量数据操作之前,需要检查配置与环境是否合法,是否会因为某个条件的缺失导致程序崩溃或无法正常行使功能。于本实施例中,具体地,所述目标库初始化模块110将源库中当前时刻的数据传输到目标库是将源库(mysql数据库)中当前时刻的数据通过sparksql的方式进行读取并初始化到目标库(hbase)中,使用sparksql的并行读取功能进行源数据到目标表的初始化。使用spark的分布式计算,随机决定实施同步过程的数据同步设备。于本实施例中,所述目标库初始化模块110还包括第二处理表单元,建立与所述源库中源表结构相同的第二数据处理表,所述第二数据处理表从所述目标库的目标表中读取数据,进行预设处理和输出。其中,所述第二处理表单元可以在将所述源库中当前时刻的数据传输到所述目标库时或之后,建立第二数据处理表。例如:在将源库中当前时刻的数据传输到目标库时,所述第二处理表单元为hbase建立与mysql数据库中源表的schema相同的hive表,所述hive表从hbase的hbase表中读取数据,进行预设处理和输出。schema为数据库对象的集合,一个用户一般对应一个schema。对于新建的一张表,通过刷新映射关系的方式来获得新建的表与目标表的映射关系。于本实施例中,所述同步模块120依次对源库的增量数据操作进行处理,具体地,如图6所示,所述同步模块120包括:获取单元121,转化单元122以及同步执行单元123。所述同步模块120是通过设定的筛选器对canal解析到的日志进行订阅和消费,对mysql数据库表或表中的记录进行的操作同步到hbase的过程。具体地,所述获取单元121用于根据所述源库的日志的属性确定所述源库的增量数据操作类型。所述转化单元122用于根据所述源库的增量数据操作类型将所述源库的增量数据操作转化为所述目标库中对应类型的同等操作。所述同步执行单元123用于将所述同等操作在所述目标库中的所述目标表中执行,以实现增量数据同步。于本实施例中,所述同步执行单元123将所述同等操作在所述目标库中的所述目标表中执行具体包括:重命名表名操作处理、重命名字段操作处理、删除字段操作处理、添加字段操作处理、删除主键处理、添加主键处理以及修改字段属性操作处理。其中,所述重命名表名操作处理时,将所述目标表中来自源库中源表的所有数据缓存在内存中,删除目标库中的目标表中来自源库中源表的所有数据,重命名内存中缓存的数据的主键并将内存中缓存的所述目标表的所有数据写入所述目标库中的目标表。具体地,例如使用表达式altertable(?<before>.+?)rename(?<after>.+)可以匹配出一个alter事件的ddl是否是重命名表名操作,对于该事件的同步,是读出目标表中来自源表的所有数据,缓存在内存中,然后删除目标表中的数据,最后将内存中的数据修改rowkey(主键)后写回目标表。其中,删除主键必须与添加主键成对出现,可视为修改主键,仅删除主键的情况下,将停止对操作表进行同步。例如,使用正则表达式dropprimarykey匹配出是否与删除主键的操作成对出现,若是,则使用正则表达式add(?<irrelevant>.+?)primarykey((?<key>.+?))匹配出添加主键的操作。于本实施例中,所述同步模块120还可以包括:第一处理表单元,用于建立与所述目标表的结构相同的第一数据处理表,所述第一数据处理表从用于记录所述目标表中预设时刻的每条记录的额外表中读取数据。具体地,例如:所述第一处理表单元建立用于记录目标表中每天最后一秒状态的每条记录的额外表,并建立与所述目标表的schema相同的hive表,所述hive表从用于记录所述目标表中预设时刻的每条记录的额外表中读取数据。对于新建的一张表,通过刷新映射关系的方式来获得新建的表与目标表的映射关系。于本实施例中,所述检测模块130用于在所述同步模块120进行同步处理时检测所述增量数据操作的操作时刻并检测所述操作时刻是否为预设时刻。所述快照模块140用于响应于检测到所述操作时刻为所述预设时刻,建立所述目标库中的目标表的快照。例如,所述快照单元122在消费每一条日志时,在00:00:00后第一时间建立hbase主表的快照,精确的保存每一个hbase主表新一天尚未发生任何变更时的状态(在00:00:00时暂停同步的步骤,先快照,所以可以精确到具体的时刻)。所以本实施例的数据同步系统100可以实时或最大限度的保证目标表的数据与源表的数据一致性,而且可以保存目标表每条记录在每天最后时刻的状态。本发明的实施例还提供了一种数据同步设备,包括处理器和存储器,所述处理器为包括中央处理器、微处理器、数字信号处理器以及其他处理芯片的任一一种或几种;所述存储器可包括高速随机存取存储器,并且还可包括非易失性存储器,例如一个或多个磁盘存储设备、闪存设备或其他非易失性固态存储设备。所述存储器存储有程序指令,所述处理器运行各种存储在存储器中的软件程序和/或指令集,所述处理器运行程序指令,执行:将源库中当前时刻的数据传输到目标库,所述目标库与所述源库异构。对所述源库的增量数据操作进行同步处理并在进行所述同步处理时检测所述增量数据操作的操作时刻。检测所述操作时刻是否为预设时刻,若是则响应于检测到所述操作时刻为所述预设时刻,建立所述目标库中的目标表的快照,若否,则返回继续执行:对所述源库的增量数据操作进行同步处理并在进行所述同步处理时检测所述增量数据操作的操作时刻。本发明的实施例提供了一种存储器,其上存储有机器可读程序指令,该所述机器可读程序指令运行时执行:将源库中当前时刻的数据传输到目标库,所述目标库与所述源库异构。对所述源库的增量数据操作进行同步处理并在进行所述同步处理时检测所述增量数据操作的操作时刻。检测所述操作时刻是否为预设时刻,若是则响应于检测到所述操作时刻为所述预设时刻,建立所述目标库中的目标表的快照,若否,则返回继续执行:对所述源库的增量数据操作进行同步处理并在进行所述同步处理时检测所述增量数据操作的操作时刻。以下以图例说明本实施例的同步效果。如图7至图8所示,图7显示为初始化时mysql数据的状态示意图,图8显示为初始化时hbase数据对应的状态示意图。如图9和图10所示,图9显示为插入两条数据时mysql数据的状态示意图,图10显示为插入两条数据时hbase数据对应的状态示意图。如图11和图12所示,图11显示为更新第5条记录的name和gender字段时mysql数据的状态示意图,图12显示为更新第5条记录的name和gender字段时hbase数据对应的状态示意图。如图13和图14所示,图13显示为删除id为4的数据时mysql数据的状态示意图,图14显示为删除id为4的数据时hbase数据对应的状态示意图。如图15和图16所示,图15显示为将update_time字段重命名为modify_time时mysql数据的状态示意图,图16显示为将update_time字段重命名为modify_time时hbase数据对应的状态示意图。如图17和图18所示,图17显示为删除字段modify_time时mysql数据的状态示意图,图18显示为删除字段modify_time时hbase数据对应的状态示意图。如图19和图20所示,图19显示为添加字段p_id时mysql数据的状态示意图,图20显示为添加字段p_id时hbase数据对应的状态示意图。如图21和图22所示,图21显示为修改字段主键id为多字段主键id和p_id时mysql数据的状态示意图,图22显示为修改字段主键id为多字段主键id和p_id时hbase数据对应的状态示意图。如图23和图24所示,图23显示为修改多字段主键为单字段主键时mysql数据的状态示意图,图24显示为修改多字段主键为单字段主键时hbase数据对应的状态示意图。如图25和图26所示,图25显示为将student表重名为stu时mysql数据的状态示意图,图26显示为将student表重名为stu时hbase数据对应的状态示意图。综上所述,本发明实施例可以实时或最大限度的保证目标库中目标表的数据与源库中源表的数据一致性,而且可以保存目标库中目标表每条记录在预设时刻的状态。所以,本发明有效克服了现有技术中的种种缺点而具高度产业利用价值。上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属
技术领域
:中包括通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1