一种基于mysql数据同步到异构数据源的系统及方法与流程

文档序号:28101630发布日期:2021-12-22 11:37阅读:134来源:国知局
1.本发明涉及数据同步
技术领域
:,具体为一种基于mysql数据同步到异构数据源的系统及方法。
背景技术
::2.mysql是目前应用比较广泛的关系型数据库管理系统,当mysql数据量较大的时候,查询性能会急剧下降,当前有很多其他的存储引擎可以解决大数据量的查询问题,但是没有完善的工具进行异构数据源的同步,因此目前急需解决异构数据源的同步问题。技术实现要素:3.本发明目的之一在于提供一种基于mysql数据同步到异构数据源的方法,以。4.一种基于mysql数据同步到异构数据源的方法,包括步骤如下:5.canal通过主从复制的协议从mysql节点上面拉取binlog数据;6.对binlog数据进行日志解析,形成解析数据;7.对解析数据进行合并处理,形成合并数据;8.对合并数据进行转换,转换成标准格式,报文最外层为tupe节点和schema节点;9.消费转换后的数据,对异构数据源进行相应的操作。10.采用本发明的技术方案:1、不侵入业务系统,通过对mysql的binlog处理不影响mysql的性能并且能进行实时同步;2、操作合并后批量执行能增强异构数据的同步性能;3、解决mysql海量数据查询性能问题,查询效率高。11.进一步,所述的tupe节点是一个数组结构,内部存储每条binlog数据的具体信息,tupe节点包括流水id、操作时间戳、操作符和操作的明细数据,流水id组成规则是通过binlog名字加偏移量。流水id,作用为防止重复操作,流水id组成规则是通过binlog名字加偏移量,能保证每个操作的id唯一且不重复,当消费端处理后会存储至redis,防止重复操作,也即通过redis解决数据重复性问题。12.进一步,schema节点内部包含了fields数组节点、tablename节点和namespace节点。tablename和namespace是异构数据源的表名以及命名空间标识。13.进一步,为了防止数据堆积,在消费转换的数据之前,还包括将转换后的数据发送至kafka中间件。14.进一步,还包括重写kafka的partition,对库名和表名进行hash分组。通过kafka自定义分区,能保证单表同步的顺序性,能进行自动容错。15.本发明的目的之二在于提供一种基于mysql数据同步到异构数据源的系统。16.一种基于mysql数据同步到异构数据源的系统,包括binlog数据拉取模块,采用canal通过主从复制的协议从mysql节点上面拉取binlog数据;17.日志解析模块,用于对binlog数据进行日志解析,形成解析数据;18.数据预处理模块,用于对解析数据进行合并处理,形成合并数据;19.数据转换模块,用于对合并数据进行转换,转换成标准格式,报文最外层为tupe节点和schema节点;20.数据消费模块,用于消费转换后的数据,对异构数据源进行相应的操作。21.进一步,为了防止数据堆积,还包括kafka中间件,用于接收转换后的数据后,通过kafka中间件对转换后的数据进行消费,同步到异构数据源。22.进一步,所述的tupe节点是一个数组结构,内部存储每条binlog数据的具体信息,tupe节点包括流水id、操作时间戳、操作符和操作的明细数据,流水id组成规则是通过binlog名字加偏移量,schema节点内部包含了fields数组节点、tablename节点和namespace节点。流水id,作用为防止重复操作,能保证每个操作的id唯一且不重复,当消费端处理后会存储至redis进行防止重复操作。附图说明23.图1为本发明一种基于mysql数据同步到异构数据源的方法实施例的流程图。具体实施方式24.下面通过具体实施方式进一步详细说明:25.如附图1所示,本实施例公开了一种基于mysql数据同步到异构数据源的方法,包括步骤如下:26.canal通过主从复制的协议从mysql节点上面拉取binlog数据,本实施例中canal模拟mysql的slave。canal理解为一个用来同步增量数据的一个工具,主要用途是基于mysql数据库增量日志解析,提供增量数据订阅和消费。binlog,即二进制文件,记录了mysql所有数据的变更,并以二进制的形式存储。canal和binlog均为现有技术。27.对binlog数据进行日志解析,形成解析数据。如对a表更新了10条数据,然后对b表删除了5条数据然后,又对a表新增了6条数据。数据如下:28.json1:{a表添加10条数据};29.json2:{b表修改5条数据};30.json3:{a表删除6条数据}。31.为了后续能减少对数据源的操作次数,对解析数据进行合并处理,形成合并数据。处理后如下:32.json1:{a表添加10条数据并且a表删除6条数据};33.json2:{b表修改5条数据}。34.对合并数据进行转换,转换成标准格式,报文最外层为tupe节点和schema节点。所述的tupe节点是一个数组结构,内部存储每条binlog数据的具体信息,比如:"tupe":[["mysql‑bin.00001000000000000000090222",1517194451453,"i","16","zhangsan"],["mysql‑bin.00001000000000000000090345",1517194455643,"u","15","lisi"]],其中第一列是流水id,作用为防止重复操作,组成规则是通过binlog名字加偏移量组成,比如示例中的第一条数据流水id组成为binlog名称mysql‑bin.000010后补20位0变为mysql‑bin.00001000000000000000000000,再加上唯一的偏移量90222变为mysql‑bin.00001000000000000000090222,这样能保证每个操作的id唯一且不重复,当消费端处理后会存储至redis进行防止重复操作;第二列则为操作时间戳;第三列为操作符,i表示插入,u表示更新,d表示删除;后面列则为操作的明细数据。[0035]schema节点内部包含了fields数组节点、tablename节点和namespace节点。例如:"schema":{"fields":[],"tablename":"testtable","namespace":"mysql.test"},其中tablename和namespace是异构数据源的表名以及命名空间标识,fields是操作数据的元数据信息,"fields":[{"ispk":false,"name":"id","type":"int(10)"},{"ispk":false,"name":"name","type":"varchar(20)"}],其中里面包含了两条数据的元数据,ispk标识该字段是否是mysql的主键,name表示该字段在mysql的字段名称,type表示该字段在mysql中的类型。[0036]本实施例中,在消费转换的数据之前,为了防止数据堆积,还包括将转换后的数据发送至kafka中间件。还包括重写kafka的partition,对库名和表名进行hash分组,以保证对于一个表的操作只能在一个partition里面并且是有序的。[0037]消费kafka中间件的数据,对异构数据源进行相应的操作。所述操作包括但不限于增删改。[0038]本实施例还公开一种基于mysql数据同步到异构数据源的系统,包括binlog数据拉取模块,采用canal通过主从复制的协议从mysql节点上面拉取binlog数据;[0039]日志解析模块,用于对binlog数据进行日志解析,形成解析数据;[0040]数据预处理模块,用于对解析数据进行合并处理,形成合并数据;[0041]数据转换模块,用于对合并数据进行转换,转换成标准格式,报文最外层为tupe节点和schema节点;所述的tupe节点是一个数组结构,内部存储每条binlog数据的具体信息,tupe节点包括流水id、操作时间戳、操作符和操作的明细数据,流水id组成规则是通过binlog名字加偏移量,schema节点内部包含了fields数组节点、tablename节点和namespace节点。关于tupe节点和schema节点的其他说明与方法中相同,在此不再赘述。[0042]还包括kafka中间件,用于接收转换后的数据后,通过kafka中间件对转换后的数据进行消费,同步到异构数据源;[0043]数据消费模块,用于消费转换后的数据,对异构数据源进行相应的操作。所述操作包括但不限于增删改。[0044]以上所述的仅是本发明的实施例,方案中公知的具体结构及特性等常识在此未作过多描述,所属领域普通技术人员知晓申请日或者优先权日之前发明所属
技术领域
:所有的普通技术知识,能够获知该领域中所有的现有技术,并且具有应用该日期之前常规实验手段的能力,所属领域普通技术人员可以在本技术给出的启示下,结合自身能力完善并实施本方案,一些典型的公知结构或者公知方法不应当成为所属领域普通技术人员实施本技术的障碍。应当指出,对于本领域的技术人员来说,在不脱离本发明结构的前提下,还可以作出若干变形和改进,这些也应该视为本发明的保护范围,这些都不会影响本发明实施的效果和专利的实用性。本技术要求的保护范围应当以其权利要求的内容为准,说明书中的具体实施方式等记载可以用于解释权利要求的内容。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1