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.mzph.cn/news/797583.shtml

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

相关文章

鸿蒙:应用级变量的状态管理

状态管理模块提供了应用程序的数据存储能力、持久化数据管理能力、UIAbility数据存储能力和应用程序需要的环境状态。 说明 本模块首批接口从API version 7开始支持&#xff0c;后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 本文中T和S的含义如下&…

【翻译】F - Max Sum Counting Editorial by en_translator

给定两个序列 A 和 B&#xff0c;按照 A_i 的增序对它们进行排序&#xff08;如果 A_i 相等&#xff0c;则按照 B_i 来确定顺序&#xff09;。对于集合 {1, 2, ..., N} 的每个非空子集 S&#xff0c;满足 max_{i∈S} A_i A_{max(S)}。因此&#xff0c;我们可以将问题转化如下。…

Tensor.view()的用法

view() x.view() 是 PyTorch 中用于改变张量形状的方法之一&#xff0c;它允许你在保持张量元素总数不变的情况下&#xff0c;重新组织张量的维度和大小。 view() 方法的用法如下&#xff1a; x.view(*shape)其中 x 是要进行形状变换的张量&#xff0c;shape 是一个整数或整…

vmware 中的Ubuntu系统虚拟机忘记root密码强制重置操作

忘记密码情况下&#xff0c;vmware虚拟机重置Ubuntu的root密码 在企业使用的vmware ESXI中重置Ubuntu系统root密码 1-本地电脑安装个人版的vmware workstation&#xff0c;目的&#xff1a;vmware ESXI自带的远程控制台无法输入指定的键盘按键&#xff0c;需要借助外部的远程辅…

mac在终端使用命令启动IDEA打开项目

mac 在终端使用命令启动IDEA打开项目 背景&#xff1a;每次从 git 中 clone 下来项目&#xff0c;都需要手动打开 finder&#xff0c;然后拖到 IDEA 图标上打开项目&#xff0c;探索类似 vscode 一样使用 code 命令打开项目&#xff0c;一键启动IDEA并打开项目。 macOS 终端 创…

【ELK】搭建elk日志平台(使用docker-compose),并接入springboot项目

1、环境搭建 前提条件&#xff1a;请自行安装docker以及docker-compose环境 version: 3 services:elasticsearch:image: elasticsearch:7.14.0container_name: elasticsearchports:- "9200:9200"- "9300:9300"environment:# 以单一节点模式启动discovery…

【算法 | 背包专题】01背包(解题思路+题单)

前言 什么是背包问题&#xff1f; 背包问题是一种经典的组合优化问题&#xff0c;它的核心思想是在有限的资源&#xff08;如背包的容量&#xff09;下&#xff0c;如何选择物品以达到某种目标&#xff08;如最大价值&#xff09;的最优解。 背包问题可以分为几种类型&#…

java之static详细总结

static也叫静态&#xff0c;可以修饰成员变量、成员方法。 成员变量 按照有无static分为两种&#xff1a; 类变量&#xff1a;static修饰&#xff0c;属于类&#xff0c;与类一起加载一次&#xff0c;在内存中只有一份&#xff0c;会被类的全部对象共享实例变量&#xff08;…

Elastic AI Assistant for Observability 和 Microsoft Azure OpenAI 入门

作者&#xff1a;来自 Elastic Jonathan Simon 最近&#xff0c;Elastic 宣布 AI 观测助手现已正式向所有 Elastic 用户开放。该 AI 观测助手为 Elastic 观测提供了一种新工具&#xff0c;提供了大型语言模型&#xff08;LLM&#xff09;连接的聊天和上下文洞察&#xff0c;以解…

WebView 后退键处理技巧:如何处理网页历史记录

引言 WebView 是移动应用开发中一个非常重要的组件&#xff0c;它允许开发者在应用内部直接展示网页内容&#xff0c;而无需跳转到外部浏览器。这种能力极大地丰富了移动应用的功能&#xff0c;为用户提供了更加完整的体验。以下是 WebView 在移动应用中的一些常见使用场景&am…

JavaWeb入门——Web前端概述及HTML,CSS语言基本使用

前言&#xff1a; java基础已经学完&#xff0c;开始学习javaWeb相关的内容&#xff0c;整理下笔记&#xff0c;打好基础&#xff0c;daydayup!!! Web Web&#xff1a;全球广域网&#xff0c;也称万维网&#xff08;www World Wide Web&#xff09;&#xff0c;能够通过浏览器访…

Hadoop MapReduce

MapReduce分为两个阶段&#xff0c;分为Map阶段和Reduce阶段&#xff0c;可以自定义map函数和reduce函数&#xff0c; map函数的输入是行在文件的字节偏移量&#xff0c;value是文件的一行数据。 reduce函数的输入是key和对应key的value组&#xff0c;然后reduce函数可以对这…

加州大学欧文分校英语基础语法专项课程01:Word Forms and Simple Present Tense 学习笔记

Word Forms and Simple Present Tense Course Certificate 本文是学习Coursera上 Word Forms and Simple Present Tense 这门课程的学习笔记。 文章目录 Word Forms and Simple Present TenseWeek 01: Introduction & BE VerbLearning Objectives Word FormsWord Forms (P…

彩虹易支付搭建教程

服务器环境 推荐使用宝塔、AMH、XP等面板一键部署服务器环境。 PHP版本&#xff1a;>7.1&#xff0c;推荐7.4或8.0 MySQL版本&#xff1a;5.6或5.7 伪静态配置 直接上传后访问即可完成安装&#xff01;创建好网站之后&#xff0c;需要配置伪静态才能正常发起支付。以下分…

Linux——gdb

gdb调试 (1)debug版本: 在编译阶段会加入某些调试信息; 调试信息是在编译的过程中加入到中间文件.o文件的; gcc -c main.c -g:生成包含调试信息的中间文件 gcc -o main main.o 一步执行:gcc -o main main.c -g (1) (2)release版本: 发行版本,没有调试信息; gcc默认生成relea…

C++ 【桥接模式】

简单介绍 桥接模式属于 结构型模式 | 可将一个大类或一系列紧密相关的类拆分 为抽象和实现两个独立的层次结构&#xff0c; 从而能在开发时分别使用。 聚合关系&#xff1a;两个类处于不同的层次&#xff0c;强调了一个整体/局部的关系,当汽车对象销毁时&#xff0c;轮胎对象…

psutil库(获取系统资源信息)

1、功能简介 psutil库是Python的一个第三方模块&#xff0c;它提供了丰富的接口来获取操作系统和系统硬件的信息。以下是psutil的一些主要功能&#xff1a; CPU信息获取&#xff1a;可以使用psutil来获取CPU的逻辑数量和物理核心数量。这有助于了解系统的处理能力。磁盘使用情…

基于单片机光伏太阳能跟踪系统设计

**单片机设计介绍&#xff0c;基于单片机光伏太阳能跟踪系统设计 文章目录 一 概要二、功能设计三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机光伏太阳能跟踪系统的设计&#xff0c;旨在通过单片机技术实现对光伏太阳能设备的自动跟踪&#xff0c;以提高太阳…

Go语言中测试和性能

1. 测试:软件开发最重要的方面 测试软件程序可能是软件开发人员能够做的最重要的事情。通过测试代码的功能,开发人员能够在很大程度上确定程序是有效的。另外,每次修改代码后,开发人员都可运行测试,确认没有引入Bug和衰退。通过测试软件,还能够让软件工程师确认程序按期望…

寄快递便宜啦!德邦、韵达、京东、圆通等八大品牌快递五折起!

低价服务&#xff0c;为你的快递需求保驾护航。 一、与全网主流快递合作&#xff0c;信赖与质量的共同见证 是一家整合快递、物流、及国际快递资源的综合快递服务平台&#xff0c;通过人工智能比价系统&#xff0c;为个人及企业客户提供市面上优惠的快递价格&#xff0c;目前…