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官方提供的方案,具体用哪一种,需要根据以下情况综合考虑分析:

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VTK 9.2.6 源码和VTK Examples 编译 Visual Studio 2022

对于编译 VTK 源码和编译详细的说明: VTK 源码编译: 下载源码: 从 VTK 官方网站或者 GitHub 获取源代码。官网目前最近的9.3.0有问题,见VTK 9.3.0 编译问题 Visual Studio 2022去gitlab上选择9.2.6分支进行clone CMake 配置&…

Linux之文件系统

我们之前谈到的文件描述符fd,是与被加载到内存中的文件相关的,那么还有什么文件呢?磁盘文件 内存文件 ------ 断电失效 磁盘文件 ------ 不受断电的影响 磁盘存储器存、取信息的最基本单位是扇区。 —个扇区能存储512Bytes的数据,OS与磁盘交互的单位…

Spring-01

Spring 1.Spring是什么? spring是一个开源的Java应用框架,它提供了一套全面的基础设施支持 2.Spring框架的主要特点 1)依赖注入(Dependency Injection,DI) 2)面向切面编程(AOP&#xff09…

Redis命令-Key的层级结构

基础篇Redis 4.4 Redis命令-Key的层级结构 Redis没有类似MySQL中的Table的概念,我们该如何区分不同类型的key呢? 例如,需要存储用户.商品信息到redis,有一个用户id是1,有一个商品id恰好也是1,此时如果使…

长篇分享,如何学习电路设计?

本文来自看海原创视频教程:《运放秘籍》运算放大器基础精讲及应用第一部*开天 微信公众号:工程师看海 【淘宝】https://m.tb.cn/h.5PAjLi7?tkvmMLW43KO7q CZ3457 「运放秘籍_运算放大器Multisim仿真视频教程第一部开天_工程师看海」 点击链接直接打开 …

王道C语言督学营OJ课后习题(课时14)

#include <stdio.h> #include <stdlib.h>typedef char BiElemType; typedef struct BiTNode{BiElemType c;//c 就是书籍上的 datastruct BiTNode *lchild;struct BiTNode *rchild; }BiTNode,*BiTree;//tag 结构体是辅助队列使用的 typedef struct tag{BiTree p;//树…

OpenGL的MVP矩阵理解

OpenGL的MVP矩阵理解 右手坐标系 右手坐标系与左手坐标系都是三维笛卡尔坐标系&#xff0c;他们唯一的不同在于z轴的方向&#xff0c;如下图&#xff0c;左边是左手坐标系&#xff0c;右边是右手坐标系 OpenGL中一般用的是右手坐标系 1.模型坐标系&#xff08;Local Space&…

保理业务产品方案

常见的信贷业务流程 产品架构 一般分为贷前、贷中、贷后三个部分&#xff1a; 贷前一般处理客户入驻、资质审批、授信项目准入&#xff1b; 贷中一般处理处理具体的融资申请、审批、中登登记、资产锁定、放款事务&#xff1b; 贷后一般处理客户还款冲销、账款跟踪、到期日调整…

GRE_MGRE综合实验

目录 1、R5为ISP&#xff0c;只能进行IP地址配置&#xff0c;其所有地址均配为公有IP地址。 IP配置 配置公网全网通 2、&#xff08;1&#xff09;R1和R5间使用PPP的PAP认证&#xff0c;R5为主认证方。 PAP认证 &#xff08;2&#xff09;R2与R5之间使用ppp的CHAP认证&am…

顺序栈、链式栈、顺序队列、链式队列的ADT及其实现

顺序栈ADT及其实现 链式栈ADT及其实现 顺序队列的ADT及其实现 在数组中队首队尾的分配方案 第三中方案&#xff0c;即达到入队出队操作的时间代价是O&#xff08;1&#xff09; 同时可充分利用空间&#xff0c;不会出现空间似乎用完了的假象 时间性能和空间性能发挥到最大 链…

Qt FFmpeg开发环境配置以及测试 - 不编译源码

Qt FFmpeg环境配置以及测试 引言一、下载二、配置三、测试 引言 FFmpeg是一套可以用来记录、转换数字音频、视频&#xff0c;并能将其转化为流的开源计算机程序。它采用了LGPL或GPL许可证&#xff0c;并提供了录制、转换以及流化音视频的完整解决方案。 FFmpeg包含了非常先进的…

【C++】map set

文章目录 1. 关联式容器2. 键值对3. 树形结构的关联式容器3.1 set3.1.1 set 的介绍3.1.2 set 的使用 3.2 map3.2.1 map 的介绍3.2.2 map 的使用 3.3 multiset3.3.1 multuset 的介绍3.3.2 multiset 的使用 3.4 multimap3.4.1 multimap 的介绍3.4.2 multimap 的使用 1. 关联式容器…

【文献分享】PyPlume程序:快速海洋表面传输评估的工具包

PyPlume: A toolkit for rapid ocean surface transport assessments PyPlume&#xff1a;快速海洋表面传输评估的工具包 PyPlume 是一个 Python 工具箱和管道&#xff0c;用于统一从模型和观测加载二维洋流矢量场、模拟轨迹模型以及分析和可视化粒子轨迹的过程。提供了 Ju…

Java_21 完成一半题目

完成一半题目 有 N 位扣友参加了微软与力扣举办了「以扣会友」线下活动。主办方提供了 2*N 道题目&#xff0c;整型数组 questions 中每个数字对应了每道题目所涉及的知识点类型。 若每位扣友选择不同的一题&#xff0c;请返回被选的 N 道题目至少包含多少种知识点类型。 示例…

python requirement.txt编译问题,代理问题为解决。

Date: 03/28/2024 11:00-12:00 Date: 03/27/2024 19:00-21:00 问题现象&#xff1a;开启代理后&#xff0c;无法正常下载 PS D:\workspace\winform\canvas\mysite依赖包> python -m pip install flatlib-0.2.3-py3-none-any.whl Looking in indexes: https://mirrors.ust…

WHM面板备份与恢复方法

上周有一个Hostease客户&#xff0c;购买了WHM面板的服务器&#xff0c;联系我们关于WHM面板中备份如何设置。接下来&#xff0c;我们分享如何在WHM面板中进行备份设置。 以下是在 WHM 面板中进行备份和恢复的基本步骤&#xff1a; 备份配置&#xff1a; 登录 WHM 控制面板&…

《 Arm Compiler 5.06 》__ARM编译器官网下载、安装和使用说明(小白也能懂)

目录 一、前言 二、官方网站下载 三、我的资源 四、编译器安装在 Keil 软件上 五、Keil选择编译器V5 “ V5.06 update 7(build 960) ” 六、测试 (*&#xffe3;︶&#xffe3;)创作不易&#xff01;期待你们的 点赞、收藏和评论喔。 一、前言 【Keil MDK-Arm5.37】不再…

Linux课程____selinux模式

一、是什么 它叫做“安全增强型 Linux&#xff08;Security-Enhanced Linux&#xff09;”&#xff0c;简称 SELinux&#xff0c;它是 Linux 的一个安全子系统 二、有啥用 就是最大限度地减小系统中服务进程可访问的资源&#xff08;根据的是最小权限原则&#xff09;。避免…

三个对象组练习.java

题目&#xff1a;定义数组存储3部汽车对象&#xff1b;汽车属性&#xff1a;品牌&#xff0c;价格&#xff0c;颜色&#xff1b;创造3个汽车对象&#xff0c;数据通过键盘录入而来&#xff0c;并把数据存储到数组当中 分析&#xff1a; 在main&#xff08;&#xff09;里面定义…

QT----基于QT的人脸考勤系统ubuntu系统运行,编译到rk3588开发板运行

目录 1 Ubantu编译opencv和seetaface库1.1 Ubantu编译opencv1.2 Ubuntu编译seetaface1.3 安装qt 2 更改代码2.1 直接运行报错/usr/bin/ld: cannot find -lGL: No such file or directory2.2 遇到报错摄像头打不开2.3 修改部分代码2.4 解决中文语音输出问题 3 尝试交叉编译rk358…