一种保证数据一致性的方法和系统与流程
未命名
09-17
阅读:102
评论:0
1.本发明属于数据处理技术领域,具体涉及一种保证数据一致性的方法和系统。
背景技术:
2.分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据。一个分布式系统最多只能同时满足一致性(consistency)、可用性(availability)和分区容忍性(partition tolerance)这三项中的两项。对于分布式系统中的数据(包含历史数据)一致性问题,尤其是数据冗余下的数据一致性问题,现有技术中已有两阶段提交(2pc)、补偿事务(tcc)、本地消息表,以及mq事务消息等手段来保证数据的最终一致性。但两阶段提交(2pc)存在同步阻塞的问题,而且任意一个节点失败就会导致整个事务失败,没有完善的容错机制;补偿事务(tcc)在实现的时候往往需要多写很多补偿的代码。本地消息表与mq事务消息也分别存在操作繁琐与实现难度大,主流mq不支持的问题。
技术实现要素:
3.本发明的目的在于克服现有技术的不足,提出了一种操作简单且能够不依赖于任何第三方组件的保证数据一致性的方法及系统。
4.本发明的一种保证数据一致性的方法,所述方法首先以源数据master为基准数据,通过saas系统中的数据管理模块进行全量扫描和/或逻辑块扫描和/或增量扫描的方式,对目标数据slave进行修复矫正,从而保证分布式系统中的数据的最终一致性;所述源数据master包括企业微信中涉及教育的基础数据,包括学校、校区、学段、年级、班级、学生数据等;所述目标数据slave为saas系统中对应的数据模型中的数据,所述数据模型为基于所述源数据master的通用可组合模型(uc模型),包括学校-学区关系数据模型、学校-校区-学段关系数据模型、班级-年级-学校关系数据模型。
5.进一步,本技术所述保证数据一致性的方法具体包括如下步骤:1)判定源数据master的数据量;2)当所述源数据master上主表行记录小于50万条时,采用全量扫描的方式对目标数据slave进行修复矫正。
6.进一步,本技术所述保证数据一致性的方法,具体包括如下步骤:1)判定源数据master的数据量;2)当所述源数据master上主表行记录大于50且小于500万条时,采用逻辑块扫描的方式对目标数据slave进行修复矫正;所述逻辑块扫描的具体过程为对一个业务块的数据进行全量扫描。
7.进一步,本技术所述方法中的全量扫描的具体过程为:首先设置定时任务,进行扫描源数据master上的每一条记录,然后根据源数据master上的记录值去目标数据slave上
查询;在所述目标数据slave上查询到源数据master上的记录值则继续查询,在所述目标数据slave上查询不到源数据master上的记录值则进行修复矫正;所述定时任务的执行频率为5分钟至30分钟一次;所述查询为rpc调用或本地调用,所述修复矫正具体包括增加、覆盖或删除。
8.进一步,本技术所述保证数据一致性的方法,具体包括如下步骤:1)判定源数据master的数据量;2)当所述源数据master上主表行记录大于500万条时,采用增量扫描的方式对目标数据slave进行修复矫正。
9.进一步,本技术所述方法中的增量扫描的具体过程为:首先设置第一定时任务,然后执行第一定时任务;再设置第二定时任务并执行第二定时任务,最后设置第三定时任务并执行第三定时任务;所述第一定时任务的执行频率为7天至30天一次;执行第一定时任务的具体过程为逐行从目标数据slave上取出每一条数据,取出100-2000条数据后将取出的数据放入一个集合中,然后对所述集合中的数据进行校验,得到与所述源数据master不一致的脏数据,并将所述脏数据放入另外一个待处理集合中,最后对所述待处理集合中的脏数据批量操作,放入一个事务中进行一次提交;所述第二定时任务的执行频率为每3天至7天一次;执行第二定时任务的具体过程为通过业务标识从系统中获取对应业务标识在目标数据slave上的所有数据,并放入到另一个集合中,所述集合中的数据的后续处理步骤与执行第一定时任务过程中的处理步骤相同;所述第三定时任务的执行频率为1-2小时一次;执行第三定时任务的具体过程为系统将源数据master上发生变化的数据记录并放入到内存数据库库中,用内存数据库中的数据对比目标数据slave,数据不一致则直接进行修正矫正。
10.进一步,本技术所述保证数据一致性的方法,所述分布式系统中的数据包含历史数据。
11.进一步,本技术所述保证数据一致性的方法,所述分布式系统中的数据为涉及数据冗余的数据。
12.进一步,本技术所述保证数据一致性的方法,所述分布式系统中的数据为教务管理系统中的数据。
13.进一步,本技术所述保证数据一致性的方法,所述源数据master和目标数据slave为包含学生信息和/或家长信息的数据表;所述一个业务块为一个学校或一个年级或一个班级;所述业务标识为学校id。
14.一种保证数据一致性的系统,包括数据库和数据处理器,所述数据处理器通过上述保证数据一致性的方法来保证数据的一致性。
15.与现有技术相比,本发明具有以下有益的技术效果:本发明所述的一种保证数据一致性的方法和系统,其中所述方法通过以源数据master上的数据为基准,来对目标数据slave上的数据进行一致性修复矫正,进而保证数据的最终一致性,修复和矫正的方式可以为全量扫描或逻辑块扫描或增量扫描三种方式中的一种方式或多种的组合,规则组合灵活。且执行定时任务的频率可以根据业务的容忍度进
行灵活调整,非常适用于解决分布式系统中的数据(包含历史数据)一致性问题,尤其是数据冗余下的数据一致性问题。本发明所述方法更能够在不用引入或者依赖第三方组件的情况下对历史脏数据进行处理且保证数据的一致性,同时,本技术所述方法对代码的改动量极少,只需要对各种情况进行组合和配置,投入产出比高。
附图说明
16.图1是本发明实施例1中所述方法的示意图;图2是本发明实施例2中所述方法的示意图;图3是本发明实施例3中所述方法的示意图。
实施方式
17.下面结合具体的实施例对本发明做进一步的详细说明。
具体实施方式一
18.本发明所述的一种保证数据一致性的方法,所述方法首先以源数据master为基准数据,通过saas系统中的数据管理模块进行全量扫描和/或逻辑块扫描和/或增量扫描的方式,对目标数据slave进行修复矫正,从而保证分布式系统中的数据的最终一致性;所述源数据master包括企业微信中涉及教育的基础数据,包括学校、校区、学段、年级、班级、学生数据等;所述目标数据slave为saas系统中对应的数据模型中的数据,所述数据模型为基于所述源数据master的通用可组合模型(uc模型),包括学校-学区关系数据模型、学校-校区-学段关系数据模型、班级-年级-学校关系数据模型。
19.所述分布式系统中的数据包含历史数据。
具体实施方式二
20.本发明所述的一种保证数据一致性的系统,包括数据库和数据处理器,所述处理器通过上述保证数据一致性的方法来保证数据的一致性。
21.在所述系统的一种具体应用中,所述数据库包括源数据master和目标数据slave;所述源数据master为某学校的基础数据,包括校区、学段、班级、年级、学生等;所述目标数据slave为saas系统中对应数据。在本实施方式二中,saas系统为蝉鸣科技的saas系统,使用本发明所述的系统,作为源数据master的某学校不用再维护两份数据,只需要在企微平台中维护数据。当学校在企微平台中完成数据维护后,数据处理器便会从企微平台将数据同步至saas系统中。
实施例1
22.一种保证数据一致性的方法,具体包括如下步骤:1)判定源数据master的数据量;2)当所述源数据master上主表行记录小于50万条时,采用全量扫描的方式对目标数据slave进行修复矫正。
23.在本实施例1中,所述全量扫描的具体过程为:首先设置定时任务,进行扫描源数
据master上的每一条记录,然后根据源数据master上的记录值去目标数据slave上查询;在所述目标数据slave上查询到源数据master上的记录值则继续查询,在所述目标数据slave上查询不到源数据master上的记录值则进行修复矫正;本实施例1中所述的定时任务的执行频率为5分钟一次;具体采用一次性全部加载的方式进行全量扫描;所述查询为rpc调用或本地调用,所述修复矫正具体包括增加、覆盖、删除。
实施例2
24.一种保证数据一致性的方法,具体包括如下步骤:1)判定源数据master的数据量;2)当所述源数据master上主表行记录大于50且小于500万条时,采用逻辑块扫描的方式对目标数据slave进行修复矫正;所述逻辑块扫描的具体过程为对一个业务块的数据进行全量扫描。
25.在本实施例2中,所述源数据master和目标数据slave为包含学生信息和/或家长信息的数据表;所述一个业务块为一个学校或一个年级或一个班级。所述全量扫描的具体过程如实施例1中所述。
实施例3
26.1)判定源数据master的数据量;2)当所述源数据master上主表行记录大于500万条时,采用增量扫描的方式对目标数据slave进行修复矫正。
27.所述源数据master和目标数据slave为包含学生信息和/或家长信息的数据表;所述增量扫描的具体过程为:首先设置第一定时任务,然后执行第一定时任务;再设置第二定时任务并执行第二定时任务,最后设置第三定时任务并执行第三定时任务;在本实施例3中,所述第一定时任务的执行频率为30天一次;执行第一定时任务的具体过程为逐行从目标数据slave上取出每一条数据,取出1000条数据后将取出的数据放入一个集合reader中,然后对所述reader中的数据进行校验,得到与所述源数据master不一致的脏数据,并将所述脏数据放入另外一个待处理集合中,最后对所述待处理集合中的脏数据批量操作,放入一个事务中进行一次提交;在本实施例3中,所述校验过程即就是数据比对,批量操作指的是数据库一次性批量处理数据,要么都成功,要么都失败。
28.所述第二定时任务的执行频率为每7天一次,在本实施例3中,配置成每天的凌晨执行一次;执行第二定时任务的具体过程为通过业务标识从系统中获取对应业务标识在目标数据slave上的所有数据,并放入到另一个集合中,所述集合中的数据的后续处理步骤与执行第一定时任务过程中的处理步骤相同;在本实施例3中,所述业务标识为学校id;所述第三定时任务的执行频率为每小时一次;执行第三定时任务的具体过程为系统将源数据master上发生变化的数据记录并放入到内存数据库中,用内存数据库中的数据对比目标数据slave,数据不一致则直接进行修正矫正,具体修正矫正的过程为:增加、覆盖或删除。
实施例4
29.一种保证数据一致性的方法,本实施例4中所述的保证数据一致性的方法为保证家校通讯录数据一致性的方法。所述方法包括实施例3中所述方法的具体步骤;且所述源数据master包括企业微信中涉及教育的基础数据,包括学校、校区、学段、年级、班级、学生数据等;所述学生数据还包括学生姓名、学号、性别、家长联系方式;所述目标数据slave为saas系统中对应的数据模型中的数据,所述数据模型为基于所述源数据master的通用可组合模型(uc模型),包括学校-学区关系数据模型、学校-校区-学段关系数据模型、班级-年级-学校关系数据模型。
30.在本实施例4的保证家校通讯录数据一致性的具体过程中,首先执行第一定时任务,其具体过程包括校验并批量操作数据,以完成同步校区数据、同步学段数据、同步年级数据、同步班级数据,以及修改班级排序字段;如:s1:首先查询当前目标数据slave的uc模型中的年级,删除目前uc中比企业微信中多出的年级数据;s2:根据学校id、企业微信校区id、学段id以及年级id查询saas系统中的对应数据,若存在,则转到s3;若不存在则转到s6;s3:继续查询是否是标准年级,若是则转到s4;s4:继续查询,判断目前的数据跟企业微信中的数据是否相等或者是否已经毕业;若是则结束,若否则转到s5;s5:更新saas系统中的对应数据后结束;s6:查询是否存在标准年级,若存在,添加相关数据后转到s4,若不存在,转到s7;s7:创建更新相关数据,创建失败则转到s4,创建成功则添加相关数据,并在内存数据库中添加对应的关系数据模型。
31.所述第二定时任务的执行过程包括,获取最新的企业微信的所有校区id,然后获取saas系统中的据库中对应的校区id,进行比较;对于需要删除的校区id进行删除;对于需要新增的校区id添加数据及其关系;对于需要修改的校区id进行修改;所述第三定时任务的执行过程包括获取企业微信中涉及家校通讯录的数据,同步家校通讯录数据。
32.本发明所述方法的适用场景均需对数据一致性的及时性要求有一定的容忍度。假若存在a、b两个业务系统,a、b两个系统都需要在各自的系统中使用同样的用户数据,但是用户数据只能在a系统中添加维护,通常这样的场景下,我们就需要将a系统的中的用户数据同步到b系统中,但这种同步不是及时同步,而是有一定的时间差,而业务上是可以接受的这个时间差的的,譬如t+1 或者5分钟后等。本发明所述方法非常适用于解决分布式系统中的数据(包含历史数据)一致性问题,尤其是数据冗余下的数据一致性问题。
技术特征:
1.一种保证数据一致性的方法,其特征在于,所述方法首先以源数据(master)为基准数据,通过saas系统中的数据管理模块进行全量扫描和/或逻辑块扫描和/或增量扫描的方式,对目标数据(slave)进行修复矫正,从而保证分布式系统中的数据的最终一致性;所述源数据(master)包括企业微信中涉及教育的基础数据,包括学校、校区、学段、年级、班级、学生数据;所述目标数据(slave)为saas系统中对应的数据模型中的数据,所述数据模型为基于所述源数据master的通用可组合模型,包括学校-学区关系数据模型、学校-校区-学段关系数据模型、班级-年级-学校关系数据模型。2.根据权利要求1所述的保证数据一致性的方法,其特征在于,所述方法具体包括如下步骤:1)判定源数据(master)的数据量;2)当所述源数据(master)上主表行记录小于50万条时,采用全量扫描的方式对目标数据(slave)进行修复矫正。3.根据权利要求1所述的保证数据一致性的方法,其特征在于,所述方法具体包括如下步骤:1)判定源数据(master)的数据量;2)当所述源数据(master)上主表行记录大于50且小于500万条时,采用逻辑块扫描的方式对目标数据(slave)进行修复矫正;所述逻辑块扫描的具体过程为对一个业务块的数据进行全量扫描。4.根据权利要求2或3所述的保证数据一致性的方法,其特征在于,所述全量扫描的具体过程为:首先设置定时任务,进行扫描源数据(master)上的每一条记录,然后根据源数据(master)上的记录值去目标数据(slave)上查询;在所述目标数据(slave)上查询到源数据(master)上的记录值则继续查询,在所述目标数据(slave)上查询不到源数据(master)上的记录值则进行修复矫正;所述定时任务的执行频率为每5分钟至30分钟执行一次;所述查询为rpc调用或本地调用,所述修复矫正具体包括增加、覆盖或删除。5.根据权利要求1所述的保证数据一致性的方法,其特征在于,所述方法具体包括如下步骤:1)判定源数据(master)的数据量;2)当所述源数据(master)上主表行记录大于500万条时,采用增量扫描的方式对目标数据(slave)进行修复矫正。6.根据权利要求5所述的保证数据一致性的方法,其特征在于,所述增量扫描的具体过程为:首先设置第一定时任务,然后执行第一定时任务;再设置第二定时任务并执行第二定时任务,最后设置第三定时任务并执行第三定时任务;所述第一定时任务的执行频率为7天至30天一次;执行第一定时任务的具体过程为逐行从目标数据(slave)上取出每一条数据,取出100-2000条数据后将取出的数据放入到一个集合中,然后对所述集合中的数据进行校验,得到与所述源数据(master)不一致的脏数据,并将所述脏数据放入另外一个待处理集合中,最后对所述待处理集合中的脏数据批量操作,放入一个事务中进行一次提交;所述第二定时任务的执行频率为每3天至7天一次;执行第二定时任务的具体过程为通
过业务标识从系统中获取对应业务标识在目标数据(slave)上的所有数据,并放入到一个另一个集合中,所述集合中的数据的后续处理步骤与执行第一定时任务过程中的处理步骤相同;所述第三定时任务的执行频率为每1-2h一次;执行第三定时任务的具体过程为系统将源数据(master)上发生变化的数据记录并放入到内存数据库中,用内存数据库中的数据对比目标数据(slave),数据不一致则直接进行修正矫正。7.根据权利要求4或6所述的保证数据一致性的方法,其特征在于,所述分布式系统中的数据包含历史数据。8.根据权利要求7所述的保证数据一致性的方法,其特征在于,所述分布式系统中的数据为涉及数据冗余的数据。9.根据权利要求8所述的保证数据一致性的方法,其特征在于,所述分布式系统中的数据为教务管理系统中的数据,所述源数据(master)和目标数据(slave)为包含学生信息和/或家长信息的数据表;所述一个业务块为一个学校或一个年级或一个班级;所述业务标识为学校id。10.一种保证数据一致性的系统,其特征在于,所述系统包括数据库和数据处理器,所述数据处理器通过权利要求1-9任一所述的保证数据一致性的方法来保证数据的一致性。
技术总结
本发明涉及一种保证数据一致性的方法和系统,所述方法首先以源数据Master为基准数据,通过全量扫描和/或逻辑块扫描和/或增量扫描的方式,对目标数据Slave进行修复矫正,从而保证分布式系统中的数据的最终一致性。所述修复和矫正的方式可以为全量扫描或逻辑块扫描或增量扫描三种方式中的一种方式或多种的组合,规则灵活。非常适用于解决分布式系统中的数据(包含历史数据)一致性问题,尤其是数据冗余下的数据一致性问题。本发明所述方法更能够在不用引入或者依赖第三方组件的情况下对历史脏数据进行处理且保证数据的一致性,同时,本申请所述方法对代码的改动量极少,只需要对各种情况进行组合和配置,投入产出比高。投入产出比高。投入产出比高。
技术研发人员:张威 山宏涛
受保护的技术使用者:蝉鸣科技(西安)有限公司
技术研发日:2023.06.28
技术公布日:2023/9/16
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
