3.亿级积分数据分库分表:ShardingSphere官方提供的平滑数据迁移方案介绍,有什么缺点呢?

        前面的  2.亿级积分数据分库分表:增量数据同步之代码双写,为什么没用Canal? 博客中介绍了实现平滑数据迁移的两种方案:Canal监听MySQL的binlog、代码双写,也分别介绍了两种方案的实现原理及优缺点,最后基于业务考虑选择了双写。两种方案都需要自己去写代码实现整套方案,那么如果不想自己实现怎么办呢?

        其实ShardingSphere官方提供了平滑数据迁移的方案,这节就简单介绍一下官方方案的操作步骤及原理,以及官方的方案有哪些优缺点,适不适合自己的业务场景。

ShardingSphere平滑数据迁移方案介绍

目前的数据迁移解决方案为:使用一个全新的数据库集群作为迁移目标库,迁移到的目标库不能跟原来的数据库相同

一次数据迁移包括以下几个主要阶段:

  1. 准备阶段;
  2. 存量数据迁移阶段;
  3. 增量数据同步阶段(其实也是使用的MySQL的binlog日志进行增量同步的);
  4. 数据一致性校验阶段;
  5. 流量切换阶段。

官方文档地址

注意:官方的迁移方案使用的代理模式,也就是ShardingSphere-Proxy

运行部署地址:运行部署 :: ShardingSphere

使用手册地址:使用手册 :: ShardingSphere

执行阶段说明

准备阶段

在准备阶段,数据迁移模块会进行数据源连通性及权限的校验,同时进行存量数据的统计、日志位点的记录,最后根据数据量和用户设置的并行度,对任务进行分片。

存量数据迁移阶段

执行在准备阶段拆分好的存量数据迁移任务,存量迁移阶段采用 JDBC 查询的方式,直接从源端读取数据,基于配置的分片等规则写入到目标端。

增量数据同步阶段

由于存量数据迁移耗费的时间受到数据量和并行度等因素影响,此时需要对这段时间内业务新增的数据进行同步。 不同的数据库使用的技术细节不同,但总体上均为基于复制协议或 WAL 日志实现的变更数据捕获功能。

  • MySQL:订阅并解析 binlog;

这些捕获的增量数据,同样会由数据迁移模块写入到新数据节点中。

数据一致性校验阶段

        数据迁移完成后,需要对迁移后的新老数据做数据一致性的校验,支持 CRC32 校验算法和 DATA_MATCH 校验算法

  • CRC32_MATCH:循环冗余校验,通过校验码来判断是否存在数据不一致,效率快,但是不支持断点续传,且只支持MySQL

  • DATA_MATCH:逐行挨个比对数据,效率稍慢但是支持断点续传和异构数据库

目标端开启数据加密的情况需要使用 DATA_MATCH,异构迁移也需要使用 DATA_MATCH。

流量切换阶段

当增量数据基本同步完成时(由于业务系统未停止,增量数据是不断的),则进入流量切换阶段。

在此阶段,可能存在一定时间的业务只读窗口期,通过设置数据库只读、控制源头写流量等方式,让源端数据节点中的数据短暂静态,确保增量同步完全完成。

这个只读窗口期时长取决于用户是否需要对数据进行一致性校验以及数据量。一致性校验是独立的任务,支持单独启停,支持断点续传。

确认完成后,数据迁移完成。 然后用户可以把读流量或者写流量切换到ShardingSphere。

官方方案的优缺点

优点

存量迁移、增量同步、数据校验都有完整的方案

不用自己设计方案,写代码了,节省了工作量

缺点

  • 不支持在当前存储节点之上做迁移,需要准备一个全新的数据库集群作为迁移目标库,比如在原来的单库做分表就不支持;
  • 切写流量时要设置原库只读,以避免新的数据进来,对业务有影响
  • 不支持目标端表结构和源端不一致;
  • 不支持迁移过程中源端表结构变更
  • 不支持目标端 proxy 使用 HINT 分片策略;

        关于平滑数据迁移的方案,总共介绍了三个:canal同步binlog、代码双写、ShardingSphere官方提供的方案,具体用哪一种,需要根据以下情况综合考虑分析:

  • 具体的分库分表情况
  • 业务能不能接受短暂停写
  • 开发团队对分库分表方案的了解程度
  • 。。。。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2905873.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

BabySQL【2019极客大挑战】

知识点: 功能分析 登录界面一般是 where username and password 可以从username出手,注释掉and语句单引号闭合绕过 通过测试和报错信息发现是一个单引号读取输入可以单引号闭合绕过关键字过滤 or and 过滤 || &&替换双写绕过select from wher…

学习Fast-LIO系列代码中相关概念理解

目录 一、流形和流形空间(姿态) 1.1 定义 1.2 为什么要有流形? 1.3 流形要满足什么性质? (1) 拓扑同胚 (2) 可微结构 1.4 欧式空间和流形空间的区别和联系? (1) 区别: (2) 联系: 1.5 将姿态定义在流形上比…

ROUYI框架地址

1、原版系统地址与文档 https://gitee.com/dromara/RuoYi-Cloud-Plus?_fromgitee_search 源码地址 https://plus-doc.dromara.org/#/ruoyi-cloud-plus/home 后端地址 https://plus-doc.dromara.org/#/plus-ui/home 前端地址 前端代码地址: RuoYi-Vue-Plus: 多租户…

python机器学习-糖尿病数据挖掘_2024年版(三个实战案例,附代码数据)

作者Toby,原文来自公众号:python生物信息学,《python机器学习-糖尿病数据挖掘_2024年版》, 背 景 糖尿病医学描述:糖尿病是一组因胰岛素绝对或相对分泌不足和(或)胰岛素利用障碍,引起的碳水化合物、蛋白质…

142857,真的那么神秘吗?

揭开神秘学的面纱,掌握宇宙的法则,成为智慧的拥有者。 142857,一个看似普通的数字,却被认为是世界上最奇特的数、最恐怖的数、最诡异的数,因为它有如下的特性: 142857 1 142857 142857 2 285714 14…

多线程的学习1

多线程 线程是操作系统能够进入运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。 进程:是程序的基本执行实体。 并发:在同一个时刻,有多个指令在单个CPU上交替执行。 并行:在同一时刻&#xff0c…

【EDA verilog 基础语法】

文章目录 前言一、逻辑值二、数字进制格式三、标识符四、数据类型1.寄存器类型:2.线网类型:3. 参数类型: 五、运算符1.算术运算符2.逻辑运算符3.条件运算符4.位运算符:5.移位运算符6.拼接运算符:7.运算符的优先级&…

系统分析师-数学与经济管理

系统架构设计师 系统架构设计师-软件开发模型总结 文章目录 系统架构设计师前言一、最小生成树二、最短路径三、网络与最大流量四、不确定型决策 前言 数学是一种严谨、缜密的科学,学习应用数学知识,可以培养系统架构设计师的抽象思维能力和逻辑推理能…

如何在CentOS使用Docker部署Traefik服务并创建固定公网地址远程访问

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

【干货】一份10万字免费的C#/.NET/.NET Core面试宝典

前言 C#/.NET/.NET Core相关技术常见面试题汇总,不仅仅为了面试而学习,更多的是查漏补缺、扩充知识面和大家共同学习进步。该知识库主要由自己平时学习实践总结、网上优秀文章资料收集(这一部分会标注来源)和社区小伙伴提供三部分…

如何在 Ubuntu 安装桌面环境

在 Ubuntu 上安装不同的桌面环境 如果你正在使用官方的 Ubuntu 发行版,它运行在 GNOME 上,那么你可以很容易地从默认的包管理器安装其他流行的桌面环境(DE)。让我们开始吧… 在 Ubuntu 上安装 KDE Plasma 如果你正在使用 GNOME…

企业微信知识库:从了解到搭建的全流程

你是否也有这样的疑惑:为什么现在的企业都爱创建企业微信知识库?企业微信知识库到底有什么用?如果想要使用企业微信知识库企业应该如何创建?这就是我今天要探讨的问题,感兴趣的话一起往下看吧! | 为什么企业…

C#手术麻醉信息系统全套商业源码,自主版权,支持二次开发 医院手麻系统源码

手术麻醉信息系统是HIS产品的中的一个组成部分,主要应用于医院的麻醉科,属于电子病历类产品。医院麻醉监护的功能覆盖整个手术与麻醉的全过程,包括手术申请与排班、审批、安排、术前、术中和术后的信息管理提供支持。 手术麻醉信息系统可与EM…

Flink-CDC 无法增量抽取SQLServer数据

1.问题 因部署在WindowsServer服务器SQLServer发生过期后重启,Flink-CDC同步进行作业重启,启动后无报错信息,数据正常抽取。但是观察几天后发现当天数据计算指标无法展示 2.定位 因为没用进行任何修改,故初步判断不是因Flink-C…

启动“宁波零碳工厂”建设,开启宁波“零碳”未来

宁波,🥲这座位于东海之滨的🥰繁荣城市,一直以来都是🍎中国工业发展的🥦重要引擎。然而,🥝随着全球气候变化⛅️问题的日益严峻,如何在🪅确保经济持续发展的同…

面向对象:继承

文章目录 一、什么叫继承?二、单继承三、多继承3.1多继承的各种情况3.1.1一般情况3.1.1特殊情况(菱形继承) 四、菱形继承引发的问题4.1 问题1:数据冗余4.2 问题2:二义性(无法确定到底是访问哪个) 五、虚拟继承解决菱形…

word文档属性怎么更改?详细教你更改文件属性

一、了解Word属性 在修改Word属性之前,我们首先需要了解Word属性的含义和作用。Word属性主要包括标题、主题、作者、关键词、摘要等,这些属性可以帮助我们更好地描述和归类文档,提高文档的可读性和可搜索性。同时,Word属性还可以…

linux网络服务学习(4):SAMBA

1.什么是SAMBA SAMBA也是一种文件共享工具 (1)服务名:smb (2)软件名:samba (3)配置文件: /etc/samba/smb.conf /etc/samba/smb.conf.example (4&#…

免费在线制流程图和思维导图ProcessOn高效协同

免费在线制流程图和思维导图ProcessOn高效协同,还有海量的免费模板。在ProcessOn,你可以与全球超过1.1亿的优秀人才一起合作,共同绘制出精美的流程图和思维导图。无论是工作中的项目管理,还是学习中的知识整理,Process…

Android room 在dao中不能使用挂起suspend 否则会报错

错误&#xff1a; Type of the parameter must be a class annotated with Entity or a collection/array of it. kotlin.coroutines.Continuation<? super kotlin.Unit> $completion); 首先大家检查一下几个点 一、kotlin-kapt 二、 是否引入了 room-ktx 我是2024年…