本发明涉及it软件与开发领域领域,特别涉及一种基于tidb的单元化数据同步冲突检测和处理方法及系统。
背景技术:
1、任何一个互联网系统,发展到一定规模,不可避免地遇到单点问题,所谓单点在系统架构的演进过程中主要表现为单服务器、单应用、单数据库、单机房、单地部署等,单元化部署是解决这些问题的主要方案,单元化架构就是将单元作为部署的基本单位,在全站所有机房中部署多个单元,每个机房内单元数目不固定,任一单元均部署系统所需的全部应用,数据则是全量数据按照某种维度划分后的一部分,为了保证机房故障,其他机房可以提供全量的服务,数据单元之前要互相进行数据同步。
2、tidb是一款同时支持在线事务处理与在线分析处理的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用、实时htap、云原生的分布式数据库、兼容mysql 5.7协议和mysql生态等重要特性,所谓数据冲突指的是两个单元同时插入或者更新同一条数据,导致同步到对方单元冲突,单元化场景下不可避免会遇到数据同步冲突的问题。
3、目前tidb不同版本提供了两种数据同步工具,分别是tidb binlog和ticdc,其核心逻辑都是根据log生成sql,然后在目标库执行sql,但是常见的tidb数据库不具备冲突检测和处理机制,不便于对数据同步中产生的冲突进行检测和处理。
技术实现思路
1、本发明的目的在于提供一种基于tidb的单元化数据同步冲突检测和处理方法及系统,以解决上述背景技术中提出的问题。
2、为实现上述目的,本发明提供如下技术方案:一种基于tidb的单元化数据同步冲突检测和处理的系统,包括配置数据模块,所述数据配置模块包括sql生成模块、sql执行模块、冲突检测模块和冲突处理模块,所述sql生成模块、sql执行模块、冲突检测模块和冲突处理模块之间相连接,所述sql生成模块用于提供sql语句拼接冲突检测条件,所述sql执行模块用于对提供的sql语句进行执行并且传输至冲突检测模块,所述冲突检测模块用于根据sql执行结果判断,所述冲突处理模块用于对数据同步存在的冲突进行多种策略可选择的冲突处理方式。
3、优选的,所述数据配置模块是根据tidb binlog和ticdc技术为基础,所述数据配置模块的核心逻辑都是根据log生成sql并且在目标库执行sql。
4、优选的,所述sql执行模块用于对sql生成模块产生的冲突检测条件进行接受,所述冲突检测模块用于对sql执行模块的执行结果进行接收,所述冲突处理模块用于对冲突检测模块的判断结果进行接收。
5、优选的,所述sql生成模块的sql语句拼接冲突检测条件为:
6、and((版本<log_版本)or(版本=log_版本and区段=log_区段))。
7、优选的,所述冲突检测模块的执行结果判断:
8、插入类型操作,sql执行结果返回复制条目错误认为数据同步存在冲突;
9、更新类型操作,sql执行结果影响行数为0则认为数据同步存在冲突;
10、删除类型操作,不做冲突检测。
11、优选的,所述冲突处理模块的处理方式:
12、遇到插入冲突的时候,将sql语句改写成更新操作再执行一次;
13、遇到更新冲突的时候,将sql语句基于主键/唯一键的where条件改成全字段匹配的where条件的更新操作再执行一次;
14、如果仍然冲突,将冲突数据发送到消息队列,由业务方自行订阅处理。
15、一种基于tidb的单元化数据同步冲突检测和处理的方法,包括以下步骤:
16、步骤s1:通过sql生成模块产生sql语句拼接冲突检测条件,并且将其传输至sql执行模块;
17、步骤s2:通过sql执行模块对sql生成模块产生的sql语句传输至冲突检测模块;
18、步骤s3:通过冲突检测模块对sql执行结果进行判断,若是插入类型操作,将执行结果转入复制条目,认定数据同步不存在冲突,并且将执行结果改写成更新执行,再次对sql执行结果进行判断;
19、步骤s4:若是更新类型操作,执行结果影响行数为0,认定数据同步存在冲突,并且将执行结构改写成全字段匹配执行,再次对sql执行结果进行判断;
20、步骤s5:通过对步骤s3和步骤s4中执行结果再次进行判断,若执行结果影响行数为0,将冲突数据发送到消息队列,由业务方自行订阅处理,否则数据同步冲突处理结束;
21、步骤s6:若是删除类型操作,不做冲突检测,数据同步冲突处理结束。
22、优选的,所述步骤s3中若是插入类型操作,sql生成不需要改变,sql执行结果返回复制条目,认为数据同步不存在冲突。
23、优选的,所述步骤s4中若是更新类型数据操作,sql生成的时候,在where条件里面增加条件and((版本<log_版本)or(版本=log_版本and区段=log_区段)),sql执行结果影响行数为0,认为数据同步存在冲突。
24、优选的,所述步骤s4中更新类型数据操作中包括一个版本字段标识版本号,所述步骤s4中更新类型数据操作中包括一个区段字段标识单元信息。
25、本发明的技术效果和优点:
26、本发明通过基于版本+区段的冲突检测机制,可以方便地检测出更新类型sql语句的同步冲突问题,并且利用基于版本+全字段匹配组合的方式处理数据同步冲突问题,利用多种策略可选择的冲突处理方式,满足不同业务场景的需求,并用消息队列兜底,对数据同步产生的冲突问题进行快速处理,提高数据库的实用性。
1.一种基于tidb的单元化数据同步冲突检测和处理的系统,包括配置数据模块,其特征在于,所述数据配置模块包括sql生成模块、sql执行模块、冲突检测模块和冲突处理模块,所述sql生成模块、sql执行模块、冲突检测模块和冲突处理模块之间相连接,所述sql生成模块用于提供sql语句拼接冲突检测条件,所述sql执行模块用于对提供的sql语句进行执行并且传输至冲突检测模块,所述冲突检测模块用于根据sql执行结果判断,所述冲突处理模块用于对数据同步存在的冲突进行多种策略可选择的冲突处理方式。
2.根据权利要求1所述的一种基于tidb的单元化数据同步冲突检测和处理的系统,其特征在于,所述数据配置模块是根据tidb binlog和ticdc技术为基础,所述数据配置模块的核心逻辑都是根据log生成sql并且在目标库执行sql。
3.根据权利要求1所述的一种基于tidb的单元化数据同步冲突检测和处理的系统,其特征在于,所述sql执行模块用于对sql生成模块产生的冲突检测条件进行接受,所述冲突检测模块用于对sql执行模块的执行结果进行接收,所述冲突处理模块用于对冲突检测模块的判断结果进行接收。
4.根据权利要求2所述的一种基于tidb的单元化数据同步冲突检测和处理的系统,其特征在于,所述sql生成模块的sql语句拼接冲突检测条件为:
5.根据权利要求2所述的一种基于tidb的单元化数据同步冲突检测和处理的系统,其特征在于,所述冲突检测模块的执行结果判断:
6.根据权利要求2所述的一种基于tidb的单元化数据同步冲突检测和处理的系统,其特征在于,所述冲突处理模块的处理方式:
7.一种基于tidb的单元化数据同步冲突检测和处理的方法,其特征在于,包括以下步骤:
8.根据权利要求7所述的一种基于tidb的单元化数据同步冲突检测和处理的方法,其特征在于,所述步骤s3中若是插入类型操作,sql生成不需要改变,sql执行结果返回复制条目,认为数据同步不存在冲突。
9.根据权利要求7所述的一种基于tidb的单元化数据同步冲突检测和处理的方法,其特征在于,所述步骤s4中若是更新类型数据操作,sql生成的时候,在where条件里面增加条件and((版本<log_版本)or(版本=log_版本and区段=log_区段)),sql执行结果影响行数为0,认为数据同步存在冲突。
10.根据权利要求9所述的一种基于tidb的单元化数据同步冲突检测和处理的方法,其特征在于,所述步骤s4中更新类型数据操作中包括一个版本字段标识版本号,所述步骤s4中更新类型数据操作中包括一个区段字段标识单元信息。