ShardingProxy使用自定义策略,数据迁移方案

news2024/9/21 23:43:34

文章目录

    • ShardingProxy功能扩展
    • 分库分表数据迁移方案

ShardingProxy功能扩展

我们在使用ShardingJDBC时,会进行自定义分布式主键生成策略、自定义分片策略

在这里插入图片描述

如果我们想要我们自定义的这些策略在ShardingProxy中也能使用,应该如何操作嘞?

我们只需要将这些类以及对应的SPI文件打成一个Jar包,放到ShardingProxy的ext-lib目录下就可以使用了。使用的方式跟在ShardingJDBC中一样,直接改配置中的type值即可

只补充一个在之前的ShardingJDBC项目中,单独打功能扩展jar包的方式。在pom.xml中引入maven-jar-plugin插件就可以了。

<build>
    <plugins>
        <!-- 现有打包插件 -->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.3.2.RELEASE</version>
        </plugin>

        <!-- 将SPI扩展功能单独打成jar包 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.2.0</version>
            <executions>
                <execution>
                    <id>ShardingSPIDemo</id>
                    <phase>package</phase>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                    <configuration>
                        <classifier>spiextention</classifier>
                        <includes>
                            <include>com/hs/sharding/algorithm/*</include>
                            <include>META-INF/services/*</include>
                        </includes>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

在这里插入图片描述



分库分表数据迁移方案

官方文档

数据迁移场景:

  • 之前项目没有分库分表,现在数据大了之后要进行分库分表改造
  • 数据采用取模分片,发现数据量太大了,需要增加数据分片数量
  • 等等

分库分表通常面临的就是海量数据的场景,这使得数据迁移通常是一个非常庞大,非常耗时的工作。业界有很多零迁移数据扩缩容方案可以用来预防未来可能需要的数据迁移工作。但是,如果你没有提前进行设计,在调整分片方案时,确实需要进行数据迁移,应该怎么办呢?

数据迁移的难点往往不在于数据怎么转移,而是在数据转移的过程中,如何保证不影响业务正常进行。



通常的思路都是冷热数据分开迁移

  • 冷数据是指那些存量的历史数据。这一部分数据往往数据量非常大,不可能一次性迁移完成,那就只能用定时任务的方式,一点点的逐步完成迁移。
  • 热数据是指那些业务进行过程当中产生的实时数据。这一部分数据就要保证数据迁移过程中实时双写。

在冷数据迁移过程中,既要写入旧数据库当中,保证业务正常运行,同时又要写入新的数据库集群当中,保证数据正常更新。等冷数据迁移完成后,再将旧数据库完全淘汰,用新的数据库集群承载业务。



我们其实可以利用ShardingSphere的混合架构来辅助进行分库分表数据迁移。

在这里插入图片描述



热数据可以在旧业务数据通道外,通过ShardingJDBC往新的数据库进行实时双写。在这里主要是要考虑尽量少的影响旧业务的数据通道。而我们要做的, 就是用一个ShardingSphereDataSource,去替换旧的DataSource。首先可以在应用中配置一个ShardingJDBC数据双写库。在这个库中主要是让核心业务表能够保持在新旧两套数据库集群中同时进行双写。在这个过程中,旧的业务通道不需要做任何修改,只要在ShardingJDBC数据双写库中针对要迁移的核心业务表配置分片规则这就行。数据双写可以通过定制分片算法实现。



配置完数据双写后,就需要针对新数据库集群配置,配置一个ShardingJDBC数据写入库,主要完整针对新数据库集群的数据分片。这个ShardingJDBC数据写入库可以使用ShardingSphere的JDBC来创建,然后作为一个真实库,配置到之前的数据双写库当中,这样就可以完成针对新数据库集群的数据分片写入



冷数据部分主要是查询旧数据库中的数据,按照新的数据分片规则,转移到新数据库集群当中。这部分数据通常非常巨大,对内存的消耗非常大。所以可以通过定时任务进行增量更新,每次只读一部分数据。然后,为了简化数据转移的逻辑,可以搭建一个ShardingProxy服务,用来完成针对新数据库集群的分片规则。这样定时任务的逻辑就比较简单了,只要从一个MySQL服务读数据,然后写入另一个MySQL服务就可以了。而为了保持在写入新数据库集群时,与热数据保持相同的分片逻辑,ShardingProxy与ShardingJDBC数据写入库之间,可以通过ShardingSphere的管理中心来保持规则同步。



这样,整个数据迁移过程中,旧的业务数据通道几乎不需要做任何改变。等数据迁移完成后,只要把ShardingJDBC数据写入库保留下来,把ShardingJDBC数据双写库和旧数据通道直接删掉即可。在整个迁移过程中,对应用来说,都只是访问一个DataSource,只不过是DataSource的具体实例根据配置做了变动而已,业务层面几乎不需要做任何修改。



当然,具体实施时,还是有很多具体的细节需要你自己去补充的。例如对于业务SQL需要做梳理。如果原本只是访问一个MySQL服务,而SQL语句写得比较放飞自我的话,那就需要按照ShardingJDBC的要求进行调整,尽量不要使用ShardingSphere不支持的SQL语句。

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

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

相关文章

使用F1C200S从零制作掌机之I2C传感器

访问I2C设备&#xff08;比如eeprom&#xff09;&#xff0c;我知道的有三总方法&#xff1a; &#xff08;一&#xff09;i2c-dev操作I2C设备&#xff1a;不用添加设备驱动&#xff0c;用户直接在应用层完成对具体I2C 设备的驱动工作。 &#xff08;二&#xff09;sysfs操作…

微信小程序教程011-:2:京西购物商城实战之TabBar实现

2、tabBar 2.0 创建tabBar分支 运行如下命令,基于master分支,创建本地tabBar子分支,用来开发和tabBar相关的功能 git checkout -b tabbar2.1 创建tabBar页面 在pages目录中,创建首页(home)、分类(cate)、购物车(cart)、我的(my)这4个tabBar页面,在HBuilderX中…

【网络世界】数据链路层

目录 &#x1f308;前言&#x1f308; &#x1f4c1; 初识数据链路层 &#x1f4c2; 概念 &#x1f4c2; 协议格式 &#x1f4c1; MAC地址 &#x1f4c2; 概念 &#x1f4c2; 与IP地址的区别 &#x1f4c1; MTU &#x1f4c2; 对IP协议的影响 &#x1f4c2; 对UDP协议的影响…

思维+位运算,CF 1934D1 - XOR Break --- Solo Version

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1934D1 - XOR Break --- Solo Version 二、解题报告 1、思路分析 合法操作会让 n 越变越小 假如最高位1为 b1, 次高位1 为b2 那么我们去掉b1 的 1最大能够得到的数为 &#xff08;1 << b2&#xff…

图像传感器 - 从零开始认识各种传感器【二十六期】

图像传感器|从零开始认识各种传感器 1、什么是图像传感器&#xff1f; 图像传感器是将光信号转换为电信号的设备&#xff0c;图像传感器通过捕捉光子并将其转化为电子信号&#xff0c;从而生成数字图像。它是数码相机、摄像机、智能手机、无人机、自动驾驶汽车以及各种工业和医…

良心推荐!分享6个强大的电脑软件,每一个都非常实用

良心推荐&#xff01;分享6个功能强大的电脑软件&#xff0c;每一个都非常实用&#xff01; 1.Listen1 一个可以免费听音乐的软件&#xff0c;也可以在浏览器上作为插件使用&#xff0c;曲库丰富&#xff0c;里面涵盖了QQ音乐、酷狗音乐、网易云音乐等多个平台的歌单资源&…

【MySQL】索引——索引的实现、B+ vs B、聚簇索引 VS 非聚簇索引、索引操作、创建索引、查询索引、删除索引

文章目录 MySQL5. 索引的实现5.1 B vs B5.2 聚簇索引 VS 非聚簇索引 6. 索引操作6.1 创建主键索引6.2 创建唯一索引6.3 创建普通索引6.4 创建全文索引6.5 查询索引6.6 删除索引 MySQL 5. 索引的实现 因为MySQL和磁盘交互的基本单位为Page&#xff08;页&#xff09;。 MySQL 中…

LTrack:实现夜间多目标追踪,并开放低光多目标追踪数据集LMOT

摘要 低光场景在现实应用中很常见&#xff08;例如&#xff0c;夜间的自动驾驶和监控&#xff09;。最近&#xff0c;多目标跟踪在各种实际用例中受到了很多关注&#xff0c;但黑暗场景中的多目标跟踪却很少被考虑。在本文中&#xff0c;我们专注于黑暗场景中的多目标跟踪。为…

点菜吧——随便点 C#生成套餐

前言 一到食堂发现有多种选择&#xff0c;但是有一个固定的套路&#xff0c;只能是一个荤&#xff0c;二个小荤&#xff0c;菜品数量也不少&#xff0c;任君选择&#xff0c;如果是一个选择困难症&#xff0c;就有点烦了&#xff0c;所以出品这个自动生成套餐软件。各位老板可…

Mysql原理与调优-InnoDB行记录结构

目录 1.绪论 2.InnoDB的记录格式分类 3.compact格式 3.1 基本组成 3.2 记录额外信息 3.2.1 记录额外信息组成 3.2.2 变成字段长度列表 3.2.3 null值列表 3.2.4 记录头信息 3.3 实际记录 3.3.1 溢出页 3.3.2 varchar最多可以储存多少个字符的数据 4.其他记录格式和c…

配置python的基本环境

python的背景知识 python是咋来的&#xff1f; Python 是一种广泛使用的高级编程语言&#xff0c;由 Guido van Rossum 在1989年底发明&#xff0c;第一个公开发行版发行于1991年。Python 的设计哲学强调代码的可读性和简洁的语法&#xff08;尤其是使用空格缩进来区分代码块…

tcpdump使用指南

tcpdump 是一款强大的网络抓包工具&#xff0c;它使用 libpcap 库来抓取网络数据包&#xff0c;这个库在几乎在所有的 Linux/Unix 中都有。 tcpdump src 10.5.2.3 and dst port 3389 # 1. 基于IP地址过滤 # 根据源ip进行过滤 $ tcpdump -i eth2 src 192.168.10.100# 根据目标…

sqli-labs靶场练习(1、5-8关)

自己搭建环境啊喂...http://127.0.0.1/sqli-labs-php7-master/ 第一关 1.单引号判断是否存在注入点 /?id1 2.查询列数 ?id1 order by 3-- ?id1 order by 4-- 由此可判断有3列 3.查询用户名和密码分别在哪列 ?id-1 union select 1,2,3 -- 4.查询数据库名称为security ?…

CC2530组网实验-1

1&#xff0c;ZigBee协议栈 协议是一系列的通信标准&#xff0c;通信双方需要共同按照这一标准进行正常的数据发射和接收。协议栈是协议的具体实现形式&#xff0c;通俗点来理解就是协议栈是协议和用户之间的一个接口&#xff0c;开发人员通过使用协议栈来使用这个协议的&…

生活一地猫毛,空气还有猫浮毛!宠物空气净化器帮你消除这些烦恼

随着换毛季节的到来&#xff0c;铲屎官们如临大敌&#xff0c;猫咪将它们的毛发洒满每一个角落&#xff0c;仿佛室内下起了毛茸茸的飘雪。对于铲屎官来说&#xff0c;这不仅耗费时间的清理任务&#xff0c;更是一场守护健康的保卫战。为此&#xff0c;采取了许多措施来应对猫咪…

STL中的vector以及简单实现

vector的简单介绍&#xff1a; 头文件&#xff1a; #include<vector> vector是属于STL的一员&#xff0c;虽然vector的英文意思是向量&#xff0c;但是vector就是一个顺序表&#xff1b; 对于vector来说&#xff0c;面对string的设计的复杂和冗余&#xff0c;vector就…

Java毕业设计 基于SSM和Vue的图书馆座位预约系统小程序

Java毕业设计 基于SSM和Vue的图书馆座位预约系统小程序 这篇博文将介绍一个基于SSM框架和Vue开发的图书馆座位预约系统微信小程序&#xff0c;适合用于Java毕业设计。 功能介绍 用户 登录 注册 首页 图片轮播 关于我们 公告信息 图书馆信息 图书馆详情 预约选座 收藏 …

Tkinter Designer:拖拽式加速Python Tkinter GUI开发的神器

引言 在Python的世界里&#xff0c;创建美观且功能强大的图形用户界面&#xff08;GUI&#xff09;向来是开发者的挑战之一。Tkinter&#xff0c;作为Python的内置GUI库&#xff0c;虽然功能强大&#xff0c;但在实际使用中&#xff0c;设计和实现GUI的过程往往耗时且繁琐。Tki…

Linux中信号的处理

进程正在递达某一个信号期间&#xff0c;同类型的信号无法被递达&#xff01;&#xff01;&#xff01; 当当前信号正在被捕捉事&#xff0c;系统会自动将当前信号加入到进程的信号屏蔽字&#xff08;block&#xff09;。 当信号完成捕捉动作&#xff0c;系统又会自动解除对该…

R语言BIOMOD2 及机器学习方法的物种分布模拟与案例分析

BIOMOD2是一个R软件包&#xff0c;用于构建和评估物种分布模型&#xff08;SDMs&#xff09;。它集成了多种统计和机器学习方法&#xff0c;如GLM、GAM、SVM等&#xff0c;允许用户预测和分析物种在不同环境条件下的地理分布。通过这种方式&#xff0c;BIOMOD帮助研究者评估气候…