Sharding-JDBC(一)SpringBoot集成

article/2025/9/13 8:54:35

目录

    • 1.背景
    • 2.简介
    • 3.依赖与配置
    • 4.表结构(1..3)
    • 5.测试验证
      • 5.1 批量保存
      • 5.2 列表查询
    • 6.源码地址

1.背景

  • 随着业务数据量的增加,原来所有的数据都是在一个数据库上,网络IO及文件IO都集中在一个数据库上,因此CPU、内存、文件IO、网络IO都可能会成为系统瓶颈。
  • 当业务系统的数据容量接近或超过单台服务器的容量,QPS/TPS会受限于单个数据库实例的处理极限。

2.简介

Sharding-JDBC: 是当当网脱离出来的一款用于在客户端的 JDBC 层提供的额外服务轻量级Java框架。适用于微服务的分布式数据访问基础类库,完整地实现了分库分表读写分离分布式主键功能,并初步实现了柔性事务。

官网: https://shardingsphere.apache.org/index_zh.html

官方文档:https://shardingsphere.apache.org/document/current/cn/overview/

Sharding-JDBC架构图:

在这里插入图片描述

知识拓展:

  • 2018 年 5 月,因为增加了 Proxy 的版本和 Sharding-Sidecar(尚未发布),Sharding-JDBC 更名为 Sharding Sphere,从一个客户端的组件变成了一个套件。

Sharding-JDBC 与 Sharding-Proxy 区别:

从设计理念上看确实有一定的相似性。主要流程都是SQL 解析 -> SQL 路由 -> SQL 改写 -> SQL 执行 -> 结果归并。但架构设计上是不同的。

  • Sharding-Proxy是基于 Proxy,它复写了 MySQL 协议,将 服务 伪装成一个 MySQL 数据库;
  • Sharding-JDBC 是基于 JDBC 的扩展,是以 jar 包的形式提供轻量级服务的。

在这里插入图片描述

数据表拆分标准:

1.表的体积大于2G;

2.表的行数大于1000w,以单表主键等简单形式访问数据;

3.表的行数大于500w,小范围查询(结果集小于100行)等形式访问数据;

4.表的行数大于200w,以多表join,范围查询,order by,group by,高频率等复杂形式访问数据,由于DML;

5.数据有时间过期特性的。

只要达到上面任何一个标准,都需要做分表处理。

ShardingJDBC支持SQL:

数据库支持状态
MySQL支持,完善
PostgreSQL支持,完善
SQLServer支持
Oracle支持
SQL92支持

3.依赖与配置

Maven依赖:

<!-- Sharding-JDBC -->
<dependency><groupId>org.apache.shardingsphere</groupId><artifactId>sharding-jdbc-spring-boot-starter</artifactId><version>4.0.1</version>
</dependency>

yml配置:

spring:shardingsphere:# 打印sql
#    props:
#      sql:
#        show: truedatasource:names: mydbmydb:type: com.alibaba.druid.pool.DruidDataSourceurl: jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghaidriver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: root# 数据源其他配置initialSize: 5minIdle: 5maxActive: 20maxWait: 60000timeBetweenEvictionRunsMillis: 60000minEvictableIdleTimeMillis: 300000validationQuery: SELECT 1 FROM DUALtestWhileIdle: truetestOnBorrow: falsetestOnReturn: falsepoolPreparedStatements: true# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙#filters: stat,wall,log4jmaxPoolPreparedStatementPerConnectionSize: 20useGlobalDataSourceStat: trueconnectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500sharding:# 表策略配置tables:# t_user 是逻辑表t_user:# 分表节点 可以理解为分表后的那些表 比如 t_user_1 ,t_user_2 ,t_user_3actualDataNodes: mydb.t_user_$->{1..3}tableStrategy:inline:# 根据哪列分表shardingColumn: age# 分表算法 例如:age为奇数 -> t_user_2; age为偶数 -> t_user_1algorithmExpression: t_user_$->{age % 2 + 1}# 分表算法 例如:age为3 -> t_user_3
#              algorithmExpression: t_user_$->{age}# 分表后,sharding-jdbc的全局id生成策略
#              keyGenerator:
#                type: SNOWFLAKE
#                # 对id列采用 sharding-jdbc的全局id生成策略
#                column: id

4.表结构(1…3)

-- ------------------------------
-- 用户表1
-- ------------------------------
CREATE TABLE `t_user_1` (`id` bigint(16) NOT NULL AUTO_INCREMENT COMMENT '主键',`username` varchar(64) NOT NULL COMMENT '用户名',`password` varchar(64) NOT NULL COMMENT '密码',`age` int(8) NOT NULL COMMENT '年龄',`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表1';-- ------------------------------
-- 用户表2
-- ------------------------------
CREATE TABLE `t_user_2` (`id` bigint(16) NOT NULL AUTO_INCREMENT COMMENT '主键',`username` varchar(64) NOT NULL COMMENT '用户名',`password` varchar(64) NOT NULL COMMENT '密码',`age` int(8) NOT NULL COMMENT '年龄',`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表2';-- ------------------------------
-- 用户表3
-- ------------------------------
CREATE TABLE `t_user_3` (`id` bigint(16) NOT NULL AUTO_INCREMENT COMMENT '主键',`username` varchar(64) NOT NULL COMMENT '用户名',`password` varchar(64) NOT NULL COMMENT '密码',`age` int(8) NOT NULL COMMENT '年龄',`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表3';

5.测试验证

测试代码:

package com.demo;import com.demo.module.entity.TUser;
import com.demo.module.service.TUserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.ArrayList;
import java.util.List;@SpringBootTest
class SpringbootDemoApplicationTests {@Autowiredprivate TUserService userService;@Testvoid saveTest() {List<TUser> users = new ArrayList<>(3);users.add(new TUser("ACGkaka_1", "123456", 10));users.add(new TUser("ACGkaka_2", "123456", 11));users.add(new TUser("ACGkaka_3", "123456", 12));userService.saveBatch(users);}@Testvoid listTest() {List<TUser> users = userService.list();System.out.println(">>>>>>>>>> 【Result】<<<<<<<<<< ");users.forEach(System.out::println);}}

5.1 批量保存

执行结果(t_user_1):

在这里插入图片描述

执行结果(t_user_2):

在这里插入图片描述

5.2 列表查询

执行结果:

在这里插入图片描述

6.源码地址

地址: https://gitee.com/acgkaka/SpringBootExamples/tree/master/springboot-sharding-jdbc

整理完毕,完结撒花~





参考地址:

1.sharding-jdbc与Sharding-Proxy,https://www.jianshu.com/p/20c0d4114632

2.mysql数据库多少数据才考虑拆分数据表table,https://www.zzzyk.com/show/14e6b51d08c6578f.htm

3.Sharding-JDBC实战(史上最全),https://blog.csdn.net/crazymakercircle/article/details/123420859


http://chatgpt.dhexx.cn/article/tdV0Noux.shtml

相关文章

第一篇【Python】基础-关东升-专题视频课程

第一篇【Python】基础—833人已学习 课程介绍 本书是智捷课堂开发的立体化图书中的一本&#xff0c;所谓“立体化图书”就是图书包含&#xff1a;书籍、视频、课件和服务等内容。 其中第一篇包括8章内容&#xff0c;系统介绍了Python语言的基础知识。内容包括Python语言历史…

shardingsphere-jdbc 整合 springboot

shardingsphere官网地址 https://shardingsphere.apache.org/document/5.2.0/cn/user-manual/shardingsphere-jdbc/spring-boot-starter/rules/sharding/ 当前我们演示的是水平分表 1、基础环境配置以及依赖管理 1.1 创建数据库表结构 CREATE TABLE address_0 (id bigint(…

如果张东升是个程序员

张东升是一家互联网公司的程序员&#xff0c;一直以来都勤勤恳恳老实工作。 可最近一段时间&#xff0c;行业不景气&#xff0c;老板不但下令开启了996的工作模式&#xff0c;更要命的是频频更改需求&#xff0c;弄得大家是敢怒不敢言。 时间一久&#xff0c;很多员工开始消极…

专访关东升:松耦合分层架构设计

关东升,国内知名iOS技术作家,iOS技术顾问,高级培训讲师,移动开发专家。拥有16年软件开发经验、8年培训行业经验。精通iOS、Android和 Windows Phone 7及Html5等移动开发技术。在App Store发布多款游戏和应用软件,擅长移动平台的应用和游戏类项目开发。目前主要从事iOS应用…

Java从小白到大牛第3篇 【进阶篇】-关东升-专题视频课程

Java从小白到大牛第3篇 【进阶篇】—4371人已学习 课程介绍 本视频是智捷课堂推出的一套“Java语言学习立体教程”的视频第三部分&#xff0c;读者以及观看群是初级小白&#xff0c;通过本视频的学习能够成为Java大牛。本主要内容包括&#xff1a;异常处理、集合、泛型、文…

Python项目实战:数据可视化与股票数据分析-关东升-专题视频课程

Python项目实战&#xff1a;数据可视化与股票数据分析—333人已学习 课程介绍 本视频内容包括使用Matplotlib绘制图表、MySQL数据库、Python访问数据库和Lambda表达式。 目录&#xff1a; 23.1 使用Matplotlib绘制图表 23.1.1 安装Matplotlib 23.1.2 图表基本构成要素 23.1…

【ShardingSphere技术专题】「ShardingJDBC实战阶段」SpringBoot之整合ShardingJDBC实现分库分表(JavaConfig方式)

前提介绍 ShardingSphere介绍 ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈&#xff0c;它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar&#xff08;计划中&#xff09;这3款相互独立的产品组成。 他们均提供标准化的数据分片、分布式事务和数据…

关东升给的ios学习路线图(可以借鉴)

来源&#xff1a; http://www.zhijieketang.com/classroom/3/introduction 首页 课程 免费课程 会员 关于我们 登录 注册 首页 iOS课程 iOS会员-iOS开发学习路线图 iOS会员-iOS开发学习路线图 扫二维码继续学习 (0评价) 价格&#xff1a; 1500 金币 学员(17) 课程(37) …

关东升的《从零开始学Swift》3月9日已经上架

大家一直期盼的《从零开始学Swift》于3月9日已经上架&#xff0c;它是关东升老师历时8个月的呕心沥血所编著&#xff0c;全书600多页&#xff0c;此本书基于Swift 2.x&#xff0c;通过大量案例全面介绍苹果平台的应用开发。全书共分5 部分&#xff0c;包括Swift语法篇、Cocoa T…

python从小白到大牛百度云盘_Java从小白到大牛 (关东升著) 中文pdf+mobi版[36MB]

《Java从小白到大牛》是一本Java语言学习立体教程&#xff0c;读者群是零基础小白&#xff0c;通过本书的学习能够成为Java大牛。主要内容包括&#xff1a;Java语法基础、Java编码规范、数据类型、运算符、控制语句、数组、字符串、面向对象基础、继承与多态、抽象类与接口、枚…

SpringBoot 整合 Sharding-JDBC

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、sharding-jdbc简介二、使用步骤 1.新建项目、引入依赖2.代码实战总结 前言 SpringBoot 整合 Sharding-JDBC 提示&#xff1a;以下是本篇文章正文内容&…

关东升的iOS实战系列图书 《iOS实战:传感器卷(Swift版)》已经上市

&#xfeff;&#xfeff; 承蒙广大读者的厚爱我的 《iOS实战&#xff1a;传感器卷&#xff08;Swift版&#xff09;》京东上市了&#xff0c;欢迎广大读者提出宝贵意见。http://item.jd.com/11760248.html 欢迎关注关东升新浪微博tony_关东升。 关注智捷课堂微信公共平台&…

Java从小白到大牛第1篇 Java基础-关东升-专题视频课程

Java从小白到大牛第1篇 Java基础—3042人已学习 课程介绍 本视频是智捷课堂推出的一套“Java语言学习立体教程”的视频第一部分&#xff0c;读者以及观看群是初级小白&#xff0c;通过本视频的学习能够成为Java大牛。本主要内容包括&#xff1a;Java语法基础、Java编码规范…

Sharding-JDBC 基础

Sharding-JDBC 是当当网开源的适用于微服务的分布式数据访问基础类库&#xff0c;完整的实现了分库分表&#xff0c;读写分离和分布式主键功能&#xff0c;并初步实现了柔性事务。 从 2016 年开源至今&#xff0c;在经历了整体架构的数次精炼以及稳定性打磨后&#xff0c;如今…

python从小白到大牛pdf 下载 资源共享_Kotlin从小白到大牛 (关东升著) 中文pdf高清版[12MB]...

本书是一本Kotlin语言学习立体教程&#xff0c;主要内容包括&#xff1a;Kotlin语法基础、Kotlin编码规范、数据类型、字符串、运算符、程序流程控制、函数、面向对象基础、继承与多态、抽象类与接口、高阶函数、Lambda表达式、数组、集合、函数式编程API、异常处理、线程、协程…

Java从小白到大牛第4篇项目实战1——PetStore宠物商店-关东升-专题视频课程

Java从小白到大牛第4篇项目实战1——PetStore宠物商店—1764人已学习 课程介绍 PetStore是Sun&#xff08;现在Oracle&#xff09;公司为了演示自己的Java EE技术&#xff0c;而编写的一个基于Web宠物店项目。PetStore是典型的电子商务项目&#xff0c;是现在很多电商平台的…

Sharding-JDBC(二)- Sharding-JDBC介绍

文章目录 一、Sharding-JDBC介绍1. Sharding-JDBC介绍2. Sharding-JDBC与JDBC性能对比 二、Sharding-JDBC快速入门1. 需求说明2. 环境搭建2.1 环境说明2.2 创建数据库2.3 引入maven依赖 3. 编写程序3.1 分片规则配置3.2.数据操作3.3.测试 4. 流程分析5. 其他集成方式5.1 Spring…

2022年适合初学者的Python书籍推荐

一、前言 网上有很多Python书或者视频&#xff0c;种类繁多该怎么选择&#xff1f; 看书全是文字看就了眼睛累&#xff0c;也容易厌倦&#xff0c;看视频有时候又觉得讲的慢&#xff0c;有其他方案吗&#xff1f; 其实&#xff0c;关于自学python&#xff0c;找一本浅显易懂&…

师傅带徒弟学:Python游戏开发引擎cocos2d-python-关东升-专题视频课程

师傅带徒弟学&#xff1a;Python游戏开发引擎cocos2d-python—299人已学习 课程介绍 Python语言之所以受欢迎&#xff0c;很大的原因是有很多可以使用的库&#xff0c;Python社区也有很多游戏开发库&#xff0c;其中较为优秀有&#xff1a;Cocos2d、Pyglet和Pygame&#xf…

关东升的《从零开始学Swift》即将出版

大家好&#xff1a; 苹果2015WWDC大会发布了Swift2.0&#xff0c;它较之前的版本Swift1.x有很大的变化&#xff0c;所以我即将出版《从零开始学Swift》《从零开始学Swift》将在《Swift开发指南》第1版的基础上添加Swift2.0的内容&#xff0c;同时摒弃第1版的一些不合理的内容&a…