首页> 中国专利> 一种利用数据服务中心来保证数据一致性的方法及其系统

一种利用数据服务中心来保证数据一致性的方法及其系统

摘要

本发明提供了一种利用数据服务中心来保证数据一致性的方法,该方法为:步骤S1、设置主数据库和从数据库进行数据同步的最大延迟时间,并将最大延迟时间存入redis缓存;步骤S2、写请求访问数据服务中心,访问主数据库修改数据,存储修改时间至redis缓存;步骤S3、获取redis缓存中国最大延迟时间,并将最大延迟时间*2作为数据不一致的时间窗口;步骤S4、读请求访问数据服务中心,根据修改时间判断数据是否在时间窗口期内被修改,是,则访问主数据库读取数据;否,则访问从数据库读取数据;以此来维持数据一致性。

著录项

  • 公开/公告号CN112699139A

    专利类型发明专利

  • 公开/公告日2021-04-23

    原文格式PDF

  • 申请/专利权人 福建天晴在线互动科技有限公司;

    申请/专利号CN202110046354.X

  • 发明设计人 刘德建;叶伟;陈宏展;

    申请日2021-01-14

  • 分类号G06F16/23(20190101);G06F16/27(20190101);G06F16/2455(20190101);G06F12/0877(20160101);

  • 代理机构35233 福州旭辰知识产权代理事务所(普通合伙);

  • 代理人程勇

  • 地址 350212 福建省福州市长乐市湖南镇大鹤村

  • 入库时间 2023-06-19 10:43:23

说明书

技术领域

本发明涉及计算机通讯技术领域,特别是一种利用数据服务中心来保证数据一致性的方法及其系统。

背景技术

Mysql数据库为了提供更高的性能,可以做读写分离,一台数据库做写库,一台数据库做从库,Mysql通过主数据库和从数据库同步来维持数据一致。但是数据同步是有延迟的,根据数据量和数据结构的不同可能有长有短,可能50毫秒,也可能500毫秒。那分布式系统在高并发的场景下,在这几百毫秒的窗口期间就可能存在数据不一致的情况。现有维持数据强一致性的手段有Mysql配置的全同步复制、使用分布式事务等等,但是这些方案都会降低接口的响应时间,降低系统的吞吐量,以此来提供完全的强一致性。但互联网高并发的业务场景,更多的是使用最终一致性来维持多数据副本的一致性问题。

发明内容

为克服上述问题,本发明的目的是提供一种利用数据服务中心来保证数据一致性的方法,无需降低接口的响应时间,能保持数据最终一致性。

本发明采用以下方案实现:一种利用数据服务中心来保证数据一致性的方法,所述方法包括如下步骤:

步骤S1、设置主数据库和从数据库进行数据同步的最大延迟时间,并将最大延迟时间存入redis缓存;

步骤S2、写请求访问数据服务中心,访问主数据库修改数据,存储修改时间至redis缓存;

步骤S3、获取redis缓存中国最大延迟时间,并将最大延迟时间*2作为数据不一致的时间窗口;

步骤S4、读请求访问数据服务中心,根据修改时间判断数据是否在时间窗口期内被修改,是,则访问主数据库读取数据;否,则访问从数据库读取数据;以此来维持数据一致性。

进一步的,所述步骤S1进一步具体为:设置一定时任务,该定时任务为选取主数据库和从数据库中一张表,目的是为了预估主数据库和从数据库进行数据同步的延迟上限,设置一预设时间对比一次延迟,从多次对比中存储最大的延迟上限作为最大延迟时间存入redis缓存。

进一步的,所述步骤S2进一步具体为:数据服务中心接收到增加、删除、修改请求,增加、删除、修改都是更改数据的写请求,写请求一律链接主数据库进行操作;访问主数据库修改数据,保存被更改的表名到redis缓存中,同时存储修改时间至redis缓存;

进一步的,所述步骤S4进一步具体为:读请求访问数据服务中心,数据服务中心收到查询修改表的请求后;根据查询语句获得修改表的数据,判断修改时间是否小于时间窗口,是,则表明数据在不一致的时间窗口内更改过数据,则访问主数据库读取数据;否,则访问从数据库读取数据;以此来维持数据一致性。

本发明还提供了一种利用数据服务中心来保证数据一致性的系统,所述系统包括设置延迟时间模块、写请求操作模块、时间窗口设置模块、以及读请求操作模块;

所述设置延迟时间模块,用于设置主数据库和从数据库进行数据同步的最大延迟时间,并将最大延迟时间存入redis缓存;

所述写请求操作模块,用于写请求访问数据服务中心,访问主数据库修改数据,存储修改时间至redis缓存;

所述时间窗口设置模块,用于获取redis缓存中国最大延迟时间,并将最大延迟时间*2作为数据不一致的时间窗口;

所述读请求操作模块,用于读请求访问数据服务中心,根据修改时间判断数据是否在时间窗口期内被修改,是,则访问主数据库读取数据;否,则访问从数据库读取数据;以此来维持数据一致性。

进一步的,所述设置延迟时间模块的实现方式进一步具体为:设置一定时任务,该定时任务为选取主数据库和从数据库中一张表,目的是为了预估主数据库和从数据库进行数据同步的延迟上限,设置一预设时间对比一次延迟,从多次对比中存储最大的延迟上限作为最大延迟时间存入redis缓存。

进一步的,所述写请求操作模块的实现方式进一步具体为:数据服务中心接收到增加、删除、修改请求,增加、删除、修改都是更改数据的写请求,写请求一律链接主数据库进行操作;访问主数据库修改数据,保存被更改的表名到redis缓存中,同时存储修改时间至redis缓存;

进一步的,所述读请求操作模块的实现方式进一步具体为:读请求访问数据服务中心,数据服务中心收到查询修改表的请求后;根据查询语句获得修改表的数据,判断修改时间是否小于时间窗口,是,则表明数据在不一致的时间窗口内更改过数据,则访问主数据库读取数据;否,则访问从数据库读取数据;以此来维持数据一致性。

本发明的有益效果在于:本发明能够在数据库设置主从同步的情况下,利用数据服务中心来处理和路由读写请求,根据业务修改时间和预估的同步延时最大延时的比对,来判断读业务是否可能在数据不一致性的时间窗口期内,以此来决定读主数据库还是读从数据库,以此来维持数据一致性;无需降低接口的响应时间。

附图说明

图1是本发明的方法流程示意图。

图2是本发明一实施例的方法流程示意图。

图3是本发明一实施例的数据服务中心的构架示意图。

图4是本发明的系统原理框图。

具体实施方式

下面结合附图对本发明做进一步说明。

请参阅图1所示,本发明的一种利用数据服务中心来保证数据一致性的方法,所述方法包括如下步骤:

步骤S1、设置主数据库和从数据库进行数据同步的最大延迟时间,并将最大延迟时间存入redis缓存;

步骤S2、写请求访问数据服务中心,访问主数据库修改数据,存储修改时间至redis缓存;

步骤S3、获取redis缓存中国最大延迟时间,并将最大延迟时间*2作为数据不一致的时间窗口;

步骤S4、读请求访问数据服务中心,根据修改时间判断数据是否在时间窗口期内被修改,是,则访问主数据库读取数据;否,则访问从数据库读取数据;以此来维持数据一致性。

下面结合一具体实施例对本发明做进一步说明:

如图2和图3所示,一种利用数据服务中心来保证数据一致性的方法,

步骤1:预估主数据库和从数据库同步延迟

设置一个定时任务,该定时任务为选取库中业务较为复杂的一张表为目标,目的是为了预估主数据库和从数据库同步的延迟上限,每30分钟对比一次延迟,存储延迟上限,例如4次依次比对的延迟是200毫秒、105毫秒、300毫秒、220毫秒,那只存储最大延迟上限300毫秒至Redis缓存。

步骤2:写请求访问数据服务中心,访问主数据库修改数据,存储修改时间至redis缓存;

数据服务中心接收到增删改请求,增删改都是更改数据的写请求,写请求一律链接主数据库操作。例如接收到的是一个新增评论表的请求INSERT INTO `comment_tb` (`goods_id`, `user_id`, `content`, `create_time`) VALUES ('1009', '889880', '收到货很满意', '2020-10-15 10:57:01')。

步骤2.1:保存被更改的表名comment_tb到redis缓存中,redis key=update:comment_tb,存储的值是更新的时间,缓存超时设置1分钟。以此来标记comment_tb表在某一时刻被修改。

步骤3:获取redis缓存中国最大延迟时间,并将最大延迟时间*2作为数据不一致的时间窗口;读取redis获得步骤1存储在redis里的数据最大延迟,假如读取到的最大延迟上限是300毫秒,为了更高的容错率,用最大上限乘以2来作为数据可能不一致的时间窗口,300毫秒*2=600毫秒。

步骤4:读请求访问数据服务中心,数据服务中心收到请求后,例如接收到的是一个查询评论表的请求,select * from comment_tb where goods_id=1009。

步骤4.1:根据查询语句中的表名comment_tb可以得到redis key=update:comment_tb,读取redis判断comment_tb是否在数据可能不一致的时间窗口内更改过数据。如果是则从主库查询数据,如果不是,则从从库查询数据。

步骤4.2:根据查询语句获得修改表的数据,判断修改时间是否小于时间窗口,是,则表明数据在不一致的时间窗口内更改过数据,则访问主数据库读取数据;否,则访问从数据库读取数据;以此来维持数据一致性。

如图4所示,本发明还提供了一种利用数据服务中心来保证数据一致性的系统,所述系统包括设置延迟时间模块、写请求操作模块、时间窗口设置模块、以及读请求操作模块;

所述设置延迟时间模块,用于设置主数据库和从数据库进行数据同步的最大延迟时间,并将最大延迟时间存入redis缓存;

所述写请求操作模块,用于写请求访问数据服务中心,访问主数据库修改数据,存储修改时间至redis缓存;

所述时间窗口设置模块,用于获取redis缓存中国最大延迟时间,并将最大延迟时间*2作为数据不一致的时间窗口;

所述读请求操作模块,用于读请求访问数据服务中心,根据修改时间判断数据是否在时间窗口期内被修改,是,则访问主数据库读取数据;否,则访问从数据库读取数据;以此来维持数据一致性。

其中,所述设置延迟时间模块的实现方式进一步具体为:设置一定时任务,该定时任务为选取主数据库和从数据库中一张表,目的是为了预估主数据库和从数据库进行数据同步的延迟上限,设置一预设时间对比一次延迟,从多次对比中存储最大的延迟上限作为最大延迟时间存入redis缓存。

所述写请求操作模块的实现方式进一步具体为:数据服务中心接收到增加、删除、修改请求,增加、删除、修改都是更改数据的写请求,写请求一律链接主数据库进行操作;访问主数据库修改数据,保存被更改的表名到redis缓存中,同时存储修改时间至redis缓存;

另外,所述读请求操作模块的实现方式进一步具体为:读请求访问数据服务中心,数据服务中心收到查询修改表的请求后;根据查询语句获得修改表的数据,判断修改时间是否小于时间窗口,是,则表明数据在不一致的时间窗口内更改过数据,则访问主数据库读取数据;否,则访问从数据库读取数据;以此来维持数据一致性。

总之,本发明首先要对数据同步的延迟做一个预估,得到一个延迟毫秒数N,假设是500毫秒;其次开发数据服务中心,它可以理解成一个服务中台或者接口站点,读和写业务都访问数据服务中心,数据服务中心会记录所有的写库的sql操作,存入缓存中,等到读库请求,会从缓存中读取相关的操作,如果存在数据不一致时间窗口期的N毫秒内,读取的表有更改过数据,那么直接把读请求路由到主库,直接读取主数据,防止从数据库还未同步到最新数据,以此来维持一致性。如果读取的表更改数据的时间超过了数据不一致时间窗口期N毫秒,那么主从数据早已经同步完成,可以直接读取从库来获得数据。

以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号