Sharding

Sharding操作

  • 什么是Sharding
  • Sharding-JDBC
    • 一、引入maven依赖 (sharding-jdbc-spring-boot-starter)
    • 二、水平分表操作(一个库多个相同结构表)
    • 其他的maven依赖版本 (shardingsphere-jdbc-core-spring-boot-starter)
  • 数据迁移
  • 直接使用客户端操作(非代码)

什么是Sharding

Sharding是一种数据库架构技术,它将一个大的数据库或表水平拆分成多个较小的、更易于管理的片段,这些片段被称为shards。每个shard可以存储数据库的一部分数据,并且通常被部署在独立的数据库服务器上。Sharding的主要目的是通过横向扩展来提高数据库的性能、可靠性和可扩展性。

Sharding-JDBC

Sharding-JDBC早期是由当当网开源的分布式数据库中间件,后期该项目被放入到ShardingSphere项目下,Sharding-JDBC是一个轻量级 Java 框架,在 Java 的 JDBC 层提供的额外服务, 它使用客户端直连数据库,以 jar 包形式提供服务,无需额外部署和依赖,可理解为增强版的 JDBC 驱动,完全兼容 JDBC 和各种 ORM 框架

在使用Sharding-JDBC首先要清楚以下几点
1.它是一个轻量级的Java框架,可以理解是增强的JDBC驱动
2.Sharding-JDBC是不做分库分表的,库与表是由数据库工程师分好的,通过引入Sharding-JDBC.jar配置好配置,解决多数据源切换与多数据源的操作

一、引入maven依赖 (sharding-jdbc-spring-boot-starter)

参考文章:
Sharding-JDBC实战(水平分表、水平分库、垂直分表、公共表、读写分离)
sharding-jdbc教程 看这一篇就够了

所需环境:SpringBoot+MybatisPlus+Sharding-JDBC+Druid

sharding-jdbc-spring-boot-starter:
早期ShardingSphere项目(最初名为Sharding-JDBC)中的一个组件,用于简化在Spring Boot项目中使用Sharding-JDBC的过程。
Sharding-JDBC最初是一个轻量级的Java框架,在Java的JDBC层提供额外的服务,主要用于分库分表、读写分离和分布式主键等功能。
它的主要特点是基于JDBC的扩展,以jar包的形式提供轻量级服务。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId>
</dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
</dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.20</version>
</dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId>
</dependency><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>sharding-jdbc-spring-boot-starter</artifactId><version>4.0.0-RC1</version>
</dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.0.5</version>
</dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId>
</dependency>

二、水平分表操作(一个库多个相同结构表)

数据库准备

水平分表的方式在同一个库中创建多个相同结构的个表
创建数据库course_db
在数据库创建2个相同的表course_1和course_2
数据操作规则:如果操作的数据id是偶数着操作course_1表,如果是奇数操作course_2表

CREATE TABLE course_1(cid BIGINT(20) PRIMARY KEY,cname VARCHAR(50) NOT NULL,user_id BIGINT(20) NOT NULL,cstatus VARCHAR(50) NOT NULL
);
CREATE TABLE course_2(cid BIGINT(20) PRIMARY KEY,cname VARCHAR(50) NOT NULL,user_id BIGINT(20) NOT NULL,cstatus VARCHAR(50) NOT NULL
);

properties配置

修改application.properties增加shardingsphere配置在ShardingSphere官网用户手册=>ShardingSphere-JDBC=>配置手册中都有详细的说明

官方配置文档地址

以下是两个表的操作配置

# 配置shardingjdbc分片策略
# 配置数据源,给数据源起别名
spring.shardingsphere.datasource.names=myds1# 由于表数据库有2个相同的表,我们只有一个实体类,需开启允许bean覆盖
spring.main.allow-bean-definition-overriding=true# 配置数据源具体内容:连接池、驱动、地址、用户名、密码
# spring.shardingsphere.datasource.{你的数据源别名}.type
spring.shardingsphere.datasource.myds1.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.myds1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.myds1.url=jdbc:mysql://localhost:3306/course_db?serverTimezone=GMT+8
spring.shardingsphere.datasource.myds1.username=root
spring.shardingsphere.datasoaurce.myds1.password=123456#连接池初始化时创建的连接数
spring.shardingsphere.datasource.myds1.initial-size=1
#连接池中最少空闲连接数
spring.shardingsphere.datasource.myds1.min-idle=1
#连接池中最大活动连接数
spring.shardingsphere.datasource.myds1.max-active=50
#获取连接时最大等待时间,单位通常是毫秒
spring.shardingsphere.datasource.myds1.max-wait=60000
#查询超时时间,单位通常是毫秒
spring.shardingsphere.datasource.myds1.query-timeout=6000
#事务查询超时时间,单位通常是毫秒
spring.shardingsphere.datasource.myds1.transaction-query-timeout=6000
#移除废弃连接的超时时间,单位通常是毫秒
spring.shardingsphere.datasource.myds1.remove-abandoned-timeout=1800
# Druid连接池支持的过滤器,用来监控、日志记录等 设置stat,表示为只统计信息
spring.shardingsphere.datasource.myds1.filters=stat
#从连接池中取出连接时是否进行测试,以判断连接是否有效,值为false,表示不进行测试。
spring.shardingsphere.datasource.myds1.testOnBorrow=false# 指定course_db表的分布情况,配置表在那个数据库中,表名称分别是什么
# spring.shardingsphere.rules.sharding.tables.{表规则}.actual-data-nodes={表达式规则}
# myds1.course_$->{1..2} => myds1数据中的course_开头的,course_1和course_2表
spring.shardingsphere.sharding.tables.course.actual-data-nodes=myds1.course_$->{1..2}# 指定course主键生成策略 id生成策略SNOWFLAKE雪花算法
#如果不配置key-generator.type,则主键需要由自己生成(例如自增操作)
# spring.shardingsphere.rules.sharding.tables.{表规则}.database-strategy.standard.sharding-column
spring.shardingsphere.sharding.tables.course.key-generator.column=cid
spring.shardingsphere.sharding.tables.course.key-generator.type=SNOWFLAKE# 指定分片策略,约定cid值偶数操作course_1,cid值奇数操作course_2(以下这种操作对于只有两张表的情况下)
#当 cid 的值为偶数时,cid % 2 的结果是0,0 + 1 的结果是1,所以表名会是 course_1。
#当 cid 的值为奇数时,cid % 2 的结果是1,1 + 1 的结果也是2,所以表名会是 course_2。
spring.shardingsphere.sharding.tables.course.table-strategy.inline.sharding-column=cid
spring.shardingsphere.sharding.tables.course.table-strategy.inline.algorithm-expression=course_$->{cid % 2 + 1}# 打印sql输出日志
spring.shardingsphere.props.sql.show=true

当表大于2个,为16个时的时候

# 指定course_db表的分布情况,配置表在那个数据库中,表名称分别是什么
# spring.shardingsphere.rules.sharding.tables.{表规则}.actual-data-nodes={表达式规则}
# myds1.course_$->{0..15} => myds1数据中的course_开头的,course_0到course_15表,共16张表
spring.shardingsphere.sharding.tables.course.actual-data-nodes=myds1.course_$->{0..15}#以下这个配置
#如果cid是0,那么数据将被存储到course_0表中。
#如果cid是1,那么数据将被存储到course_1表中。
#...
#如果cid是15,那么数据将被存储到course_15表中。
spring.shardingsphere.sharding.tables.course.table-strategy.inline.sharding-column=cid
spring.shardingsphere.sharding.tables.course.table-strategy.inline.algorithm-expression=course_$->{cid % 16}

代码测试

编写测试程序测试插入效果,与查询效果

可以看到Sharding-JDBC会按照配置的规则向不同的表插入数据

其他的maven依赖版本 (shardingsphere-jdbc-core-spring-boot-starter)

shardingsphere-jdbc-core-spring-boot-starter
随着ShardingSphere的发展,项目从单一的Sharding-JDBC组件扩展为一个更完整的套件,包含了多个组件,如Sharding-JDBC、Sharding-Proxy等。
shardingsphere-jdbc-core-spring-boot-starter是ShardingSphere套件中用于JDBC集成的Spring Boot Starter。
与早期的sharding-jdbc-spring-boot-starter相比,它可能包含了更多的功能和优化,因为ShardingSphere本身也在不断发展和完善。

参考文章:SpringBoot整合Sharding-JDBC水平分表

数据迁移

参考文章
【1】使用sharding-scaling和sharding-proxy做分库分表数据迁移
https://blog.csdn.net/qq_37207854/article/details/130567728
【2】ShardingSphere——水平分表与数据迁移
https://blog.csdn.net/qq_20545159/article/details/121760472

直接使用客户端操作(非代码)

参考文章
【1】Sharding-Proxy 实现分库分表
https://blog.csdn.net/qq_38826019/article/details/119861073

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript - 请问你是如何中断forEach循环的

难度级别:中高级及以上 提问概率:65% forEach与原始for循环不同的是,并不能通过简单的break或是return中断循环,意思就是不管需要循环的数组有多长,一旦使用了,就会将数组所有元素循环一遍才会结束。其实回答这道题,就要想到forEach的使…

使用GDAL进行简单的坐标系转换

使用GDAL进行简单的坐标系转换 使用python GDAL进行简单的坐标系转换&#xff0c;暂时不考虑不同基准坐标系转换的精度问题。 安装环境 使用UbuntuAnaconda python 环境 conda install gdal 定义坐标系 from osgeo import gdal from osgeo import osrsrs_wgs84 osr.Spati…

Linux系统下关闭Java进程

关闭Java进程具体分为两步&#xff1a; 1.ps查进程ID 2.kill杀进程 具体的命令如下&#xff1a; ps查进程ID&#xff1a;ps -ef | grep java kill杀进程&#xff1a;kill -9 对应进程号 linux下解除被占用的端口号&#xff1a; 1.查看8088端口是否被占用&#xff1a; netsta…

开源区块链系统/技术 总结(欢迎补充,最新)

1. FISCO BCOS FISCO BCOS 2.0 技术文档 — FISCO BCOS 2.0 v2.9.0 文档https://fisco-bcos-documentation.readthedocs.io/ 2. ChainMaker&#xff08;长安链&#xff09; 文档导航 — chainmaker-docs v2.3.2 documentationhttps://docs.chainmaker.org.cn/v2.3.2/html/in…

基于ssm办公用品管理系统开发与设计论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本办公用品管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…

Composer Windows 安装

Composer 的下载地址为&#xff1a;Composer 1 运行安装程序 当启动安装程序后单击下一步继续。 选择 PHP 路径 如果你的计算机上没有安装 PHP 的话&#xff0c;Composer 的安装无法继续。 你需要选择你本地安装的 PHP 路径。 配置代理地址 默认的情况下&#xff0c;可以不…

酷开科技|酷开系统帮你找到快乐时光的正确打开方式!|酷开会员

在难得的周末假期中&#xff0c;你是否也希望自己的生活变得更加多彩呢&#xff1f;在闲暇时间里&#xff0c;你是否计划好了如何度过&#xff1f;小朋友们自然希望能够有父母陪伴在身边&#xff0c;而大朋友们也希望能给这个时节留下不一样的回忆。不论你对生活的期待是什么&a…

GPU部署ChatGLM3

首先&#xff0c;检查一下自己的电脑有没有CUDA环境&#xff0c;没有的话&#xff0c;去安装一个。我的电脑是4060显卡&#xff0c;买回来就自带这些环境了。没有显卡的话&#xff0c;也不要紧&#xff0c;这个懒人安装包支持CPU运行&#xff0c;会自动识别没有GPU&#xff0c;…

书生·浦语大模型-第三节课笔记/作业

笔记 作业 原版 prompt控制节奏&#xff0c;实现类似关键词检索、主题、信息抽取等功能注意这里根据llm返回的topic (prompt: 告诉我这句话的主题&#xff0c;直接说主题不要解释)进行召回检索(CacheRetriever), 并再次让大模型判断query与返回的检索的相关程度. 如果本地检索…

【问题处理】银河麒麟操作系统实例分享,ipelbats转发端口访问ftp目录空白问题处理

1.问题环境 系统环境 物理机 网络环境 私有网络 硬件环境 处理器 arm 软件环境 操作系统版本 V10-SP1-0518-arm 内核版本 4.19.90-23.15.ky10.aarch64 2.问题描述 iptables转发端口访问ftp目录空白&#xff0c;同一个脚本在redhat7.8上正常 2023/2/27&#xff0…

Matrix Multiplication

Algorithm 2 —— Strassen’s algorithm Idea The idea behind this algorithm consists in reducing the number of multiplications at the expense of increasing the number of additions and subtractions. In short, this algorithm uses 7 multiplications and 18 add…

NatCross实现NASCAB云可云内网穿透指南

一、简介 1、NAS_CAB介绍 跨平台NAS软件,远程管理照片,影音和文件&#xff0c;无需专用设备,个人版永久免费。官网地址&#xff1a;https://www.nascab.cn/。 2、NatCross介绍 NatCross是内网穿透工具,也是免费的端口映射和DDNS动态域名解析软件。软件从2021年上线以来&…